Перейти к содержанию
Публикация AiManual

v100-skinny: как запустить Qwen3.6 27B на старых V100 с NVFP4 и получить до 366 токенов/с

Проект v100-skinny запускает Qwen3.6 27B с NVFP4-квантованием на устаревших V100 со скоростью до 366 токенов/с. Разбираем CUDA-ядра, бенчмарки на JSON и кодоген

Коротко

Что будет в материале

  1. 01

    Что такое v100-skinny и зачем он нужен

  2. 02

    Ключевые результаты: от синтетики до реальных задач

  3. 03

    Как это работает: CUDA-ядра и deep speculation на sm70

  4. 04

    Установка и запуск: пошаговое руководство

Что такое v100-skinny и зачем он нужен

Проект v100-skinny - это набор оптимизированных CUDA-ядер, позволяющий запускать модели Qwen3.6 27B с NVFP4-квантованием на видеокартах NVIDIA V100 архитектуры sm70. Разработчик dnv2003 выложил исходный код в открытый доступ на GitHub, и это решение напрямую решает проблему дорогой инфраструктуры для инференса LLM.

Главный практический результат: скорость до 366 токенов в секунду в синтетическом тесте с включённой экстракцией MTP (multi-token prediction). На реальных задачах цифры скромнее - около 240 токенов/с при структурированной генерации JSON и около 200 токенов/с для шаблонного кода при конфигурации k=7. Но даже эти показатели превращают V100 из устаревшего ускорителя в рабочий инструмент для продакшн-нагрузок.

Проект доказывает: жизненный цикл V100 можно продлить на годы, сэкономив десятки тысяч долларов на закупке A100 или H100. Вся кодовая база, инструкции по сборке и примеры конфигураций доступны в репозитории dnv2003/v100-skinny. Это не эксперимент ради бенчмарка - это готовая сборка для тех, кто хочет выжать максимум из имеющегося железа.

Ключевые результаты: от синтетики до реальных задач

Цифры производительности v100-skinny зависят от сценария использования. Разберём три контрольных точки, которые дают полную картину возможностей.

Синтетический тест: 366 токенов/с с MTP

Пиковая скорость 366 токенов/с достигается в синтетическом тесте с активной экстракцией MTP. Multi-token prediction - это техника, при которой модель генерирует не один токен за шаг, а сразу несколько спекулятивных токенов, которые затем проверяются основной моделью. Если спекулятивные токены верны, их принимают без дополнительных вычислений, что кратно ускоряет декодирование.

Синтетический тест создаёт идеальные условия: предсказуемые последовательности, минимальная вариативность. В реальных диалогах или кодогенерации такой сценарий недостижим - слишком высока энтропия вывода. Цифра 366 токенов/с показывает верхнюю планку архитектуры и подтверждает, что узким местом становится не вычислительная мощность GPU, а сложность самой задачи.

Структурированная генерация: ~240 токенов/с на JSON

При генерации JSON-структур скорость падает до 240 токенов/с. Структурированная генерация ограничивает пространство допустимых токенов - модель вынуждена соблюдать синтаксис, закрывать скобки, выдерживать типы данных. Это снижает эффективность MTP: спекулятивные токены чаще отбрасываются, так как должны соответствовать жёсткой грамматике.

240 токенов/с для JSON - отличный результат. Он покрывает сценарии автоматической генерации API-ответов, конфигурационных файлов, структурированных логов. Например, при обработке документов через модели уровня DeepSeek V4 Flash структурированный вывод критически важен для интеграции в пайплайны.

Шаблонный код: ~200 токенов/с при k=7

Генерация HTML и boilerplate-кода даёт около 200 токенов/с при параметре k=7. Параметр k определяет количество спекулятивных токенов, которые модель пытается предсказать за один проход. При k=7 система генерирует до 7 токенов одновременно, но в шаблонном коде предсказуемость ниже, чем в синтетике, поэтому часть токенов отбрасывается.

200 токенов/с для кодогенерации - это уровень, сопоставимый с работой моделей на более новых GPU. Если сравнить с результатами из статьи про максимальную производительность vLLM на 4x RTX 5060 Ti, где на новых картах Blackwell получают 70-80 токенов/с, v100-skinny на V100 оказывается в 2.5 раза быстрее в этом сценарии. Причина - глубокая оптимизация именно под архитектуру Volta и отсутствие накладных расходов универсальных фреймворков.

Как это работает: CUDA-ядра и deep speculation на sm70

Секрет производительности v100-skinny - в двух специализированных CUDA-ядрах, написанных вручную под ограничения архитектуры Volta. Разработчик не использовал высокоуровневые библиотеки, а реализовал вычисления на уровне, близком к ассемблеру GPU.

SIMT-ядро: эффективная работа с памятью

SIMT-ядро отвечает за операции копирования и достигает 69% от теоретического потолка пропускной способности памяти при M=1. Теоретический потолок - это максимум, который может выдать подсистема памяти V100 при идеальном паттерне доступа. Достичь 69% на реальной задаче - инженерный подвиг, так как обычно ядра общего назначения упираются в 30-40% из-за неоптимального coalescing-доступа.

Высокая эффективность копирования критична для NVFP4-квантования. Веса модели хранятся в 4-битном формате, и перед вычислениями их нужно распаковывать в FP16. SIMT-ядро делает это с минимальными потерями, не создавая бутылочного горлышка на пути данных из HBM2-памяти в тензорные ядра.

QPN-ядро: тензорные ядра Volta в деле

Архитектура Volta имеет только одну инструкцию для тензорных ядер - HMMA.884, которая выполняет умножение матриц 4x4. Для современных LLM с большими матрицами весов это серьёзное ограничение. QPN-ядро обходит его через разбиение по измерению N: большая матрица нарезается на блоки 4x4, вычисления ведутся блоками, результаты агрегируются.

Такой подход позволяет задействовать тензорные ядра V100 для W4A16-квантования - веса в 4 битах, активации в 16 битах. Без QPN-ядра пришлось бы использовать SIMT-вычисления для всей матрицы, что дало бы в 4-8 раз меньшую производительность. Deep speculation на sm70 - это комбинация SIMT-ядра для быстрой подкачки данных и QPN-ядра для быстрых матричных умножений, плюс спекулятивное декодирование MTP поверх этого стека.

Установка и запуск: пошаговое руководство

Для воспроизведения результатов потребуется кластер из четырёх Tesla V100, CUDA 11.x или новее и достаточный объём видеопамяти для размещения модели Qwen3.6 27B в NVFP4-формате. Одна V100 с 32 ГБ HBM2 вмещает модель с запасом, но для MTP и KV-кэша на длинных контекстах распределение по нескольким картам предпочтительнее.

Требования и подготовка окружения

Минимальная конфигурация: 4x Tesla V100 32 ГБ, CUDA 11.8, Python 3.10+, 128 ГБ системной RAM. Репозиторий клонируется стандартной командой:

git clone https://github.com/dnv2003/v100-skinny.git
cd v100-skinny
pip install -r requirements.txt

Зависимости включают torch с поддержкой CUDA, трансформеры и специфичные биндинги для кастомных ядер. Сборка ядер происходит при первом запуске и занимает 2-3 минуты на четырёх V100.

Конвертация модели в NVFP4

Базовая модель Qwen3.6 27B скачивается в FP16, затем конвертируется в NVFP4 скриптом из репозитория. Конвертация занимает около 15 минут и требует пикового объёма памяти ~60 ГБ - модель временно хранится в FP16 и NVFP4 одновременно. После конвертации FP16-версию можно удалить, освободив место.

NVFP4 - это блочное 4-битное квантование с плавающей точкой, оптимизированное под тензорные ядра NVIDIA. Потери качества по сравнению с FP16 минимальны на задачах генерации текста, но на сложных логических рассуждениях разница может быть заметна. Разработчик рекомендует тестировать на своих данных перед внедрением в продакшн.

Запуск сервера и первые тесты

Запуск сервера инференса выполняется одной командой с указанием пути к конвертированной модели и параметров MTP:

python server.py --model ./qwen3.6-27b-nvfp4 --mtp-k 7 --port 8080

Параметр --mtp-k 7 включает chain-MTP с 7 спекулятивными токенами. Это значение подобрано эмпирически: при k=8 накладные расходы на проверку начинают съедать выигрыш от спекуляции, при k=5 недобирается скорость. Первые тесты можно провести через curl запросом к API, совместимому с OpenAI-форматом:

curl -X POST http://localhost:8080/v1/completions \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Напиши функцию на Python для", "max_tokens": 100}'

Текущее ограничение: v100-skinny поддерживает только инференс. Обучение, файнтюнинг и LoRA-адаптеры не реализованы. Разработчик обозначил это как осознанное решение - проект сфокусирован на максимальной скорости декодирования.

Практическая ценность: кому и зачем это нужно

v100-skinny адресован компаниям и независимым разработчикам, у которых уже есть парк V100 или доступ к облачным инстансам с этими картами. Вместо списания оборудования или миграции на дорогие A100 можно получить производительность, достаточную для большинства инференс-нагрузок.

Экономика: V100 против новых GPU

Облачный инстанс с четырьмя V100 на AWS стоит около $3.06 в час по требованию. Инстанс с четырьмя A100 - $32.77 в час. Разница в 10 раз. При круглосуточной работе за месяц экономия составляет более $20 000 на одном кластере. Для стартапов и исследовательских групп с ограниченным бюджетом это решающий фактор.

Собственная сборка на базе подержанных V100 обходится ещё дешевле. Карты на вторичном рынке стоят $500-800 за штуку, материнская плата с четырьмя слотами PCIe 3.0 x16 - около $300. Полный узел из четырёх V100 собирается за $2500-3500 и обеспечивает скорость инференса, сопоставимую с одной RTX 5090 за $2000, но с суммарным объёмом видеопамяти 128 ГБ против 32 ГБ. Сравнение с подходом из статьи про сборку на 4x RTX 3080 20 ГБ показывает, что V100 с v100-skinny выигрывает по чистой скорости декодирования, хотя уступает в универсальности.

Ограничения и когда v100-skinny не подходит

NVFP4-квантование вносит погрешность в вычисления. На задачах, требующих высокой точности - формальная верификация кода, математические доказательства, длинные цепочки логических рассуждений - потери качества могут быть критичными. Перед внедрением обязательно тестирование на собственных бенчмарках.

Второе ограничение - привязка к конкретной модели. v100-skinny оптимизирован под Qwen3.6 27B и её архитектуру. Для других моделей потребуется адаптация ядер, что требует компетенций в CUDA-программировании. Разработчик не обещает универсальной поддержки, хотя сообщество уже экспериментирует с портированием на другие 27B-модели семейства Qwen.

Третье - отсутствие поддержки обучения. Если задача требует регулярного файнтюнинга на новых данных, v100-skinny не заменит полноценный тренировочный кластер. Это решение исключительно для инференса, и в этом качестве оно показывает наилучшие результаты.

Будущее проекта и альтернативы

На момент публикации v100-skinny находится в активной разработке. В репозитории открыты issues с запросами на поддержку других моделей семейства Qwen3.6 и архитектуры sm80 (A100). Разработчик подтвердил, что рассматривает портирование, но приоритет - стабилизация текущего кода и документации.

Альтернативные подходы к инференсу на старых GPU включают vLLM с бэкендом FP8 и llama.cpp с Q4_K_M-квантованием. Оба варианта проигрывают v100-skinny в скорости на V100 в 2-3 раза из-за отсутствия специфичных оптимизаций под Volta. Однако они выигрывают в универсальности: vLLM поддерживает десятки моделей, llama.cpp работает даже на CPU, что демонстрирует проект Project Zero с CPU-инференсом.

Для тех, кто ищет максимальную производительность на новом железе, актуальны эксперименты с NVFP4 на RTX 5060 Ti, описанные в разборе конфигурации vLLM с NVFP4 KV-Cache на двух RTX 5060 Ti. Стек v100-skinny занимает отдельную нишу: старые серверные GPU, специфичная модель, предельная скорость. И в этой нише он показывает результаты, которые ещё год назад казались недостижимыми для архитектуры Volta.

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