Почему vLLM на AMD — это боль, но мы ее вылечим
Купить две AMD Radeon 7900 XTX для запуска Qwen3.5-32B — отличная идея. Пока не пытаешься заставить vLLM с ROCm увидеть обе карты. Официальная документация молчит, а форумы завалены вопросами без ответов. Но есть обходной путь. И он работает.
Предупреждение: ROCm 6.1 (актуальная на март 2026) совместима не со всем. Если у вас свежая сборка ядра Linux — готовьтесь к танцам с бубном. Иногда проще арендовать GPU в облаке для тестов, чем тратить неделю на отладку.
1 Готовим систему: драйверы и зависимости
Забудьте про установку ROCm из стандартных репозиториев дистрибутива. На 2026 год это гарантированно сломает vLLM. Единственный рабочий способ — использовать официальные пакеты AMD, но конкретной версии. Я тестировал на ROCm 6.1.2 с ядром Linux 6.8. Проверьте, что видите обе карты:
rocm-smi --showproductname
Должны быть две строки с "Radeon RX 7900 XTX". Если нет — проблемы с PCIe или драйвером. Убедитесь, что в системе отключен Secure Boot (да, ROCm все еще с ним не дружит).
2 Ставим vLLM с правильными флагами
Не используйте pip install vllm просто так. Для AMD нужна специальная сборка с поддержкой ROCm. На март 2026 года vLLM официально поддерживает ROCm в nightly-сборках. Лучше всего брать Docker-образ:
docker run --device=/dev/kfd --device=/dev/dri --group-add=video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -it rocm/vllm:nightly-rocm6.1.2 /bin/bash
Если хотите собрать локально, приготовьтесь к долгой компиляции. И да, вам понадобится минимум 32 ГБ оперативной памяти для сборки.
3 Секретная переменная, без которой ничего не работает
Вот главный ключ. Без этой переменной vLLM либо увидит только одну карту, либо упадет с невнятной ошибкой HSA. Добавьте в окружение перед запуском:
export HSA_ENABLE_IPC_MODE_LEGACY=1
Зачем? ROCm 6.x изменила механизм межпроцессорного взаимодействия (IPC) для много-GPU систем. Старый драйвер vLLM ожидает прежний режим. Эта переменная включает обратную совместимость. Без нее обмен данными между картами блокируется.
Еще две важные переменные для стабильности:
export HIP_VISIBLE_DEVICES=0,1
export PYTORCH_HIP_ALLOC_CONF=use_host_malloc:1
Первая явно указывает vLLM, какие GPU использовать. Вторая помогает избежать нехватки памяти из-за фрагментации в драйвере HIP.
4 Загружаем Qwen3.5 и запускаем бенчмарк
Возьмем Qwen3.5-32B-Instruct — оптимальный вариант для 2x24 ГБ VRAM. Команда для запуска инференса с измерением скорости:
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen3.5-32B-Instruct \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.9 \
--served-model-name qwen32b \
--port 8000
Подождите загрузки. Затем тестовый запрос для проверки скорости:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen32b",
"prompt": "Объясни, как работает трансформер",
"max_tokens": 256,
"temperature": 0
}'
Но это не настоящий бенчмарк. Для точных цифр используйте встроенный бенчмарк vLLM:
python -m vllm.benchmark.throughput \
--model Qwen/Qwen3.5-32B-Instruct \
--tensor-parallel-size 2 \
--input-len 512 \
--output-len 128 \
--num-prompts 100 \
--request-rate 10
| Конфигурация | Токенов/сек (ввод) | Токенов/сек (вывод) | Задержка (мс) |
|---|---|---|---|
| 2x Radeon 7900 XTX, vLLM, TP=2 | ~85 | ~24 | ~45 |
| 1x Radeon 7900 XTX, vLLM | ~42 | ~12 | ~90 |
Цифры ориентировочные, но показывают главное: две карты почти удваивают скорость. Но только если IPC работает.
А что с альтернативами? llama.cpp и другие
vLLM не единственный игрок. Для AMD часто советуют llama.cpp с бэкендом Vulkan. В теории — проще установка. На практике — ниже производительность на больших моделях, особенно при длинном контексте.
Плюсы llama.cpp Vulkan:
- Не требует ROCm, только драйвер Vulkan.
- Стабильнее работает на старом железе (см. оптимизация для RX 580).
Минусы:
- Скорость инференса для Qwen3.5-32B на двух 7900 XTX будет около 15-18 токенов/сек. Почти в два раза медленнее vLLM.
- Нет эффективного батчинга. Для API-сервера — плохо.
Еще есть вариант с llama.cpp RPC для распределения по нескольким GPU. Работает, но сложнее в настройке (подробности здесь).
Вывод: если нужна максимальная скорость инференса и планируете обрабатывать несколько запросов одновременно — vLLM с ROCm стоит потраченных нервов. Для эпизодического использования одной картой хватит и llama.cpp.
Кому это вообще нужно?
Эта настройка — для упрямых энтузиастов с двумя AMD картами на столе. Или для небольших студий, которые хотят сэкономить на инференсе, но не готовы платить за NVIDIA. Производительность близка к 2x RTX 4090, но дешевле (если не считать потраченного времени).
Идеальный случай:
- Локальный чат-бот с длинным контекстом на Qwen3.5-32B.
- Пакетная обработка текстов (суммаризация, перевод) с высокой пропускной способностью.
- Эксперименты с тонкой настройкой больших моделей, где нужен быстрый инференс.
Если вы просто хотите попробовать LLM раз в неделю — арендуйте облачный инстанс. Настройка того не стоит.
Последний совет: не обновляйтесь без причины
Самая большая ошибка — обновить ROCm или vLLM, потому что "вышла новая версия". В мире AMD стек драйверов — хрупкая экосистема. Рабочая конфигурация на март 2026: ROCm 6.1.2 + vLLM nightly-rocm6.1.2 + ядро 6.8. Если все работает — зафиксируйте версии в Dockerfile и не трогайте. Новые релизы часто ломают совместимость, а исправления ждут месяцами. Проверено на личном опыте.