Игорь Градов
Игорь Градов
6 мин
ai

Полтора месяца ускорял MoE на GTX 1660 SUPER: штатный флаг llama.cpp выиграл в 2,44 раза

Компания gpt‑oss выпустила модель, которую энтузиаст полтора месяца разгонял на домашнем стенде с GTX 1660 SUPER и 6 ГБ видеопамяти, и главный результат оказался неожиданным: штатный флаг -fit в llama.cpp обогнал все ручные оптимизации в 2,44 раза.

Полтора месяца ускорял MoE на GTX 1660 SUPER: штатный флаг llama.cpp выиграл в 2,44 раза
Почему это важно

Большинство инструкций к llama.cpp советуют -ngl 99, то есть отправлять все слои на видеокарту. На машине, где видеопамяти меньше, чем весит модель, этот совет не просто бесполезен, а вдвое замедляет генерацию. Штатный флаг -fit, который включён по умолчанию, сам раскладывает тензоры по памяти, но любая ручная настройка -ngl его выключает. Знание этого механизма экономит часы экспериментов.

Историю опубликовал пользователь Habr, тепломеханик по профессии, не программист. С августа он ведёт форк llama.cpp и тестирует MoE-модели (Mixture of Experts, архитектура, где на каждый токен работает лишь часть «экспертов»-подсетей, а не вся модель целиком). Стенд нарочито скромный: Ryzen 5 1600, 24 ГБ DDR4, GTX 1660 SUPER с 6 ГБ видеопамяти, SATA SSD, Windows 10. Код пишут ИИ-агенты (программы, которые сами выполняют цепочки действий по заданию), автор ставит задачи и проверяет цифры.

Что понадобится

  • Железо: видеокарта с 6 ГБ и больше, от 24 ГБ оперативной памяти, SSD (даже SATA подойдёт).
  • Софт: актуальная сборка llama.cpp (llama-server или llama-cli), где флаг -fit уже встроен.
  • Модель: любая MoE-модель в формате GGUF. Автор использовал gpt-oss-20b в квантизации MXFP4 (файл 11,3 ГиБ).
  • Время: базовая настройка занимает минуты, но подбор убатча (ubatch, размер порции токенов при обработке запроса) под конкретную машину потребует нескольких тестовых прогонов.

Пошаговая инструкция

  1. Удалите -ngl 99 из команды запуска. Если модель не влезает в видеопамять целиком, этот флаг заставляет драйвер Windows молча перебрасывать лишнее в общую память. Скорость падает и начинает гулять от прогона к прогону. По замерам автора, -ngl 99 запрашивает у карты 10 949 МиБ при доступных 6 143 МиБ, переподписка в 1,8 раза. Чтение с диска за прогон удваивается.

  2. Запустите llama-server или llama-cli без -ngl, -ot и -ncmoe. Флаг -fit включён по умолчанию и сам подбирает раскладку: внимание и столько экспертов, сколько реально помещается, оставляет на карте, остальных экспертов кладёт в оперативную память. С ростом контекста KV-кэш (кэш ключей и значений, рабочая память модели для текущего диалога) занимает видеопамять, и -fit автоматически перемещает экспертов в ОЗУ.

# минимальный запуск, -fit работает сам
llama-server -m gpt-oss-20b.gguf
  1. Подберите убатч (-ub) под свою длину запроса. По умолчанию он 512. На стенде автора 1024 дал ускорение в 1,28 раза при чтении запроса на 16 000 токенов. Но кривая немонотонная: на 4096 чтение с диска подскочило впятеро из-за нехватки кэша страниц, а 2048 давал нестабильные результаты.
# пример с убатчем 1024
llama-server -m gpt-oss-20b.gguf -ub 1024
  1. Выставьте KV-кэш в q8_0. По замерам автора, квантизация KV-кэша (сжатие рабочей памяти модели) до q8_0 почти не стоит качества. Формат q4_0 экономит больше памяти, но обходится примерно в десятую часть перплексии (метрика «уверенности» модели в ответе, чем ниже, тем лучше), и каждый седьмой наиболее вероятный токен меняется на другой. Автор подчёркивает: эти числа зависят от конкретной модели, переносить их вслепую нельзя, он сам попался на этом, перенеся замер с OLMoE на gpt-oss.

  2. Проверяйте замеры на реальной длине запроса. Короткие бенчмарки llama-bench дают искажённую картину. На коротком замере подталкивание маршрутизатора MoE к «горячим» экспертам давало до полуторакратного ускорения, а на длинном запросе (16 000 токенов) эффект исчез: чтение длинного запроса само прогревает кэш почти всеми экспертами.

Что ввели и что получили

Автор сравнил три раскладки на запросе 16 000 токенов (ответ 256 токенов), когда в быстрой памяти помещалось 46% модели.

  • -ngl 99: скорость генерации от 3,3 до 5,2 токена в секунду, чтение с диска около 25 ГиБ за прогон.
  • -fit (без ручных флагов): стабильная скорость, чтение с диска вдвое меньше.
  • Соотношение: -fit оказался в 2,44 раза быстрее -ngl 99 на длинном запросе.

Когда модель целиком помещалась в ОЗУ (без диска), картина подтвердилась: -ngl 99 дал 4,54 токена в секунду, почти как голый процессор (4,67), а раскладка с экспертами 14 слоёв в ОЗУ выдала 10,00 токенов в секунду.

Частые ошибки

Ставить -ngl 99 «на всякий случай». Любое ручное указание -ngl, -ot или -ncmoe выключает автоподбор -fit. В коде llama.cpp это явный выброс исключения: если пользователь задал n_gpu_layers, оптимизатор останавливается. Одна строчка в лог, и всё.

Переносить замеры между моделями. Автор месяц считал, что q4_0 KV-кэш стоит 1,5% перплексии, потому что снял число на OLMoE. На gpt-oss потери оказались в разы выше.

Доверять коротким бенчмаркам. На коротком запросе разница между раскладками может составлять полтора раза, на длинном она исчезает или переворачивается. Мерить надо на той длине, с которой вы реально работаете.

Выкручивать убатч на максимум. Зависимость скорости от убатча немонотонная. На стенде автора 2048 балансировал на грани: один прогон 146 секунд, следующий 77. На 4096 чтение с диска подскакивало впятеро. Подбирайте на своей машине, начиная с 1024.

Что не сработало?

Спекулятивное декодирование (приём, когда черновая модель заранее «угадывает» продолжение, а основная только подтверждает или отвергает): у gpt-oss нет собственной MTP-головы (Multi-Token Prediction), поэтому черновик брался из n-грамм контекста, а отдельная черновая модель заняла бы ту самую память, которой и так не хватает.

Подталкивание маршрутизатора MoE к «горячим» экспертам: идея красивая, стоит около 1% перплексии, но на длинном запросе эффект обнулился. Кэш и так прогревается естественным образом.

Что делать с этим прямо сейчас?

Автору Дзена, который использует локальные модели для генерации черновиков или рерайта: проверьте свои скрипты запуска. Если там стоит -ngl 99, а модель не влезает в видеопамять целиком, вы теряете скорость вдвое. Уберите флаг и дайте -fit работать самому.

Маркетологу и копирайтеру, который думает про локальный инференс (запуск модели на своём компьютере, без облака): GTX 1660 SUPER за 15-20 тысяч рублей на вторичке плюс 24 ГБ ОЗУ позволяет гонять 20-миллиардные MoE-модели без подписки на API. Для рутинных задач по тексту этого достаточно.

Предпринимателю в РФ: история показывает, что для экспериментов с открытыми моделями (open-source, модели с доступным кодом и весами) не нужны серверные карты. Из доступных в России инструментов: YandexGPT и GigaChat работают через API, но если нужна автономность и конфиденциальность данных, локальный llama.cpp на бюджетном железе закрывает эту задачу.

Мнение редакции dzen.guru

Эта история ценна не ускорением как таковым, а демонстрацией того, как один неверный совет из инструкции (ставьте -ngl 99) тиражируется по форумам и чатам и стоит пользователям реальной производительности. Полтора месяца ускорял MoE на GTX 1660 SUPER, а главный вывод уместился в одну строку: не трогай то, что уже работает правильно.

Честная оговорка: автор тестировал на конкретной модели gpt-oss-20b, конкретном железе и Windows. На Linux поведение -ngl 99 может отличаться (по словам автора, модель, скорее всего, просто не загрузится). Ваши числа будут другими, но принцип «не перебивать -fit ручными флагами» универсален для llama.cpp.

Самый практичный вывод из полутора месяцев экспериментов: если у вас карта на 6 ГБ и MoE-модель, которая в неё не влезает, запустите llama-server без единого флага раскладки, подберите убатч от 1024, поставьте KV-кэш в q8_0 и замерьте на реальной длине запроса. Скорее всего, вы уже получите лучший результат, который можно выжать из этого железа.

Попробуйте промпт-шаблоны dzen.guru для работы с локальными моделями

Готовые системные промпты для авторов Дзена, адаптированные под небольшие локальные модели.

Посмотреть шаблоны
Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

YOLO Annotator: данная разметка обозначает 12 форматов экспорта без сервера и Docker
ai

YOLO Annotator: данная разметка обозначает 12 форматов экспорта без сервера и Docker

Почему это важно Появился бесплатный десктопный разметчик с открытым кодом, который закрывает разрыв между простыми инструментами для прямоугольников и…

5 мин
Заменит ли ИИ аналитиков данных: Сбер собрал конвейер из бесплатных инструментов за полчаса
ai

Заменит ли ИИ аналитиков данных: Сбер собрал конвейер из бесплатных инструментов за полчаса

Компания СберУниверситет (подразделение Сбера, занимающееся образованием и развитием компетенций) описала рабочий конвейер, который позволяет аналитикам…

5 мин
Централизуем использование ИИ с помощью Agentgateway: один шлюз вместо десятка конфигов
ai

Централизуем использование ИИ с помощью Agentgateway: один шлюз вместо десятка конфигов

Agentgateway собирает все обращения к языковым моделям и MCP-серверам (серверам, через которые ИИ-агенты получают доступ к внешним инструментам) в одну точку,…

5 мин