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

5.8 KiB
Raw Blame History

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-хост:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGS167Ors2oDzveI1iNlRiuGSqdR90x0O05JrcoQ4UBL llm-docker-gpu

Для обычного Windows-пользователя ключ добавляется в:

C:\Users\<USER>\.ssh\authorized_keys

Для пользователей из группы Administrators OpenSSH Server обычно читает:

C:\ProgramData\ssh\administrators_authorized_keys

После добавления ключа права на файл администраторского ключа должны быть строгими:

icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r
icacls C:\ProgramData\ssh\administrators_authorized_keys /grant "Administrators:F" /grant "SYSTEM:F"

Проверка:

ssh <USER>@docker-gpu.cin.su "whoami; hostname"

Для Codex настроен локальный SSH alias:

ssh docker-gpu "whoami & hostname"
docker -H ssh://docker-gpu info

Проверка Windows GPU/Docker

На самом Windows-хосте:

powershell -NoProfile -ExecutionPolicy Bypass -File scripts/check_windows_gpu_host.ps1

Через SSH, когда ключ уже добавлен:

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:

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:

LLM-DockerDesktop-Autostart

Задача запускает:

C:\ProgramData\LLM\Ensure-DockerDesktop.ps1

Режим:

  • при старте Windows с задержкой 2 минуты;
  • watchdog каждые 5 минут;
  • запуск от пользователя m7\m с повышенными правами;
  • пароль хранится в Windows Task Scheduler, не в репозитории и не в скрипте.

Лог:

C:\ProgramData\LLM\logs\docker-desktop-autostart.log

Проверка задачи:

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-хоста подготовлены отдельные примеры:

core/deploy/docker-gpu/vllm/.env.windows-z.example
core/deploy/docker-gpu/llama-cpp/.env.windows-z.example

В них используются bind mount пути вида:

HOST_MODELS_DIR=Z:/LLM/models
HOST_HF_CACHE_DIR=Z:/LLM/models/cache/huggingface

Внутри контейнеров модели видны как /models.

Следующий запуск

После появления SSH-доступа и подтверждения GPU:

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.