Ninfer 4080 - инференс-движок под GPU класса 16 ГБ, который запускает ISTA-DASLab-Qwen-3.8-27B-GSQ с контекстом до 100 000 токенов. Автор проекта, разработчик под ником roofkid, опубликовал код и Docker-образ, а вместе с ними замеры: до 2720 ток/с на prefill и до 262 ток/с на генерации. Движок заточен под RTX 4080 и опирается на спекулятивное декодирование DFlash2 плюс агрессивную квантизацию KV-кэша.
Ответ на главный вопрос звучит так: 27B-модель с длинным контекстом действительно умещается в 16 ГБ видеопамяти, но держится это не на одном трюке, а на связке из трёх решений. Квантованная модель занимает основную часть VRAM, режим KV-квантизации rk4v4-e8 сжимает кэш длинного контекста, а DFlash2 ускоряет генерацию. Плата за такую плотность - небольшое снижение точности, которое автор оценивает как попадающее в погрешность измерений.
Ниже - разбор замеров по глубине контекста, объяснение компромисса между длиной окна и качеством, пошаговый запуск через Docker и список ограничений, о которых автор предупреждает прямо.
Что такое Ninfer 4080 и зачем он нужен
Ninfer 4080 - форк движков Ninfer, которые до него выходили для RTX 3090, 4090 и 5090. Новая ветка собрана под карты с 16 ГБ VRAM и решает узкую задачу: держать ISTA-DASLab-Qwen-3.8-27B-GSQ с окном 100K+ токенов на одной RTX 4080. Автор формулирует цель без обиняков - заметно поднять скорость prefill и генерации токенов, чтобы железо использовалось плотнее, чем в универсальных движках вроде llama.cpp или vllm (сообщение автора о релизе).
Речь о двух разных этапах работы модели. Prefill - это обработка промпта: движок проходит по всем входным токенам и заполняет KV-кэш, и именно от него зависит, сколько вы ждёте перед первым словом ответа на длинный файл. Decode - сама генерация, где счёт идёт уже на десятки и сотни токенов в секунду. На оба этапа и направлены оптимизации Ninfer 4080.
По словам roofkid, проект вырос как pet project, то есть персональная разработка под собственную ежедневную работу, а не коммерческий продукт. Отсюда и особенности: поддержка одной модели, одной архитектуры GPU и приглашение к сообществу проверить остальные конфигурации. Замеры при этом сделаны всерьёз, с таблицей по глубине контекста и прогоном бенчмарков.
Ключевые особенности Ninfer 4080
- Спекулятивное декодирование DFlash2. Черновая модель предлагает несколько токенов вперёд, основная их проверяет. Автор приводит замеры в режиме DFlash2 K=7, то есть с семью предполагаемыми токенами на шаг.
- Агрессивная квантизация KV-кэша, вариант rk4v4-e8. Сжатие ключей и значений кэша до низкой разрядности и есть то, что позволяет уложить 100K контекста в 16 ГБ. Полную схему разрядности автор в сообщении не публикует.
- Целевое окно 100K+ токенов. Это верхняя граница, ради которой всё и делалось.
- Runtime в виде Docker-образа. Автор отдельно отмечает, что образ упрощает запуск: не нужно собирать окружение вручную.
- Ставка на потребительские GPU 16 ГБ. Проект не про серверные ускорители и не про две карты с NVLink.
Для кого этот движок: целевая аудитория и сценарии
Сценарий здесь один и довольно конкретный: локальная работа с кодом и текстами на Qwen 3.8 27B, когда в промпт нужно вложить большой объём исходников, документации или заметок. Автор описывает свою реальную нагрузку так: prefill выше 2000 ток/с на длинных промптах, декодирование в районе 150-200 ток/с на коде и около 100 ток/с на прозе. Прозу модель обрабатывает медленнее, и это стоит учитывать при выборе инструмента.
Ориентирован движок на владельцев RTX 4080 и, шире, карт RTX 4xxx с 16 ГБ. Насколько сильно цифры зависят от класса GPU, видно на примере теста Ninfer на RTX 5090: та ветка разгоняется до 550-720 токенов в секунду на однопоточном режиме, но речь там про другую модель и другую карту. Прямо переносить те цифры на 16 ГБ нельзя.
Требования к оборудованию и совместимость
Жёсткое условие одно: видеокарта с 16 ГБ VRAM. Всё остальное - следствие того, что вес модели и KV-кэш должны оставаться в видеопамяти. Если часть данных начнёт уезжать в системную RAM, преимущество по скорости исчезнет, а сам смысл сборки под 16 ГБ пропадёт.
Минимальные и рекомендуемые характеристики
Проверенная конфигурация по сообщению автора - RTX 4080 16 ГБ и запуск runtime через Docker. Объём системной памяти, модель процессора, требования к диску и версии драйверов в исходном сообщении не приводятся, поэтому опираться на них не стоит: эти параметры нужно смотреть в репозитории. Практический ориентир простой - для запуска любого GPU-контейнера нужны рабочие драйверы NVIDIA и nvidia-container-toolkit, а на Windows - WSL2, поскольку Docker с пробросом видеокарты работает через него. Запас свободного места на диске понадобится под сам образ и под скачанные веса модели.
Держите в голове арифметику: 16 ГБ делятся между весами модели и KV-кэшем. Модель ISTA-DASLab-Qwen-3.8-27B-GSQ квантована, но всё равно занимает основную часть бюджета памяти, поэтому на кэш остаётся немного. Именно из-за этого для 100K контекста и применяется агрессивный режим квантизации, а не что-то более щадящее.
Совместимость с другими GPU RTX 4xxx
Автор прямо приглашает владельцев других 16 ГБ карт RTX 4xxx проверить движок и поделиться результатами. Под это описание попадают, например, RTX 4060 Ti 16 ГБ и RTX 4070 Ti Super 16 ГБ. Гарантий здесь нет: проверенной площадкой заявлена RTX 4080, остальное - эксперимент, в котором вам и предлагают поучаствовать. Архитектурно шансы есть, поскольку ветка выросла из Ninfer для 3090, 4090 и 5090. Карты с меньшим объёмом VRAM отпадают сразу, движок под них не рассчитан.
Производительность: замеры prefill и генерации
Все цифры ниже взяты из сообщения автора и получены на RTX 4080. В таблице три показателя для каждой глубины контекста: prefill, декодирование через MTP3 и декодирование через DFlash2 с K=7 (замеры roofkid).
| Глубина контекста | Prefill, ток/с | MTP3 decode, ток/с | DFlash2 K=7 decode, ток/с |
|---|---|---|---|
| 8K | 2719,9 | 151,2 | 166,7 |
| 32K | 2424,9 | 141,7 | 262,3 |
| 64K | 2125,5 | 130,7 | 239,1 |
| 98K | 1895,1 | 122,3 | 212,7 |
Скорость prefill в зависимости от глубины контекста
Prefill падает мягко. На 8K движок выдаёт 2719,9 ток/с, на 32K - 2424,9, на 64K - 2125,5, а на 98K держится на 1895,1 ток/с. Потеря от 8K к 98K составляет около 30%, при том что объём обрабатываемого промпта вырос более чем в десять раз. Для практики это значит, что промпт на 90-100 тысяч токенов обрабатывается за секунды, а не за минуты, и длинный контекст становится пригодным для повседневной работы, а не для разового эксперимента.
Максимум по всем замерам - 2720 ток/с prefill, что совпадает с верхней точкой таблицы. Автор отмечает, что такие скорости он видит и в реальной работе, если промпт достаточно длинный: короткие запросы физически не успевают показать высокий prefill.
Скорость генерации: DFlash2 против MTP3
Разница между двумя методами декодирования здесь заметнее, чем разница между глубинами контекста. На 8K DFlash2 даёт 166,7 ток/с против 151,2 у MTP3. На 32K разрыв расширяется: 262,3 против 141,7, то есть почти вдвое. На 64K - 239,1 против 130,7, на 98K - 212,7 против 122,3.
Практический вывод: DFlash2 выигрывает на всех замерах, а на средних контекстах выигрывает с большим отрывом. Обратите внимание на поведение самого DFlash2: пик приходится не на минимальный контекст, а на 32K, откуда значение плавно снижается. Максимум генерации в замерах - 262 ток/с. Для сравнения, на прозе автор видит около 100 ток/с, то есть скорость сильно зависит от типа задачи, и код здесь заметно быстрее текста.
Точность модели: результаты MBPP и HumanEval
Автор прогнал два бенчмарка на код: MBPP держится в диапазоне 90-92%, HumanEval - 95-96%. Выбор объясняется просто: эти тесты можно отработать примерно за 30 минут, поэтому их удобно использовать как быстрый индикатор деградации при смене режима квантизации.
Как KV-квантизация влияет на точность
KV-кэш хранит ключи и значения для всех токенов, которые модель уже видела. Объём этого кэша растёт линейно с длиной контекста, поэтому на 100K токенов он занимает куда больше памяти, чем на привычных 8K. В fp16 такой кэш просто не влезет в бюджет, оставшийся после весов модели. Режим rk4v4-e8 сжимает ключи и значения до низкой разрядности, и именно он делает 100K на 16 ГБ возможным.
Цена сжатия, по замерам автора, невелика: небольшие ухудшения лежат в пределах погрешности измерений. Он отдельно уточняет, что они связаны в основном с квантизацией KV-кэша, а не с чем-то ещё. Компромисс управляемый: если задача чувствительна к точности, можно переключиться на менее агрессивный режим и получить более качественный вывод, но за счёт сокращения доступного контекста.
Здесь стоит быть честным до конца: MBPP и HumanEval проверяют генерацию кода на относительно коротких задачах. Они не измеряют, насколько хорошо модель находит нужный фрагмент в 90 тысячах токенов промпта. Если ваш сценарий - извлечение факта из большого файла, эти бенчмарки ничего о нём не скажут, и проверять такое поведение придётся своими задачами. О том, как вообще устроена проверка качества при квантизации длинного контекста, подробнее написано в разборе форка beellama и квантизации KV.
Сравнение с другими движками по точности
Прямых замеров точности против llama.cpp или vllm автор не приводит, поэтому утверждать, что Ninfer 4080 точнее конкурентов, нет оснований. Единственная точка сравнения - beellama, предыдущий ежедневный инструмент автора: он говорит, что результаты бенчмарков остаются теми же. То есть на заявленных режимах движок не уступает тому, чем roofkid пользовался раньше, но это сравнение одного человека на одной машине и без независимой проверки.
Как запустить Ninfer 4080: пошаговая инструкция
Код и Docker-образ опубликованы на GitHub, и это основной путь установки. Автор сам подчёркивает, что образ нужен именно для простоты запуска: собирать окружение с CUDA вручную не требуется.
Подготовка окружения
Проверьте три вещи. Первое - видеокарта NVIDIA с 16 ГБ и актуальные драйверы. Второе - установленный Docker. Третье - nvidia-container-toolkit, без него контейнер не увидит GPU. На Windows работайте через WSL2: Docker с пробросом видеокарты там работает именно так. Заранее освободите место на диске под образ и под веса модели.
Запуск через Docker
Типовая команда для GPU-контейнера выглядит так:
docker run --gpus all -p 8000:8000 -v /path/to/models:/models ninfer4080:latest
Здесь --gpus all отдаёт контейнеру видеокарту, -p 8000:8000 публикует порт, а -v монтирует каталог с моделями. Это иллюстрация общего принципа, а не гарантированно рабочая строка: точное имя образа, порт и пути монтирования смотрите в README репозитория, поскольку автор их в анонсе не приводит. После старта контейнера движок доступен как API на опубликованном порту, и обращаться к нему можно любым клиентом, который умеет работать с OpenAI-совместимым интерфейсом.
Настройка параметров контекста и квантизации
Главная ручка здесь - режим квантизации KV-кэша. rk4v4-e8 даёт максимум по контексту, то есть те самые 100K на 16 ГБ. Если точность важнее длины окна, переключитесь на менее агрессивный вариант: автор подтверждает, что режимы переключаются и что таким образом можно обменять контекст на точность. Конкретные имена переменных окружения или полей конфига в исходном сообщении не раскрыты, поэтому за ними идите в документацию репозитория. То же касается параметров спекулятивного декодирования: в замерах фигурирует DFlash2 с K=7, но как именно выставляется это значение, автор не описывает.
Сравнение с альтернативами: llama.cpp, vllm, beellama
Чем Ninfer 4080 отличается от llama.cpp и vllm
llama.cpp и vllm - универсальные движки. Они поддерживают десятки архитектур, работают с батчами, умеют разное железо и в целом решают задачу «запустить почти любую модель почти на любой карте». Универсальность требует обобщений, а обобщения стоят производительности. Автор Ninfer 4080 формулирует это резко: по его мнению, универсальные движки оставляют на столе огромную часть доступной производительности.
Ninfer 4080 идёт обратным путём. Одна модель, одна архитектура GPU, свои ядра под prefill, своё спекулятивное декодирование и своя схема квантизации кэша. Отсюда и скорости, и цена: гибкости почти нет. Если вам нужно менять модели по ходу работы или обслуживать несколько пользователей сразу, узкоспециализированный движок проиграет по удобству. Где проходит граница между специализацией и универсальностью на практике, разбирается в отдельном сравнении ninfer и vLLM для Qwen 3.8 27B.
Стоит ли переходить с beellama
Единственная оценка скорости относительно beellama - субъективная, и автор это не скрывает: по его ощущениям движок заметно быстрее при тех же результатах бенчмарков. Объективных чисел сравнения он не публикует, поэтому решение стоит принимать по своим задачам. Если вы кодите на Qwen 3.8 27B на RTX 4080 и упираетесь в скорость на длинных промптах, попробовать имеет смысл. Если вы работаете с другими моделями или вам важен широкий выбор форматов и архитектур, beellama или vllm остаются более гибким выбором.
Ограничения и риски
Проект узкий по определению, и это главный источник ограничений. Ниже - то, о чём автор предупреждает сам, и то, что следует из описания.
Потенциальное снижение точности
Сжатие KV-кэша не проходит бесследно. Автор просит быть реалистами и ожидать небольших ухудшений в пределах погрешности измерений, связанных в основном с квантизацией кэша. Для кода на MBPP и HumanEval это в замерах не проявилось, но другие типы задач он не проверял. Если результат критичен, тестируйте на своих данных и сравнивайте с менее агрессивным режимом квантизации. Запас прочности здесь есть: контекст можно сократить ради точности (предупреждение автора).
Ограниченная совместимость
Проверена одна конфигурация - RTX 4080 16 ГБ. Другие 16 ГБ карты RTX 4xxx могут заработать, но автор об этом не заявляет, а просит проверить и рассказать. Это принципиальная разница между «работает» и «возможно, заработает». Карты с меньшим объёмом VRAM не подходят вообще. Добавьте сюда зависимость от Docker, одну поддерживаемую модель и отсутствие независимых воспроизведений замеров: все цифры в этой статье - результаты автора проекта, а не редакции. Проект развивается как pet project, без обязательств по поддержке и стабильности API между версиями.
Итог: кому стоит попробовать Ninfer 4080
Ninfer 4080 закрывает конкретную нишу: быстрый инференс Qwen 3.8 27B с контекстом до 100K на карте с 16 ГБ. Если у вас RTX 4080, вы работаете на этой модели и вам мешает скорость на длинных промптах, стартовать стоит с Docker-образа - это самый короткий путь без ручной сборки CUDA-окружения. Первым делом прогоните на своих задачах режим rk4v4-e8: если качество ответов вас устроит, вы получите полное окно, если нет, переключитесь на менее агрессивную квантизацию и решите, чем готовы пожертвовать.
Если карта не RTX 4080, но тоже имеет 16 ГБ, попробуйте и напишите автору о результате: он прямо просит об этом, а сообщество только выиграет от расширения списка совместимых GPU. Если у вас другая модель, другое железо или нужна мультимодельная работа, этот движок вам не подойдёт - смотрите в сторону универсальных решений. Что касается самих цифр, они опубликованы одним разработчиком и пока не воспроизведены независимо, так что проверяйте на своей нагрузке, а не по таблице.