# Deploy vLLM

Цель: поднять первый OpenAI-compatible inference API на `docker-gpu.cin.su`.

## 1. Check GPU Host

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/check_gpu_host.ps1
```

Если SSH ругается на host key, см. `docs/runbooks/gpu-host-preflight.md`.

## 2. Prepare Env

Для реального запуска лучше создать локальный `.env` рядом с compose-файлом:

```powershell
Copy-Item core/deploy/docker-gpu/vllm/.env.example core/deploy/docker-gpu/vllm/.env
```

Отредактировать:

- `VLLM_MODEL_ID`
- `VLLM_SERVED_MODEL_NAME`
- `HOST_MODELS_DIR`
- `HOST_HF_CACHE_DIR`
- `HF_TOKEN`, если модель закрытая

На Windows GPU-хосте используйте проверенный образ
`VLLM_IMAGE=vllm/vllm-openai:v0.10.2`. С драйвером CUDA 12.8 новые образы могут
не стартовать из-за требования CUDA 13. После обновления драйвера до CUDA 13.x
образ `latest` проходит CUDA-проверку, но vLLM 0.23.0 на Docker Desktop/WSL
падает при старте движка с `UVA is not available`.

Файл `.env` не коммитится.

## 3. Validate Compose

Без запуска:

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/deploy_vllm.ps1 -ConfigOnly
```

## 4. Deploy

С `.env.example`:

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/deploy_vllm.ps1 -Pull
```

С реальным `.env`:

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/deploy_vllm.ps1 -EnvFile core/deploy/docker-gpu/vllm/.env -Pull
```

## 5. Check Endpoint

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/check_vllm_endpoint.ps1
```

Или напрямую:

```powershell
python scripts/check_inference_endpoint.py --base-url http://docker-gpu.cin.su:8000 --expected-model qwen3-4b-instruct --print
python scripts/smoke_chat.py --base-url http://docker-gpu.cin.su:8000 --model qwen3-4b-instruct
```

## 6. Stop

```powershell
docker --host ssh://test@docker-gpu.cin.su compose --env-file core/deploy/docker-gpu/vllm/.env -f core/deploy/docker-gpu/vllm/compose.yaml down
```

Если для GPU-хоста нужен явный пользователь, передайте его в параметре:

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/deploy_vllm.ps1 -DockerHost ssh://USER@docker-gpu.cin.su -ConfigOnly
```
