FATE: ускорение MoE-моделей в llama.cpp на 90% | AiManual
AiManual Logo Ai / Manual.
07 Апр 2026 Инструмент

FATE: как ускорить вывод MoE-моделей в llama.cpp с помощью кэша экспертов и prefetching

Обзор FATE - форка llama.cpp с кэшем экспертов и prefetching для ускорения вывода MoE-моделей. Примеры с Qwen3-30B.

Почему 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, чтобы эксперты оставались в видеопамяти между вызовами, а система заранее предсказывала, какие эксперты понадобятся в следующий момент.

💡
На прототипе с Qwen3-30B FATE показал рост скорости с 33.74 до 64.45 токенов в секунду - почти в два раза. И это на том же железе.

Как работает кэш экспертов

Вместо того чтобы загружать эксперта для каждого токена с нуля, 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 или другую обертку, знание о низкоуровневых оптимизациях поможет принимать решения о масштабировании.

И последнее: всегда проверяйте качество модели после ускорения. Иногда кэширование может влиять на численную стабильность. Запустите несколько тестовых промптов и сравните ответы с базовой версией. Если все хорошо - наслаждайтесь скоростью.

Подписаться на канал