# 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\\.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 @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 @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 @docker-gpu.cin.su ` -DockerHost ssh://@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`.