Мой блог
Интеграция бэкенда transformers в vLLM достигла нативной скорости работы
Библиотека transformers в vLLM играет ключевую роль в современном машинном обучении. Для обновления пакета vLLM через pip достаточно выполнить команду uv pip install --upgrade vllm --torch-backend auto. Сама библиотека transformers служит эталонной средой для моделирования: она поддерживает более 450 архитектур благодаря единым API, а её код спроектирован так, чтобы реализации моделей были изолированными и понятными. Изучение исходного кода transformers позволяет разработчикам легко разобраться в работе любой архитектуры, а затем перенести её на другие платформы вроде vLLM, SGLang, MLX, llama.cpp и многие другие. В экосистеме активно поддерживается это направление, и разработчики вкладывают значительные усилия в его упрощение. Важным шагом стала интеграция transformers в качестве бэкенда моделирования внутри vLLM, реализованная в прошлом году. Это позволило авторам моделей запускать языковые и визуально-языковые модели напрямую внутри vLLM без необходимости ручного переноса кода. Пока transformers предоставляет код моделирования, vLLM отвечает за высоко оптимизированные методы инференса, такие как непрерывный батчинг (continuous batching) и пользовательские ядра внимания (custom attention kernels).
Сравнение производительности: тесты на моделях Qwen3
Теперь эта интеграция выходит на новый уровень. Бэкенд моделирования transformers для vLLM сравнили напрямую с написанными вручную нативными реализациями vLLM на трех совершенно разных моделях серии Qwen3:
- Плотная модель (dense) с 4 миллиардами параметров на одном графическом процессоре;
- Плотная модель с 32 миллиардами параметров при распараллеливании по тензорам (tensor parallelism);
- Смешанная экспертная модель (Mixture-of-Experts) с 235 миллиардами параметров в формате FP8 при комбинации параллелизма данных и экспертов на том же узле с восемью ускорителями H100.
Результаты показали, что бэкенд моделирования transformers теперь не уступает нативной пропускной способности ни в одном из этих тестов или даже превосходит её.
Как запустить модели с помощью бэкенда transformers
Запуск любой поддерживаемой модели Hugging Face через бэкенд моделирования transformers осуществляется с помощью всего одного флага — --model-impl transformers. Он легко комбинируется со стандартными опциями параллелизма, поэтому конфигурация обслуживания остается прежней:
- Для плотной модели Qwen3-4B на одном GPU:
vllm serve Qwen/Qwen3-4B --model-impl transformers - Для Qwen3-32B с тензорным параллелизмом на двух GPU:
vllm serve Qwen/Qwen3-32B --model-impl transformers --tensor-parallel-size 2 - Для MoE-модели Qwen3-235B-A22B-FP8 с параллелизмом данных и экспертов на восьми GPU:
vllm serve Qwen/Qwen3-235B-A22B-FP8 --model-impl transformers --data-parallel-size 8 --enable-expert-parallel
При нехватке памяти на узле рекомендуется добавить флаг --max-model-len 8192. Стоит учитывать ограничение: модели, использующие линейное внимание, в настоящее время не поддерживаются, но поддержка появится в ближайшем будущем. Пользовательские модели, чей код хранится в репозитории Hub, скорее всего, работать не будут, так как они созданы без соблюдения необходимых требований.
Каждая модель тестировалась в трех идентичных условиях, отличавшихся только путем выполнения кода:
- нативная реализация (
--model-impl vllm— модель vLLM ручной работы, задающая целевой ориентир); - состояние после применения изменений (
--model-impl transformersс соответствующим пулл-реквестом); - состояние до изменений (
--model-impl transformersбез пулл-реквеста).
Полный воспроизводимый сценарий тестирования доступен в виде скрипта benchmark.sh.
Технические особенности оптимизации инференса
Ранее бэкенд моделирования transformers для vLLM концентрировался на механизме внимания как на главном узком месте инференса. Интегрируя реализацию внимания от vLLM на этапе выполнения, разработчики добивались эффективной работы моделей transformers внутри движка vLLM. Тем не менее, развертывание моделей имеет множество аспектов, для максимальной производительности которых требуется специализированный перенос кода. Распараллеливание между графическими процессорами, компиляция, слияние ядер (fused kernels) и другие методы в совокупности позволяют полностью задействовать потенциал оборудования для достижения сверхбыстрого инференса.
Раньше новую модель приходилось интегрировать отдельно для transformers и отдельно для vLLM с добавлением кастомных оптимизаций. Когда авторам требовалась максимальная производительность, им приходилось писать собственные реализации для vLLM вручную. Теперь же модель, однажды интегрированная в transformers, может сразу же использоваться в vLLM со скоростью нативной реализации благодаря тому, что последняя итерация бэкенда динамически применяет специфичные для инференса слияния слоев во время выполнения для совместимых архитектур.
Оптимизация графа и производительность
Бэкэнд моделирования transformers в vLLM задействует инструментарий torch.fx для выполнения статического анализа графиков моделей. Такой анализ выявляет известные шаблоны, которые поддаются оптимизации. После обнаружения нужных паттернов система обращается к абстрактному синтаксическому дереву ast, чтобы переписать исходный код и модифицировать часть операций непосредственно на месте. Подобный подход открывает несколько важных возможностей.
В результате удается получить объединенные (fused) операции, отображаемые по схеме «многие к одному» в ультраоптимизированные ядра vLLM. К числу таких ядер относятся те, что задействуются для экспертной параллелизации EP в моделях типа Mixture-of-Experts. Другими значимыми объединенными операциями выступают блоки MergedColumnParallelLinear и QKVParallelLinear. Подобные элементы позволяют выводить параллельные планы для тензорного распараллеливания TP, а планы конвейерного распараллеливания PP поддаются выводу при условии простой идентификации списков декодерных блоков.
Измененные модели сохраняют полную способность к компиляции PyTorch, проходя через torch.compile и CUDA Graphs точно так же, как и специализированные реализации моделей vLLM. При этом, в отличие от стандартных реализаций vLLM, варианты на базе Transformers подходят для использования в процессах обучения. Это позволяет применять один и тот же код модели для тренировки, оценок и генерации траекторий в рамках обучения с подкреплением RL.
Описанный подход обеспечивает нативную скорость инференса vLLM для совместимых моделей без необходимости писать хотя бы одну строчку кода для дополнительной оптимизации под вывод. Сейчас авторы работают над подробной статьей в блоге, которая детально погрузит читателей в эти оптимизированные методы инференса и подробно объяснит алгоритмы адаптации моделей под них.
Источник: huggingface.co
