инструменты 1 мин

Как выжать 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 модель хоть как-то работает локально — уже прорыв. Жду, когда кто-то упакует это в удобный скрипт.

Ещё по теме

Комментарии