Почему MoE-модели тормозят даже на быстрых видеокартах?
Запускаешь Qwen3-30B на RTX 4090, а скорость вывода едва достигает 30 токенов в секунду. В чем дело? Проблема в архитектуре Mixture of Experts: для каждого токена активны только несколько экспертов, но их нужно постоянно подгружать из памяти. Если эксперты не помещаются в VRAM, начинается веселье с пересылкой данных между GPU и RAM.
Стандартный llama.cpp в таких сценариях тратит до 70% времени на ожидание загрузки экспертов, а не на вычисления.
FATE: когда эксперты живут в кэше, а не в аду ожидания
FATE (Fast Attention and Tensor Experts) - это форк llama.cpp, который добавляет две ключевые оптимизации: кэширование экспертов на GPU и предварительную загрузку (prefetching). Авторы проекта переписали критичные участки кода на CUDA, чтобы эксперты оставались в видеопамяти между вызовами, а система заранее предсказывала, какие эксперты понадобятся в следующий момент.
Как работает кэш экспертов
Вместо того чтобы загружать эксперта для каждого токена с нуля, FATE сохраняет наиболее часто используемых экспертов в выделенном кэше на GPU. Когда модель обращается к эксперту, система сначала проверяет кэш. Попадание - и данные уже под рукой. Промах - загружаем из основной памяти, но теперь с предварительной загрузкой соседних экспертов.
Predictive prefetching: угадываем будущее
Префетчинг в FATE не просто загружает экспертов пачками. Он анализирует паттерны доступа: если в текущем слое активны эксперты 3 и 7, то в следующем слое с высокой вероятностью понадобятся эксперты 4 и 8. Система заранее ставит их в очередь на загрузку, перекрывая вычислениями и передачей данных.
| Метод | Скорость (tok/s) | Использование VRAM |
|---|---|---|
| llama.cpp (базовый) | 33.74 | ~18 ГБ |
| FATE с кэшем | 54.20 | ~20 ГБ |
| FATE с кэшем и prefetching | 64.45 | ~22 ГБ |
FATE против других оптимизаций: когда что выбрать
Есть и другие способы ускорить MoE-модели: квантование, изменение количества экспертов, специальные бэкенды вроде vLLM. Но FATE уникален тем, что не жертвует качеством и не требует изменения модели.
- Квантование: уменьшает размер модели, но может ухудшить качество. FATE работает с полной точностью.
- vLLM с Marlin: отлично для серверов, но сложно настроить на локальной машине. FATE - это просто форк llama.cpp.
- Уменьшение числа экспертов: как в статье про сравнение 8 vs 4 экспертов, но FATE сохраняет всю архитектуру.
Если у вас мало VRAM, сначала попробуйте квантование - например, из гайда по квантованию MoE. Но если видеопамяти хватает с запасом, FATE даст максимальный прирост без компромиссов.
Как использовать FATE: от сборки до первого запуска
Собрать FATE не сложнее, чем оригинальный llama.cpp. Но есть нюансы с версиями CUDA и компиляторами.
1 Установка зависимостей
Понадобится CUDA 12.4 или новее (на апрель 2026 года актуальна версия 12.6). Обновите драйверы и установите cuDNN. Для Ubuntu:
sudo apt update
sudo apt install build-essential cmake
# Установите CUDA Toolkit с официального сайта NVIDIA
2 Сборка FATE
Клонируйте репозиторий и соберите с поддержкой CUDA:
git clone https://github.com/author/fate.git
cd fate
mkdir build && cd build
cmake .. -DLLAMA_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES="native"
make -j$(nproc)
Если у вас видеокарта Blackwell (RTX 5090/Pro 6000), убедитесь, что используете CUDA 12.6 и новее. Для проблем с ядрами в vLLM есть отдельный гайд, но в FATE подобные ошибки маловероятны.
3 Запуск модели
Команда похожа на стандартную llama.cpp, но с флагами для кэша и префетчинга:
./main -m qwen3-30b.Q8_0.gguf -p "Привет, как дела?" \
--moe-cache-size 4096 \
--moe-prefetch-depth 2 \
--gpu-layers 99
--moe-cache-size: размер кэша экспертов в мегабайтах. Начните с 4096 (4 ГБ) для 30B модели.--moe-prefetch-depth: глубина предсказания. Значение 2 означает, что система заглядывает на два слоя вперед.--gpu-layers: как обычно, сколько слоев загружать на GPU.
Кому подойдет FATE, а кому лучше остаться на stock llama.cpp
FATE - не панацея. Он создает дополнительную нагрузку на видеопамять (кэш ведь тоже место занимает). Если у вас VRAM в обрез, как в случае запуска 30B модели на ноутбуке с 8 ГБ VRAM, лучше использовать квантованную модель и стандартный llama.cpp.
А вот если вы работаете с большими MoE-моделями на сервере или мощной рабочей станции, где VRAM не критична, FATE даст заметный прирост скорости. Особенно для задач потоковой обработки текста, где задержки недопустимы.
Не используйте FATE для CPU-only сценариев. Оптимизации заточены под GPU, и на CPU вы получите только оверхед. Для CPU есть свои трюки, описанные в статье про запуск 120B моделей на DDR5.
Что дальше: будущее оптимизаций MoE
FATE - только начало. В 2026 году появляются более радикальные подходы вроде MoLE (Mixture of Latent Experts), где эксперты живут в lookup-таблицах, как описано в анонсе MoLE. Но такие технологии пока экспериментальны.
Совет: если вы разрабатываете приложение на MoE-моделях, внедрите FATE в пайплайн тестирования. Даже если сейчас вы используете vLLM или другую обертку, знание о низкоуровневых оптимизациях поможет принимать решения о масштабировании.
И последнее: всегда проверяйте качество модели после ускорения. Иногда кэширование может влиять на численную стабильность. Запустите несколько тестовых промптов и сравните ответы с базовой версией. Если все хорошо - наслаждайтесь скоростью.