ПО для GPU
Инференс LLM на vLLM
На этой странице
Установка PyTorch и vLLM в окружение Python
Создание окружения
uv быстро создаёт окружения и устанавливает пакеты, а ещё умеет скачивать версию Python, которой нет в вашей ОС:
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uv venv ~/venvs/vllm --python 3.12
source ~/venvs/vllm/bin/activate
Если вы предпочитаете стандартные инструменты, выполните sudo apt install , затем python3 и ту же строку с source. Держите vLLM в собственном окружении, отдельно от кода для обучения.
Установка пакетов
uv pip install vllm --torch-backend=auto
python -c "import torch, vllm; print(torch.__version__,
torch.cuda.is_available(), vllm.__version__)"
Между двумя номерами версий должно стоять True. vLLM фиксирует версию PyTorch, с которой он собран, и сам её устанавливает, а позволяет uv выбрать сборку PyTorch, подходящую для вашего драйвера. Не устанавливайте поверх другую версию PyTorch. Для окружения обучения без vLLM установите только PyTorch тем же способом: uv pip install torch . С обычным pip выполните pip install vllm.
Запуск OpenAI-совместимого сервера
Для первой проверки на одном GPU хорошо подходит модель класса 7B:
vllm serve Qwen/Qwen2.5-7B-Instruct \
--host 127.0.0.1 --port 8000 \
--max-model-len 16384 \
--gpu-memory-utilization 0.90
vllm serve Qwen/Qwen2.5-72B-Instruct \
--host 127.0.0.1 --port 8000 \
--tensor-parallel-size 8 \
--max-model-len 32768
При первом запуске скачиваются веса, и это может занять некоторое время. Сервер готов, когда в логе появится Application startup complete. Веса сохраняются в ~/.cache/huggingface; чтобы хранить их на export HF_HOME=/data/hf.
| Параметр | Что делает |
|---|---|
| Число GPU, между которыми делится модель. Число голов внимания модели должно делиться на это значение; для большинства крупных моделей подходит 8. |
| |
| |
| Адрес, на котором сервер принимает подключения. Без этого параметра vLLM слушает все интерфейсы, поэтому оставляйте 127.0.0.1. |
Проверка API с помощью curl
curl http://127.0.0.1:8000/v1/models
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "Qwen/Qwen2.5-7B-Instruct",
"messages": [{"role": "user", "content": "Say hello in five words."}],
"max_tokens": 32}'
Первый запрос должен вывести модель в списке. Второй возвращает JSON, в котором ответ находится в choices[0].message.contenthttp://127.0.0.1:8000/v1ssh .
Токен Hugging Face для моделей с ограниченным доступом
Для некоторых моделей, например семейства Llama от Meta, нужно принять лицензию на Hugging Face. Примите её на странице модели под своим аккаунтом, создайте токен доступа с правом чтения и передайте его vLLM в переменной HF_TOKEN. Если ввести токен по запросу, он не попадёт в историю командной оболочки:
read -rsp 'Hugging Face token: ' HF_TOKEN && export HF_TOKEN
vllm serve meta-llama/Llama-3.1-8B-Instruct \
--host 127.0.0.1 --port 8000 --max-model-len 16384
Ошибка 401 или 403 при скачивании означает, что токен не задан или неверен либо для этого аккаунта не принята лицензия.
Запуск vLLM как службы systemd
Храните настройки и секреты в файле, который может читать только root. Сгенерируйте API-ключ командойopenssl rand; vLLM читает-hex 32 VLLM_API_KEYтак же, как если бы вы передали.--api-key sudo mkdir -p /etc/vllm sudo tee /etc/vllm/vllm.env >/dev/null <<'EOF' HF_HOME=/data/hf HF_TOKEN=hf_your_token_here VLLM_API_KEY=replace-with-a-long-random-string EOF sudo chmod 600 /etc/vllm/vllm.env- Создайте
/etc/systemd/system/vllm.service. В этом примере служба работает от имени root с окружением, созданным выше; для другой учётной записи изменитеUserи пути:[Unit] Description=vLLM OpenAI-compatible server After=network-online.target Wants=network-online.target [Service] User=root EnvironmentFile=/etc/vllm/vllm.env ExecStart=/root/venvs/vllm/bin/vllm serve Qwen/Qwen2.5-7B-Instruct \ --host 127.0.0.1 --port 8000 --max-model-len 16384 Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target - Запустите службу и следите за логом:
Когда в логе появитсяsudo systemctl daemon-reload sudo systemctl enable --now vllm sudo journalctl -u vllm -fApplication startup complete, проверки через curl снова заработают, если добавить заголовок. Без него вы должны получить 401 Unauthorized. Служба перезапускается после сбоя и стартует при загрузке системы.-H "Authorization: Bearer YOUR_KEY"
Альтернатива: образ vllm/vllm-openai
docker run -d --name vllm --gpus all --ipc=host \
-p 127.0.0.1:8000:8000 \
-v /data/hf:/data/hf \
--env-file /etc/vllm/vllm.env \
vllm/vllm-openai:latest \
--model Qwen/Qwen2.5-7B-Instruct --max-model-len 16384
Точка входа (entrypoint) образа — сервер vLLM, поэтому аргументы после имени образа передаются прямо ему. Файл с переменными окружения задаёт HF_HOME=/data/hf — именно поэтому этот путь смонтирован в контейнер. В продакшене фиксируйте тег версии вместо latest. На серверах AMD используйте образ ROCm из руководства по настройке ROCm.
Защита эндпоинта
Для личного использования оставьте vLLM на 127.0.0.1 /v1/: ключ защищает маршруты /v1, а другие маршруты, например /metrics, могут оставаться открытыми. Об ufw, портах, опубликованных Docker, и настройке Caddy или nginx рассказывает руководство по файрволу. О подборе оборудования и текущих расходах читайте в статье о самостоятельном развёртывании инференса LLM с vLLM.
Устранение неполадок
- CUDA out of memory при запуске. Уменьшите
, распределите модель по большему числу GPU с помощью--max-model-len или выберите модель поменьше либо квантованную. Проверьте с помощью--tensor-parallel-size , что память GPU не занята другими процессами.nvidia-smi - Число голов внимания не делится на размер тензорного параллелизма. Выберите значение, на которое делится число голов модели, например 4 вместо 8.
- 401 Unauthorized. Нет заголовка
Authorization, или ключ не совпадает.
Часто задаваемые вопросы
Какой GPU нужен для инференса модели 70B на vLLM?
Работает ли vLLM на серверах AMD Instinct MI355X?
Да. Используйте образы vLLM от AMD с поддержкой ROCm и флагами устройств ROCm, как показано в нашем руководстве по настройке ROCm. Параметры vllm serve те же.
Как обновить vLLM?
Не получается?
Создайте тикет в личном кабинете: укажите сервер, что вы запускали, и приложите вывод ошибок, если он есть. Инженеры отвечают круглосуточно.