Update configuration and documentation for LLM support and local watchdog
- Added `ollama-models.yaml` to .gitignore and implemented logic to copy it in gpu-rent.ps1 and gpu-rent.sh. - Enhanced env.example to include new variables for LLM runtime options and local watchdog configuration. - Updated CLI commands to support LLM options during setup and execution, including new flags for Ollama and llama.cpp. - Improved documentation in cli.md and README.md to reflect changes in LLM integration and local watchdog functionality. - Adjusted architecture and decisions documentation to clarify the role of LLMs and local watchdog in the system.
This commit is contained in:
+28
-26
@@ -34,23 +34,22 @@
|
||||
|
||||
| Модуль | Ответственность |
|
||||
| --- | --- |
|
||||
| `cli` | Typer: `up`, `tunnel`, `open`, `status`, `stop`, `destroy`, `logs`, `ssh`, `doctor`, `hold`, `seed-*`, `push-models`, `pull-output`, `resize-data`, `dry-run` |
|
||||
| `config` | `.env`, валидация, пути к ключам |
|
||||
| `cli` | Typer: `up`, `setup`, `tunnel`, `open`, `status`, `stop`, `destroy`, `logs`, `ssh`, `doctor`, `hold`, `seed-*`, `push` / `pull-output`, `resize-data`, `watchdog`, `dry-run` |
|
||||
| `config` / `varsfile` | `.env` + `gpu-rent.vars`, пути |
|
||||
| `state` | JSON сессии: ids, фаза, timestamps |
|
||||
| `os_client` | `openstacksdk`, refresh IAM-токена |
|
||||
| `inventory` | Flavors/images в сегменте, квоты, **фоллбек flavor** |
|
||||
| `bootstrap` | Идемпотентный first-boot; после успеха — snapshot boot volume |
|
||||
| `os_client` / `cloud` / `pools` | openstacksdk, ресурсы, скан пулов |
|
||||
| `inventory` | Flavors/images, квоты, фоллбек flavor |
|
||||
| `session` | `cmd_up` / `cmd_stop` / adopt |
|
||||
| `bootstrap` + `remote/bootstrap.sh` | Идемпотентный first-boot; light без apt |
|
||||
| `provision` | extensions, autocomplete, civitai seed, push, idle-killer arm, start SwarmUI |
|
||||
| `doctor` | Preflight без mutating compute |
|
||||
| `civitai_seed` | Манифест + Civitai API на `.red` |
|
||||
| `models_push` | SFTP `./Models`, `./Wildcards`, `./CustomWorkflows` |
|
||||
| `output_pull` | Опциональный SFTP с VM `Output/` |
|
||||
| `git_seed` | Clone `extensions.yaml` |
|
||||
| `autocomplete_seed` | Word-list + Settings.fds |
|
||||
| `sync_files` | SFTP `Models` / Wildcards / workflows / Output |
|
||||
| `notify` | Toast/звук при backend Idle |
|
||||
| `tunnel` | paramiko / sshtunnel, порт **17801** |
|
||||
| `watchdog` | EXPIRED → unshelve, пока туннель жив |
|
||||
| `idle_killer` | systemd на VM + hold-файл + «качалка занята» |
|
||||
| `reconcile` | Сироты по state и тегу `gpu-rent` |
|
||||
| `tunnel` | sshtunnel + Nova EXPIRED watchdog |
|
||||
| `local_watchdog` | Опциональный локальный тик → stop при unclean exit |
|
||||
| `llm_runtime` / `setup_wizard` | Opt-in Ollama/llama.cpp + `ollama-models.yaml` |
|
||||
| `idle_killer` / `hold` | systemd на VM + hold-файл |
|
||||
| `ready` / `snapshot` | Idle backend + boot snapshot |
|
||||
|
||||
Каталог сервисов — из Keystone, не из выдуманного `api.selectel.ru/v3/`.
|
||||
|
||||
@@ -82,29 +81,32 @@
|
||||
|
||||
## Стейт-машина
|
||||
|
||||
Фазы в `state.json` (код пишет только эти):
|
||||
|
||||
```
|
||||
idle
|
||||
│ gpu-rent up
|
||||
▼
|
||||
provisioning → bootstrapping → seeding_extensions → seeding_autocomplete → seeding_models → waiting_ui
|
||||
provisioning ← create volumes / server
|
||||
│
|
||||
▼
|
||||
ready_cloud ← compute жив, idle-killer вооружён
|
||||
bootstrapping ← SSH + bootstrap + seed (пока не ready)
|
||||
│
|
||||
│ gpu-rent tunnel (опционально, пока ноут онлайн)
|
||||
▼
|
||||
ready_tunneled ← localhost:17801
|
||||
ready_cloud ← compute жив, idle-killer вооружён
|
||||
│
|
||||
│ хостер: EXPIRED
|
||||
│ gpu-rent tunnel (или up с туннелем)
|
||||
▼
|
||||
restoring (unshelve) → ready_cloud / ready_tunneled
|
||||
ready_tunneled ← localhost:17801
|
||||
│
|
||||
│ stop | idle-killer | destroy
|
||||
│ stop | idle-killer | local-watchdog | destroy
|
||||
▼
|
||||
stopping → idle
|
||||
idle
|
||||
```
|
||||
|
||||
`ready_cloud` ≠ Nova `ACTIVE`. ACTIVE бывает раньше SSH и UI.
|
||||
Подшаги seed (extensions / autocomplete / models) идут внутри `bootstrapping`, отдельными фазами в state не пишутся. `ready_cloud` ≠ Nova `ACTIVE` (ACTIVE бывает раньше SSH и UI).
|
||||
|
||||
На EXPIRED туннель сам делает unshelve → снова `bootstrapping`/`ready_*`.
|
||||
|
||||
## Idle-killer (на VM)
|
||||
|
||||
@@ -118,7 +120,7 @@ Killer молчит:
|
||||
- пока существует hold: файл `/mnt/swarm_data/.gpu-rent-hold-until` с unix ts (пишет `gpu-rent hold`);
|
||||
- пока SwarmUI качает модель в UI (Model Downloader / активный download — точный JSON на spike). Нет сигнала — пользователь жмёт `hold`.
|
||||
|
||||
`gpu-rent hold` без аргументов = +`IDLE_MINUTES` от сейчас. `--minutes 90` — абсолютное продление. `--until` ISO опционально. `hold --clear` снимает.
|
||||
`gpu-rent hold` без аргументов = +`IDLE_MINUTES` от сейчас. `--minutes 90` — hold до now+90 мин (заменяет предыдущий, не складывает). `--until` ISO опционально. `hold --clear` снимает.
|
||||
|
||||
Потом счётчик 30 минут пустой очереди.
|
||||
|
||||
@@ -167,7 +169,7 @@ Reconcile: сервер с тегом `gpu-rent` есть, локального
|
||||
|
||||
| Слой | Выбор |
|
||||
| --- | --- |
|
||||
| Python 3.11+ | openstacksdk, paramiko, Typer, Rich, questionary, dotenv |
|
||||
| Python 3.11+ | openstacksdk, paramiko, sshtunnel, Typer, Rich, dotenv, httpx, pyyaml |
|
||||
| SSH | paramiko + sshtunnel (Windows без системного `ssh -L`) |
|
||||
| Конфиг | `<repo>/.env` + runtime в `<repo>/.gpu-rent/` |
|
||||
| Конфиг | `<repo>/.env` + `gpu-rent.vars` + runtime в `<repo>/.gpu-rent/` |
|
||||
| Лицензия | MIT |
|
||||
|
||||
Reference in New Issue
Block a user