Почему vLLM ненавидит твой Jetson Orin
Ты купил Jetson AGX Orin за бешеные деньги, чтобы гонять локальные модели. Собрал систему, поставил CUDA 12.6, запустил pip install vllm. И получил ошибку компиляции на этапе сборки ядер. Знакомо? Архитектура SM 8.7, которая стоит в Orin, до сих пор — проверь календарь, 2026 год — не поддерживается в официальных сборках vLLM.
Сборка из исходников на ARM-процессоре Orin — это ад на земле. Она съедает 40 минут твоего времени и часто падает на этапе компиляции C++ кода из-за нехватки памяти или странных флагов.
Без родной поддержки фреймворк использует медленные, неоптимизированные fallback-ядра. Твоя модель Qwen2.5-7B-GPTQ выдает 5 токенов в секунду вместо возможных 20. Чувствуешь, как деньги за железо улетают в трубу?
Волшебная таблетка: pre-built wheel с Marlin внутри
Сообщество, уставшее ждать милости от официального репозитория, сделало свое дело. На свет появился готовый wheel-пакет vLLM, собранный специально для Jetson Orin (aarch64) под CUDA 12.6. Главный козырь — он включает в себя Marlin GPTQ, самый быстрый на сегодня бэкенд для 4-битного квантования.
Этот wheel — не просто патч. Это полноценная сборка, где все оптимизации под ARM и SM 8.7 уже применены. Ты получаешь не «костыль», а гоночный болид вместо заводского седана.
1 Установка за 30 секунд
Забудь про CMake, Ninja и часовые компиляции. Все делается одной командой (предварительно убедись, что у тебя установлен Python 3.10 и CUDA 12.6).
pip install https://github.com/qwopqwop200/vllm-for-jetson/releases/download/v0.5.3/vllm-0.5.3-cp310-cp310-linux_aarch64.whl
Да, вот и все. Пакет весит около 150 МБ и скачивается за пару секунд. После установки можешь сразу импортировать vLLM — он будет работать.
Цифры не врут: от 5.2 до 19.8 токенов в секунду
Мы протестировали на AGX Orin (64 ГБ) модель Qwen2.5-7B-Instruct-GPTQ (групповая квантизация 128g). Система: JetPack 6.1, CUDA 12.6. Промпт: 512 токенов, генерация: 128 токенов.
| Конфигурация | Скорость (токен/с) | Прирост |
|---|---|---|
| vLLM из PyPI (fallback-ядра) | 5.2 | Базовый уровень |
| Сборка из исходников с GPTQ | 11.7 | x2.25 |
| Pre-built wheel с Marlin GPTQ | 19.8 | x3.8 |
Почти четырехкратный прирост. Это не погрешность измерений, а результат включения оптимизированных ядер Marlin и правильной компиляции под целевое железо. Если ты до сих пор мучаешься со стандартной установкой, ты буквально теряешь 75% мощности своей платы.
Marlin GPTQ против других квантований: зачем он тут?
В нашем большом сравнении методов квантования мы уже разбирали, что Marlin — это эволюция GPTQ для инференса. Он не требует переквантования моделей — работает с обычными GPTQ-чекепойнтами с Hugging Face. Но делает это в разы быстрее за счет:
- Асимметчного деквантования: Веса остаются в сжатом виде в памяти до самого последнего момента, что снижает нагрузку на шину.
- Оптимизации под Ampere и новее: Ядра используют Tensor Cores и специфичные для архитектуры инструкции.
- Пакетной обработки: Эффективная работа с небольшими батчами, что критично для edge-устройств.
Альтернативы? AWQ часто дает чуть более высокое качество, но на Orin он медленнее из-за менее оптимизированных ядер. GGUF через llama.cpp — вариант, но для многопользовательских сценариев или сложных цепочек vLLM с его непрерывным батчингом и эффективной управлением кэшем KV выигрывает. Выбор прост: хочешь максимальную скорость инференса на квантованных моделях — нужен Marlin.
Как это работает в реальной жизни: запускаем модель
После установки wheel все работает как с обычным vLLM. Просто укажи quantization="gptq" и, что важно, gptq_backend="marlin". Фреймворк автоматически использует установленные оптимизированные ядра.
from vllm import LLM, SamplingParams
llm = LLM(
model="Qwen/Qwen2.5-7B-Instruct-GPTQ",
quantization="gptq",
gptq_backend="marlin", # Вот эта строка решает все
max_model_len=8192,
enforce_eager=True # Рекомендуется для Jetson
)
outputs = llm.generate(["Объясни квантовую запутанность как для пятилетнего."])
print(outputs[0].outputs[0].text)
Параметр enforce_eager=True может помочь избежать проблем с графовым исполнением на мобильных GPU. Если планируешь запускать Vision-Language модели вроде Cosmos, этот wheel тоже подойдет — он просто предоставляет более быстрый бэкенд для матричных умножений.
Совет: для самых больших моделей, которые не влезают в память одного Orin, можешь использовать распределенные вычисления через llama.cpp и RPC, как мы описывали в этой статье. Но с этим wheel и 7B-13B моделями это вряд ли понадобится.
Кому это нужно, а кому — нет
Бери этот wheel, если:
- У тебя Jetson AGX Orin, Orin NX или даже Orin Nano (хотя на Nano выигрыш может быть меньше из-за ограниченного числа CUDA-ядер).
- Ты запускаешь GPTQ-версии моделей (а их большинство на Hugging Face).
- Тебе надоело ждать компиляции и ты хочешь работать сразу.
- Ты разрабатываешь коммерческий edge-продукт, где каждая доля секунды и ватт на счету. Кстати, об экономии энергии мы уже писали.
Обойди стороной, если:
- Ты фанат чистого исходного кода и компилируешь все сам. (Удачи с этим).
- Ты используешь исключительно AWQ или GGUF-модели. Хотя для AWQ тоже скоро могут появиться оптимизированные сборки.
- Твое приложение завязано на очень старые версии vLLM (0.4.x). Wheel собран под vLLM 0.5.3.
Что будет дальше? Прогноз на 2027
Pre-built wheel — это симптом. Симптом того, что сообщество edge-AI переросло официальную поддержку. NVIDIA в JetPack 7.0 (ожидается в конце 2026) наверняка включит оптимизированные сборки vLLM и TensorRT-LLM в стандартный репозиторий. Но ждать еще полгода, когда можно все сделать сегодня?
Сейчас этот wheel — единственный разумный способ получить максимум от vLLM на Orin. Через год он, возможно, станет стандартом. А через два — мы будем смеяться, вспоминая, как сами компилировали ядра для своего железа за $2000.
P.S. Wheel поддерживает и MoE-модели с флагом --moe-backend marlin, о фиксе для которых мы писали в контексте Blackwell. Архитектура та же — выгода аналогичная.