- Updated the `gpu-rent` logic to ensure the `IsInstalled` flag is accurately set based on the presence of ComfyUI, preventing conflicts during installation. - Improved the handling of the `/mnt/swarm_data` directory to skip creation if it does not exist, enhancing robustness in provisioning. - Added tests to validate the new installation state checks and ensure proper diagnostics during the installation process, including scenarios for clearing and setting the `IsInstalled` flag.
62 lines
4.8 KiB
Markdown
62 lines
4.8 KiB
Markdown
# SwarmUI на GPU-сервере
|
||
|
||
Репозиторий: [mcmonkeyprojects/SwarmUI](https://github.com/mcmonkeyprojects/SwarmUI).
|
||
|
||
**Без Docker.** На VM процесс слушает **7801** на loopback (`launch-linux.sh`). На ноутбуке туннель — **17801**.
|
||
|
||
## Чего нет
|
||
|
||
- Docker, nvidia-container-toolkit, образа на Docker Hub.
|
||
- Порта 7860 (это Automatic1111).
|
||
- Зеркала **локального** SwarmUI. С ноутбука едут только деревья приложения: [local-folders.md](local-folders.md). Первый Civitai-seed — [models.md](models.md).
|
||
|
||
## Bootstrap (один раз на boot volume)
|
||
|
||
1. Образ Selectel **Ubuntu 24.04 LTS GPU Driver 580** (без Docker в имени, см. [selectel.md](selectel.md)).
|
||
2. Git clone SwarmUI в `/opt/swarmui`. .NET — `launchtools/linux-dotnet-install.sh` (SDK 8 и 10, как в доке SwarmUI).
|
||
3. Bind-mounts с data volume в дерево `/opt/swarmui` — таблица в [architecture.md](architecture.md).
|
||
4. Clone git-расширений из манифеста ([extensions.md](extensions.md)), если файл не пустой.
|
||
5. Word-list autocomplete в `Data/Autocompletions` и `DefaultUser.AutoComplete.Source` ([autocomplete.md](autocomplete.md)).
|
||
6. Если есть Civitai-токен и манифест моделей: seed весов **до** первого старта SwarmUI; иначе — дефолтная модель установщика.
|
||
7. Push непустых `Models/` / `Wildcards/` / `CustomWorkflows/`.
|
||
8. systemd unit `swarmui`: `./launch-linux.sh --launch_mode none --host 127.0.0.1 --port 7801`.
|
||
9. **GPU probe** → `/mnt/swarm_data/.gpu-rent-gpu.json` (VRAM / compute cap / tier) — до старта UI; Ollama читает его при install.
|
||
10. Старт SwarmUI → **headless InstallConfirmWS** (ComfyUI в `dlbackend`, models=none — веса уже с Civitai) → seed LLM → idle-killer → **wait backend ready** (`running`; `empty`/`loading` ≠ ready; SwarmUI `idle` = бэкенды спят, не «готово»).
|
||
11. **Perf tune после Idle** — `triton`+`sageattention` в Comfy venv и `--use-sage-attention` в `Data/Backends.fds` (маркер `.gpu-rent-perf-tuned`; повтор при смене GPU).
|
||
12. Авторизация SwarmUI включена, токен в `Data` на диске.
|
||
13. Один snapshot boot volume `gpu-rent-boot-ok`, если ещё нет.
|
||
|
||
Рестарт UI: `systemctl restart swarmui`, не `docker restart`.
|
||
|
||
## ComfyUI
|
||
|
||
Первый запуск качает backend в `/opt/swarmui/dlbackend` (это bind на data volume). Иначе каждый recreate потеряет часы.
|
||
|
||
**gpu-rent:** после `systemctl start swarmui` вызывается headless `InstallConfirmWS` (`backend=comfyui`, `models=none`), если `GetCurrentStatus` ещё `empty`. `IsInstalled: true` пишется только когда Comfy уже на диске; на первом старте (или если прошлый `up` оставил флаг без `dlbackend/ComfyUI`) флаг сбрасывается — иначе Swarm отвечает `Server is already installed!` и не клонирует Comfy. Без этого UI отвечает HTTP 200, а Comfy/torch так и не появляются — раньше `wait_backend_idle` ошибочно считал `empty` = Idle.
|
||
|
||
**Скорость без потери качества (gpu-rent):** после Idle backend, на GPU с compute capability ≥ 8.0 и ≥16 GiB VRAM — SageAttention. `Performance.AllowGpuSpecificOptimizations` у Swarm по умолчанию уже включает `--fast` для 30xx+. Если venv ещё не появился — маркер без `pip_ok`, догонит на следующем `up`.
|
||
|
||
Пока CUDA/ComfyUI поднимаются, UI уже может отвечать. Для MCP и `/API/` — рано: `ready` после Idle backend.
|
||
|
||
## Доступ с ноутбука
|
||
|
||
Пока запущен `gpu-rent tunnel`:
|
||
|
||
| Что | URL |
|
||
| --- | --- |
|
||
| UI | `http://127.0.0.1:17801` |
|
||
| HTTP API | `http://127.0.0.1:17801/API/` |
|
||
| MCP | `http://127.0.0.1:17801/mcp` |
|
||
|
||
Локальный инстанс на 7801 продолжает жить. В Cursor MCP на время сессии переключают на 17801 (вручную по сниппету CLI).
|
||
|
||
Без туннеля API с ноутбука недоступен: 7801 на VM не опубликован в интернет.
|
||
|
||
## Чего не делать
|
||
|
||
- `chmod -R 777` на Models.
|
||
- Слушать 7801 на `0.0.0.0`.
|
||
- Ставить Docker «на всякий случай».
|
||
- Считать Nova `ACTIVE` = можно генерировать.
|
||
- `apt upgrade` ядра (ломает nvidia-smi).
|