# First vLLM Inference

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

Основной runbook запуска: `docs/runbooks/deploy-vllm.md`.
Preflight GPU-хоста: `docs/runbooks/gpu-host-preflight.md`.

## Files

- `core/deploy/docker-gpu/vllm/compose.yaml`
- `core/deploy/docker-gpu/vllm/.env.example`
- `registry/model-cards/qwen3-4b-instruct-2507.yaml`

## Prepare

На GPU-хосте:

```powershell
docker --context default version
```

С локальной машины, если настроен Docker context:

```powershell
docker --host ssh://test@docker-gpu.cin.su info
```

## Configure

Скопировать `.env.example` в `.env` на стороне deployment-каталога и указать:

- `VLLM_MODEL_ID`
- `VLLM_SERVED_MODEL_NAME`
- `HOST_MODELS_DIR`
- `HOST_HF_CACHE_DIR`
- `HF_TOKEN`, только если нужен доступ к закрытой модели

Не коммитить `.env`.

## Run

```powershell
docker compose --env-file .env -f core/deploy/docker-gpu/vllm/compose.yaml up -d
```

## Check

```powershell
curl http://docker-gpu.cin.su:8000/v1/models
```

Пример запроса:

```powershell
curl http://docker-gpu.cin.su:8000/v1/chat/completions `
  -H "Content-Type: application/json" `
  -d '{"model":"qwen3-4b-instruct","messages":[{"role":"user","content":"Привет. Ответь коротко."}]}'
```

Или smoke-скриптом из корня проекта:

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

## Notes

- Сначала используем одну текстовую модель.
- Первая модель: `Qwen/Qwen3-4B-Instruct-2507`.
- Первый запуск ограничен `VLLM_MAX_MODEL_LEN=32768`, чтобы снизить риск OOM.
- Для 1С позже подключим RAG и LoRA/adapters отдельно.
- Большие модели и cache лежат вне git.
