Оптимизация обработки мультимодальных промптов в llama.cpp b11227: ускорение до 7,61×¶
6.0/10
В релизе llama.cpp b11227 устранено избыточное резервирование планировщика при переключении флага причинного внимания (`causal_attn`), что кардинально ускорило инжест мультимодальных данных. В тестах `llama-server` с моделью gemma-4-26B-A4B (квантование Q4_0, проектор BF16 mmproj, 130 токенов на изображение и `cache_prompt=false`) задержка обработки 24 изображений при параметрах `-c 32768 -ub 2048` сократилась с 13 377 до 1 759 мс на NVIDIA RTX 4090 (ускорение 7,61×) и с 5 379 до 1 584 мс на NVIDIA H200 (ускорение 3,40×). Для одиночного кадра при `-c 8192 -ub 512` время обработки снизилось с 201 до 119 мс (1,69×) на RTX 4090 и со 134 до 105 мс (1,27×) на H200. Оптимизация не затрагивает перестроение графа и сохраняет полную побитную идентичность генерируемого вывода.
Технический механизм оптимизации¶
Для каждого блока невизуальных токенов в моделях семейства Gemma флаг `causal_attn` переключался дважды, вызывая дорогостоящие проходы `sched_reserve()`, накладные расходы которых масштабировались с ростом размера контекста (`-c`) и микробатча (`-ub`). Изменение флага затрагивает только значения, записываемые в маску KQ, и не меняет геометрию тензоров или размеры буферов, что сделало повторное выделение ресурсов планировщиком ненужным. Дополнительно в реализации `qwen4exp` выбор пути блочного смещения был переведен исключительно на анализ формы маски вместо `causal_attn`, что предотвратило нежелательные аллокации буферов при установленном флаге `GGML_SCHED_NO_REALLOC`.
Практический выигрыш в эффективности¶
В пайплайнах обработки видео и многостраничных документов устранение оверхеда планировщика снижает TTFT на величину до 11,6 секунд на запрос при больших контекстных окнах (32K), кратно повышая пропускную способность мультимодальных агентов без дополнительных затрат памяти.