Initial SQL-only 1C adapter baseline
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
# 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`.
|
||||
Reference in New Issue
Block a user