Files
llm/docs/runbooks/windows-docker-gpu-host.md

159 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Windows Docker GPU Host
Целевой хост: `docker-gpu.cin.su` / `192.168.220.91`.
Назначение: Windows-машина с NVIDIA GPU, Docker Desktop/Engine и контейнерами/моделями на диске `Z:`.
## Что сейчас видно с рабочей машины
- DNS `docker-gpu.cin.su` указывает на `192.168.220.91`.
- Открыты SSH `22` и RDP `3389`.
- Docker API `2375/2376`, WinRM `5985/5986`, Portainer `9000`, inference `8000/8080` снаружи не открыты.
- SSH под `test@docker-gpu.cin.su` ключ не принимает: нужен правильный пользователь или добавление публичного ключа.
## Доступ
Предпочтительный вариант - SSH-ключ, без хранения паролей в репозитории.
Публичный ключ пользователя, который нужно добавить на Windows-хост:
```text
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGS167Ors2oDzveI1iNlRiuGSqdR90x0O05JrcoQ4UBL llm-docker-gpu
```
Для обычного Windows-пользователя ключ добавляется в:
```powershell
C:\Users\<USER>\.ssh\authorized_keys
```
Для пользователей из группы Administrators OpenSSH Server обычно читает:
```powershell
C:\ProgramData\ssh\administrators_authorized_keys
```
После добавления ключа права на файл администраторского ключа должны быть строгими:
```powershell
icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r
icacls C:\ProgramData\ssh\administrators_authorized_keys /grant "Administrators:F" /grant "SYSTEM:F"
```
Проверка:
```powershell
ssh <USER>@docker-gpu.cin.su "whoami; hostname"
```
Для Codex настроен локальный SSH alias:
```powershell
ssh docker-gpu "whoami & hostname"
docker -H ssh://docker-gpu info
```
## Проверка Windows GPU/Docker
На самом Windows-хосте:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/check_windows_gpu_host.ps1
```
Через SSH, когда ключ уже добавлен:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/check_windows_gpu_host.ps1 -SshTarget <USER>@docker-gpu.cin.su
```
Скрипт проверяет:
- `nvidia-smi`;
- Docker Engine;
- Docker Compose;
- наличие/создание `Z:\LLM\models`;
- запуск CUDA-контейнера с `--gpus all`.
## Docker Desktop в SSH-сессии
На Windows-хосте Docker Desktop должен быть запущен в интерактивной пользовательской сессии. Если `docker version` показывает клиент, но не может открыть pipe `dockerDesktopLinuxEngine`, запустите Docker Desktop в активной RDP/console-сессии пользователя.
Проверка через Docker-over-SSH:
```powershell
docker -H ssh://docker-gpu version
docker -H ssh://docker-gpu run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
```
Если `ssh docker-gpu "docker pull ..."` падает с ошибкой `A specified logon session does not exist`, причиной может быть `credsStore: desktop` в `%USERPROFILE%\.docker\config.json`. Для деплоя предпочтительно тянуть образы локальным Docker CLI через `docker -H ssh://docker-gpu ...`; такой режим не требует удаленного desktop credential helper.
## Автозапуск Docker Desktop
На `M7` настроена задача Windows Task Scheduler:
```text
LLM-DockerDesktop-Autostart
```
Задача запускает:
```text
C:\ProgramData\LLM\Ensure-DockerDesktop.ps1
```
Режим:
- при старте Windows с задержкой 2 минуты;
- watchdog каждые 5 минут;
- запуск от пользователя `m7\m` с повышенными правами;
- пароль хранится в Windows Task Scheduler, не в репозитории и не в скрипте.
Лог:
```text
C:\ProgramData\LLM\logs\docker-desktop-autostart.log
```
Проверка задачи:
```powershell
ssh docker-gpu "schtasks /Query /TN LLM-DockerDesktop-Autostart /V /FO LIST"
ssh docker-gpu "cmd /c type C:\ProgramData\LLM\logs\docker-desktop-autostart.log"
```
После проверочной перезагрузки `2026-06-19` задача подняла Docker Desktop автоматически, а GPU smoke test прошел через `docker -H ssh://docker-gpu`.
## Env-файлы под Z:
Для Windows-хоста подготовлены отдельные примеры:
```text
core/deploy/docker-gpu/vllm/.env.windows-z.example
core/deploy/docker-gpu/llama-cpp/.env.windows-z.example
```
В них используются bind mount пути вида:
```text
HOST_MODELS_DIR=Z:/LLM/models
HOST_HF_CACHE_DIR=Z:/LLM/models/cache/huggingface
```
Внутри контейнеров модели видны как `/models`.
## Следующий запуск
После появления SSH-доступа и подтверждения GPU:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/deploy_gpu_stack.ps1 `
-SshTarget <USER>@docker-gpu.cin.su `
-DockerHost ssh://<USER>@docker-gpu.cin.su `
-VllmEnvFile core/deploy/docker-gpu/vllm/.env.windows-z.example `
-LlamaEnvFile core/deploy/docker-gpu/llama-cpp/.env.windows-z.example `
-Pull
```
Если Docker Desktop на Windows не принимает remote Docker over SSH напрямую, запуск compose нужно выполнить интерактивно на самом хосте через RDP/SSH PowerShell, используя те же `.env.windows-z.example`.