Перейти к содержанию

Оптимизация выбора тайлов mat_mul_id для MoE-моделей на бэкенде Vulkan в llama.cpp b11265

5.0/10

В релизе llama.cpp b11265 (PR #29182) для бэкенда Vulkan реализован выбор размера тайлов матричного умножения `mat_mul_id` с учетом архитектуры Mixture-of-Experts (MoE). Ранее планировщик выбирал конфигурацию тайла на основе общего количества токенов, хотя в сетке диспетчеризации MoE реальная размерность N на одну рабочую группу (workgroup) определяется числом строк на конкретного эксперта. Например, на тесте `pp128` с моделью Sarvam 30B фактическое число активных строк составляет около 6, а не 128, из-за чего ошибочно выбирался крупный `l-tile`, и большинство потоков в каждой рабочей группе простаивали. На этот неэффективный участок приходилось 55% общего времени выполнения задачи, поэтому учет реального числа строк на эксперта напрямую устраняет холостую работу вычислительных блоков при инференсе через Vulkan.

Механизм оптимизации тайлинга MoE в Vulkan

В бэкенде Vulkan оптимизирован алгоритм выбора тайлов матричного умножения (`mat_mul_id`) для сеток диспетчеризации MoE: размер тайла теперь рассчитывается исходя из фактического числа строк на эксперта, а не суммарного количества входных токенов. Ранее, например при обработке промпта pp128 на архитектуре Sarvam 30B, селектор назначал крупный l-tile всего на ~6 активных строк вместо 128, из-за чего подавляющая часть воркеров в каждой рабочей группе простаивала. Учет реального параметра N для каждого эксперта устраняет неэффективную утилизацию вычислительных ресурсов GPU, на которую ранее приходилось до 55% времени выполнения всей задачи.

Прирост эффективности

Отказ от избыточного размера `l-tile` при малом числе активных строк на эксперта (~6 вместо 128 на `pp128` для Sarvam 30B) ликвидирует простой потоков внутри рабочих групп GPU. Это ускоряет выполнение узкого места конвейера, которое до исправления занимало 55% всего времени обработки задачи.