Как выжать 340 токенов в секунду из 204GB MoE-модели на одной видеокарте
Энтузиаст разработал метод запуска огромных MoE-моделей (Kimi 2.7, 204GB) на одной системе через хитрую комбинацию unified memory, кэширования VRAM и выборочной выгрузки экспертов. На DGX Spark достиг 340 токенов/сек на промпте и 9.6 на генерации — в разы быстрее CPU. На обычных 3090 тоже работает, но медленнее из-за узкого PCIe.
Открывает путь к локальному запуску флагманских MoE-моделей (200+ GB) на потребительском железе без дорогих серверов. Для энтузиастов и малых команд — возможность экспериментировать с SOTA-моделями без облачных расходов.
Что придумали
Энтузиаст поделился методом запуска MoE-моделей размером 200+ гигабайт на одной видеокарте через llama.cpp. Суть: использовать VRAM как кэш поверх диска, держа активных «экспертов» модели на GPU, а холодные веса — в оперативке или на SSD.
Цифры
На NVIDIA DGX Spark с моделью Kimi K2.7 (204GB): - Обработка промпта: 340 токенов/сек - Генерация: 9.6 токенов/сек - Для сравнения: чисто на CPU — 4.2 и 1.6 соответственно (в 80 раз медленнее)
На двух RTX 3090 (24GB каждая) с Minimax M2.7 (80GB): - Промпт: 54 токенов/сек - Генерация: 2.9 токенов/сек - Обычный layer split: 73.8 и 1.66 — промпт быстрее, но генерация хуже
Как это работает
1. Unified Memory (GGML_CUDA_ENABLE_UNIFIED_MEMORY=1): все тензоры получают единый виртуальный адрес для CPU и GPU. Если страница не в VRAM — мигрирует из RAM или подгружается с диска через mmap.
2. Принудительный GPU (GGML_OP_OFFLOAD_MIN_BATCH=1): форсирует вычисления на GPU даже при малых батчах (важно для генерации).
3. Выборочная выгрузка экспертов (regex -ot): веса экспертов держатся в RAM/на диске, кроме последних слоёв с динамической маршрутизацией — их закрепляют в VRAM.
Компромиссы
- На unified RAM (DGX): закрепление последних слоёв в VRAM ускоряет генерацию в 3 раза (9.6 vs 3.2 токенов/сек)
- На обычных GPU + DDR: PCIe становится узким местом — генерация быстрее (2.9 vs 1.66), но промпт страдает (54 vs 73 токенов/сек)
- Два GPU: пока медленнее одного из-за накладных расходов на передачу данных
Ограничения
- Mac с Apple Silicon: быстрая unified RAM заманчива, но нет способа отключить swap — риск убить SSD частыми записями
- Стратегия требует ручной настройки regex для каждой модели
- Оптимальный баланс между скоростью промпта и генерации — предмет дальнейших экспериментов
Автор планирует применить метод к будущим квантам Kimi K3.
Ключевые выводы
- Unified memory + выборочная выгрузка экспертов позволяют запускать MoE-модели в 2-3 раза больше VRAM на одной системе
- На unified RAM (DGX) метод даёт 80x ускорение против CPU; на обычных GPU — компромисс между скоростью промпта и генерации
- Закрепление последних слоёв модели в VRAM критично для скорости генерации — разница в 3x
- PCIe 4.0 становится узким местом на потребительских GPU — multi-GPU пока проигрывает single-GPU
- Метод требует ручной настройки под архитектуру модели, но воспроизводим в llama.cpp
Автор: Марина Соколова · Источник: reddit.com
Это тот редкий случай, когда технический пост с Reddit реально двигает границы возможного. Автор нащупал sweet spot между производительностью и доступностью: огромные MoE-модели можно запускать на железе, которое есть у энтузиастов (пусть и не у всех — DGX Spark это всё-таки не игровой ПК). Ключевая идея — использовать VRAM как кэш-прослойку между диском и вычислениями, держа в памяти только то, что реально нужно прямо сейчас.
Но есть нюансы. Во-первых, это хак, требующий ручной настройки под каждую модель — не «установил и забыл». Во-вторых, на потребительских GPU (3090) выигрыш неоднозначный: генерация быстрее, но промпт медленнее из-за PCIe. В-третьих, для Mac с unified RAM метод опасен для SSD. Но сам факт, что 200GB модель хоть как-то работает локально — уже прорыв. Жду, когда кто-то упакует это в удобный скрипт.
Комментарии