vLLM 0.31.0: Оптимизация DeepSeek-V4.1-Flash и ускорение перезапуска движка

github:vllm-project/vllm · оригинал

Материал подготовлен автоматизированной редакционной системой. Факты можно сверить по указанному первоисточнику.

Выпуск vLLM 0.31.0 фокусируется на повышении производительности модели DeepSeek-V4.1-Flash за счет новых механизмов внимания и сжатия кэша, а также на значительном ускорении процесса перезапуска движка через сохранение весов в памяти GPU. Обновление также расширяет поддержку спекулятивного декодирования, улучшает планирование задач и усиливает безопасность обработки мультимодальных данных.

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

Команда разработчиков vLLM представила версию 0.31.0, которая включает 717 коммитов от 307 участников сообщества. Центральным элементом релиза стала глубокая оптимизация производительности для модели DeepSeek-V4.1-Flash. Разработчики внедрили механизм FlashMLA mega attention в сочетании со сжатым KV-кэшем NVFP4, который теперь является стандартным для архитектуры SM100. Дополнительно были улучшены вычисления логитов через DeepGEMM sparse MQA и реализовано слияние операций Mega-Gate, что позволяет объединять GEMM-операции с выбором экспертов. Эти изменения направлены на снижение задержек и повышение пропускной способности при обработке запросов к данной модели.

Важным нововведением стала функция быстрого перезапуска, реализованная через новую команду `vllm preload`. Этот инструмент запускает демон, который сохраняет пост-квантованные веса в памяти GPU между перезапусками движка. По заявлению разработчиков, это позволяет избежать повторной загрузки весов, что значительно сокращает время простоя. Функция поддерживает параллельное выполнение данных (data parallelism) и модели MTP draft, а также включает эндпоинт `/health` для мониторинга готовности системы. Экспериментально также доступны снапшоты инициализированного движка с использованием CRIU.

Версия 0.31.0 расширяет возможности спекулятивного декодирования в рамках Model Runner V2. Поддерживается использование моделей-черновиков (draft-models) и кастомных процессоров логитов. Разработчики представили новый драфтер LiLiCorr, а также улучшили асинхронное планирование для DFlash. Для моделей Gemma4 и Kimi-K3 внедрены адаптивные механизмы верификации, что позволяет более эффективно управлять длиной декодирования. Кроме того, была исправлена проблема исчерпания памяти (OOM) при профилировании MoE-моделей в конфигурациях WideEP.

В области масштабного обслуживания (large scale serving) добавлен сбалансированный бэкенд MoonEP для операций all2all, а также реализована параллельность контекста префилла в сочетании с параллельностью данных. Для систем на базе SM100/SM103 оптимизированы операции reduce-scatter, а DeepEPv2 теперь поддерживает последовательную параллельность. Эти изменения призваны повысить эффективность работы кластеров с большим количеством GPU.

Планировщик задач получил новые параметры управления. Флаг `--max-num-active-seqs` позволяет ограничивать количество активных последовательностей независимо от общего лимита, а параметр `--long-prefill-token-threshold` теперь адаптируется к числу ожидающих префиллов. Очередь ожидания была переработана так, чтобы запросы, уже удерживающие блоки KV-кэша, планировались в первую очередь. Также устранена блокировка (deadlock) между KV-коннектором и MTP под давлением памяти.

Безопасность была усилена за счет ограничений на передачу аргументов процессоров мультимодальных данных. Теперь параметры `mm_processor_kwargs` и `media_io_kwargs` отклоняются по умолчанию, если не установлен флаг доверия. Ключи префикс-кэша теперь маркируются источником, что исключает коллизии между именами LoRA и cache_salt. Также исправлена уязвимость, позволявшая устаревшим записям кэша мультимодальных данных заменять свежие полезные нагрузки.

Релиз содержит несколько ломающих изменений (breaking changes). Удален режим `tokenizer_mode="slow"`, переименован флаг для Mamba-кэша, а онлайн-квантование через `quantization="fp8"` заменено на сокращение `fp8_per_tensor`. Также удален бэкенд AllSpark INT8 W8A16 и изменено поведение флага `--enforce-eager`, который теперь отключает JIT-прогрев ядер. Пользователям рекомендуется внимательно изучить эти изменения перед обновлением.