Проект llama.cpp внедряет поддержку архитектуры Granite-Switch, варианта плотной модели с N встроенными адаптерами LoRA, которые выбираются на токене посредством управляющих токенов. Эта реализация заменяет предыдущий концепт глобального «липкого» индекса причинным механизмом внимания «маршрутизатора» в графе для разрешения индексов адаптеров.
- Новый маршрутизатор использует слой причинного внимания с одной головой для восстановления индекса адаптера внутри графа, устраняя проблемы конкурентности, при которых несколько последовательностей ранее утекали состояниями адаптеров друг в друга.
- За счёт хранения ключей и значений маршрутизатора в KV-кэше на уровне последовательности одновременные запросы теперь изолированы без необходимости управления глобальным состоянием.
- Архитектура поддерживает переключение внутри последовательности, позволяя активировать разные адаптеры для конкретных задач, таких как ответность или переформулирование запроса, в рамках одной последовательности.
- Известное ограничение остаётся: как только адаптер срабатывает внутри последовательности, он остаётся активным до её завершения, поскольку усиление маршрутизатора плоское и не имеет смещения к недавним данным.
Это изменение позволяет эффективно выполнять многозадачное выведение на CPU за счёт динамического переключения между специализированными адаптерами без перезагрузки моделей, сохраняя изоляцию для одновременных пакетных запросов.