# GPU Host Preflight

Цель: проверить, что `docker-gpu.cin.su` готов к запуску GPU-контейнеров.

Если `docker-gpu.cin.su` указывает на Windows-хост, используйте также отдельный runbook:

```text
docs/runbooks/windows-docker-gpu-host.md
```

## SSH Host Key

Если SSH сообщает `Host key verification failed`, нужно вручную проверить fingerprint хоста и добавить ключ в `known_hosts`.

Команда для просмотра ключа:

```powershell
ssh-keyscan docker-gpu.cin.su
```

После проверки fingerprint можно добавить ключ:

```powershell
ssh-keyscan docker-gpu.cin.su >> $env:USERPROFILE\.ssh\known_hosts
```

Не добавляйте ключ вслепую, если есть риск подмены DNS или хоста.

## Preflight

Из корня проекта:

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

Если нужен явный пользователь SSH:

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/check_gpu_host.ps1 -SshTarget USER@docker-gpu.cin.su
```

Скрипт проверяет:

- SSH-доступ;
- наличие GPU через `nvidia-smi`;
- Docker Engine;
- Docker Compose;
- запуск тестового CUDA-контейнера с `--gpus all`.

## Readiness Report

Чтобы одной командой проверить SSH preflight и endpoints активного GPU-профиля:

```powershell
python scripts/check_gpu_readiness.py --profile text --print
```

Отчет пишется в:

```text
reports/gpu-readiness.json
```

По умолчанию проверяется профиль `text` из `config/gpu_profiles.json`:

- SSH/GPU/Docker preflight через `scripts/check_gpu_host.ps1`.
- health/model endpoints из поля `wait` выбранного профиля.

Полная проверка взаимоисключающих OpenAI-compatible endpoints доступна отдельно:

```powershell
python scripts/check_gpu_readiness.py --all-endpoints --print
```

Если SSH возвращает `Permission denied`, нужно настроить SSH-ключ или явно указать пользователя:

```powershell
python scripts/check_gpu_readiness.py --ssh-target USER@docker-gpu.cin.su --print
```

## Full GPU Stack Flow

После настройки SSH-доступа можно запустить весь контур:

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

Сценарий выполняет:

- GPU host preflight;
- deploy vLLM;
- deploy llama.cpp GGUF;
- ожидание `/v1/models` для обоих endpoint-ов;
- запуск live evals.

Посмотреть план без запуска:

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

Проверить compose-файлы без SSH preflight:

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

## Expected Result

В выводе должны быть:

- имя хоста;
- модель GPU и объем VRAM;
- версия Docker;
- версия Docker Compose;
- результат `nvidia-smi` внутри контейнера.
