5.8 KiB
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и RDP3389. - Docker API
2375/2376, WinRM5985/5986, Portainer9000, inference8000/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.