AIREITER

Производительность vLLM Humming: где ускорение действительно работает

Последнее обновление: 2026-10-21 19:02:34

vLLM Humming выглядит сильным кандидатом для высококонкурентного запуска квантованных MoE-моделей на ускорителях класса Hopper. Но публичные бенчмарки не позволяют считать его универсальной заменой бэкенда. Тесты на H100 с group-32 и декодирование batch-1 на Ampere хорошо показывают, почему проверять нужно именно свою связку модели, GPU, формата и размера батча.

Коротко: Humming ускоряет не всё подряд

Humming — библиотека JIT-компилируемых GEMM-ядер для квантованного инференса, выпущенная сообществом vLLM совместно с Ant Group. Она рассчитана на плотные и mixture-of-experts (MoE) нагрузки, поддерживает несколько форматов квантования и поколения GPU NVIDIA. В официальном анонсе заявлено ускорение отдельных ядер до 5 раз и прирост сквозной производительности MoE на 14%–43%. Однако эти цифры относятся к конкретным сочетаниям модели, оборудования, формата и уровня параллелизма (анонс vLLM).

Моё практическое правило внедрения выглядит так:

  • Сначала тестируйте Humming на MoE-сервинге W4A8/W4A16 с большими батчами или высокой конкуренцией, если используются поддерживаемые конфигурации Hopper или более новых поколений.
  • Не рассчитывайте на ускорение заранее при декодировании batch-1, на старых GPU Ampere и при необычном group-wise масштабировании.
  • Оставляйте запасной вариант: в текущих issue встречаются ошибки маршрутизации по размерам и медленные пути, зависящие от бэкенда.

В одном независимом отчёте по DeepSeek-V4.1-Flash удалось получить 5 856 выходных токенов/с на настроенном базовом vLLM, 12 802 токена/с с data-parallel attention и 17 634 токена/с с модифицированными ядрами Humming W4A8 на одном узле с четырьмя GH200 (инженерный отчёт). Для этого потребовались исправление ядра и дополнительная настройка, поэтому результат говорит о перспективах конкретного класса нагрузок, а не обещает такой показатель сразу после установки.

Что Humming меняет в развёртывании vLLM

Humming переносит умножение квантованных матриц на гибкий слой JIT-ядер, который обслуживает GEMM-пути для плотных и MoE-моделей. Проект рассчитан на архитектуры NVIDIA начиная с Turing и поддерживает несколько низкобитных форматов (репозиторий Humming).

В упомянутом тесте на Hopper Marlin сначала деквантизировал веса FP4 в BF16, тогда как Humming преобразовывал веса FP4 в FP8 непосредственно внутри SM и использовал умножение на FP8 tensor core. Это преимущество проявилось только после того, как декодирование стало ограничиваться вычислениями. В других сценариях узким местом могут оказаться трафик памяти, раскладка тайлов, обработка scale-факторов, накладные расходы на запуск и давление на регистры.

Где ускорение заметно, а где исчезает

Публичные результаты лучше воспринимать не как одну рекламную цифру, а как карту границ производительности.

MoE с высокой конкуренцией: самый убедительный сценарий

В официальном примере для DeepSeek-V4.1-Flash сравниваются Marlin W4A16 и Humming W4A8 на восьми GPU H20. Сквозная производительность MoE выросла на 14%–43%, причём больший прирост наблюдался при более высокой конкуренции. Пользователь, опубликовавший этот бенчмарк, привёл конкретное сравнение: 442 против 634 выходных токенов/с при concurrency 64, отдельно отметив, что изменился и формат квантования (обсуждение пользователя).

Это хороший аргумент в пользу Humming как перспективного пути для сервинга, но не доказательство того, что одно и то же ядро автоматически даст такой же прирост при неизменном формате.

H100, W4A8 и group-32: важное предупреждение

В issue #38 для Humming тестировались веса MXFP4, активации MXFP8 и scale-факторы group-32 на H100. Все сравниваемые варианты выдавали корректный результат, но fused-путь на указанных размерах оказался значительно медленнее. Для (4096,3072,4096) fused Humming потребовал 4.969 мс против 0.580 мс у базового QDQ-пути; для (4096,14336,4096) — 22.298 мс против 1.256 мс (issue #38).

Позже в issue зафиксировали локальную настройку выше 500 TFLOPS, а экспериментальная реализация достигла примерно 580–665 TFLOPS благодаря дополнительной предобработке и изменённому хранению весов. Гранулярность scale-факторов, выбор тайлов, давление на регистры и предобработка способны полностью изменить итоговый результат.

SM80 и декодирование одного запроса: не переносите выводы на Ampere

В issue #72 сообщается о слабой загрузке INT3 на NVIDIA SM80 при декодировании с M=1. На CMP 170HX измеренное ядро Humming показало около 691 ГБ/с при примерно 1 591 ГБ/с пиковой пропускной способности HBM — то есть 43.4% утилизации. Для сравнения, на RTX 5070 Ti SM120 получили около 753 ГБ/с при пиковых 827 ГБ/с, или примерно 91% (issue #72).

В том же отчёте приведены результаты репозитория для A800: 692.4 ГБ/с при M=1, что составляет лишь 34.0% от заявленного пика в 2 039.04 ГБ/с. В аналогичном сравнении обычный BF16 достиг 1 232.3 ГБ/с.

«Может ли текущий путь Humming для INT3 на SM80 быть неоптимальным для этой нагрузки?» — yangfangyunyun, issue #72 в vLLM Humming

Установка и безопасный первый тест

В официальных материалах указано, что начиная с vLLM 0.29.0 установки для CUDA включают Humming как зависимость. Для MoE-пути используйте --moe-backend humming, для поддерживаемых линейных слоёв — --linear-backend humming, либо документированную конфигурацию квантования Humming для конкретной модели (документация vLLM по квантованию). Прежде чем переносить флаг между архитектурами, проверьте документацию к релизу и модели.

Начните с контролируемого теста:

  1. Зафиксируйте версии vLLM, CUDA и PyTorch, архитектуру GPU, квантование чекпойнта и размеры модели.
  2. Сделайте одинаковыми длину промпта, длину вывода, уровень конкуренции и число повторов.
  3. Сравните текущий бэкенд с Humming, используя одну и ту же команду запуска и добавляя соответствующий флаг бэкенда.
  4. Измерьте токены/с на выходе, TTFT, задержку между токенами, объём памяти GPU и время запуска/JIT-прогрева.
  5. Повторите тест после прогрева кэша ядер, а затем отдельно проверьте batch 1 и производственную конкуренцию.
  6. Предусмотрите автоматический или ручной откат для неподдерживаемых размеров и случаев, когда бэкенд не выбирается.

Одного прироста пропускной способности недостаточно, если ухудшились TTFT, хвостовая задержка, стоимость прогрева или потребление памяти. Проект perf-eval для vLLM рекомендует YAML-рецепты, повторные запуски, агрегацию по медиане и фиксированные длины входа и выхода, чтобы результаты можно было корректно сравнивать (репозиторий perf-eval).

Маршрутизация бэкендов может заблокировать рабочую конфигурацию Humming

Отдельная issue в vLLM хорошо показывает, зачем нужны тесты с откатом. В issue #60700 у MoE-чекпойнта compressed-tensors W4A8 промежуточный размер равнялся 640. CUTLASS требовал размеров, кратных 256, тогда как Humming мог обработать проверяемую форму. Но безусловная проверка запускалась ещё до загрузки выбранного бэкенда, поэтому явный флаг --moe-backend humming тоже приводил к ошибке.

В патче автора issue проверка была ограничена CUTLASS. После этого все 62 шарда загрузились на двух GPU H100 NVL, а тест показал на 12%–50% меньший TTFT и на 2%–13% более высокую системную пропускную способность по сравнению с исходной конфигурацией CUTLASS (issue #60700). На момент проверки issue оставалась открытой, а PR #60711 предлагал исправление маршрутизации.

Поэтому неудачный запуск Humming может быть связан не с проблемой ядра, а с проверкой возможностей внутри vLLM. Перед тем как отбрасывать конфигурацию, проверьте выбранный бэкенд, ограничения по размерам и статус исправления.

Таблица решений для операторов

Ваша нагрузкаРешение по HummingПочему
MoE с высокой конкуренцией на Hopper/GH200Тестируйте в числе первыхВ независимом отчёте после исправлений и настройки получили 17 634 токена/с.
Декодирование в стиле DeepSeek с большими батчамиСильный кандидатВыполнение на FP8 tensor core может помочь, когда MoE GEMM упирается в вычисления.
Декодирование batch-1 или небольших батчей на SM80Не рассчитывайте на ускорение заранееВ issue #72 для проверенных INT3-путей сообщается об эффективной пропускной способности 34%–43%.
Масштабирование активаций group-32 на H100Проведите узкий бенчмарк по набору размеровIssue #38 показывает серьёзные просадки на одном из fused-путей.
MoE W4A8 с размерами, не кратными 256Проверьте версию vLLM и исправления маршрутизацииОбщие проверки могут заблокировать Humming ещё до загрузки весов.
Продакшен без возможности менять исходный кодИспользуйте только после показательного сравнительного тестаДля некоторых независимых результатов потребовались изменения ядер или эвристик.

FAQ

Какие GPU поддерживает Humming?

Проект рассчитан на GPU NVIDIA начиная с Turing и документирует несколько путей квантования. Но сама поддержка не означает, что каждый формат и сценарий нагрузки одинаково хорошо оптимизированы: для SM80 и необычных вариантов масштабирования нужны отдельные бенчмарки.

Нужен ли Humming заранее квантованный чекпойнт?

Humming — библиотека инференс-ядер, а не универсальный инструмент квантования. В рассмотренных сценариях используются чекпойнты с совместимыми квантованными весами и схемами активаций, поэтому перед запуском проверьте формат модели в документации и репозитории vLLM.

Humming быстрее любого другого бэкенда vLLM?

Нет. Он быстрее на отдельных квантованных нагрузках, особенно в описанных сценариях MoE с высокой конкуренцией. Результат зависит от архитектуры, формата, размеров, группировки scale-факторов и размера батча.

Практический вывод простой: Humming способен заметно ускорить хорошо подобранный квантованный сервис на vLLM, но короткий воспроизводимый сравнительный тест — обязательная часть внедрения. Публичные результаты слишком сильно зависят от конкретной конфигурации.