- Added support for `llamacpp-models.yaml` in `.gitignore` and implemented logic to copy it in `gpu-rent.ps1` and `gpu-rent.sh`. - Enhanced CLI to prompt for llama.cpp model presets during setup and execution, improving user experience. - Updated configuration handling to include `llamacpp_models_manifest` and related functions for managing llama.cpp models. - Improved documentation in `cli.md` and `llm.md` to reflect changes in llama.cpp integration and model management. - Refactored provisioning logic to handle llama.cpp model downloads and configurations effectively.
239 lines
9.8 KiB
Markdown
239 lines
9.8 KiB
Markdown
# CLI и конфигурация
|
||
|
||
Имя команды: `gpu-rent`. Лаунчеры: `gpu-rent.bat` / `.\gpu-rent.ps1` / `./gpu-rent.sh` (создают `.venv` и вызывают `python -m gpu_rent`).
|
||
|
||
Без аргументов CLI показывает **help**. Поднять GPU с двойного клика: в `gpu-rent.vars` → `GPU_RENT_DEFAULT_ARGS=up --yes`.
|
||
|
||
---
|
||
|
||
## Типичные сценарии
|
||
|
||
### Первый раз
|
||
|
||
```text
|
||
gpu-rent doctor
|
||
gpu-rent up --yes
|
||
# … работа …
|
||
gpu-rent stop
|
||
```
|
||
|
||
Подготовка ключей: [setup.md](setup.md).
|
||
|
||
### Обычная сессия
|
||
|
||
```text
|
||
gpu-rent up --yes
|
||
# Ctrl+C → туннель off, GPU жив
|
||
gpu-rent tunnel --open
|
||
gpu-rent hold
|
||
gpu-rent stop
|
||
```
|
||
|
||
### Только облако (туннель позже)
|
||
|
||
```text
|
||
gpu-rent up --yes --no-tunnel
|
||
gpu-rent tunnel --open
|
||
```
|
||
|
||
### LLM рядом со SwarmUI
|
||
|
||
```text
|
||
gpu-rent setup # или
|
||
gpu-rent up --yes --ollama
|
||
```
|
||
|
||
Подробности: [llm.md](llm.md).
|
||
|
||
---
|
||
|
||
## Команды
|
||
|
||
| Команда | Поведение |
|
||
| --- | --- |
|
||
| `gpu-rent setup` | Wizard: манифесты, `LLM_RUNTIME`, пресет ollama-models, опционально local-watchdog |
|
||
| `gpu-rent doctor` | Preflight **без** create. Exit ≠ 0 → сессию начинать нельзя |
|
||
| `gpu-rent flavors` | Скан `SCAN_POOLS` × `FLAVOR_PREFERENCE`, список в текущем регионе |
|
||
| `gpu-rent dry-run` | План без mutating-вызовов |
|
||
| `gpu-rent up` / `up --yes` | Create/unshelve → bootstrap → optional LLM → **туннель** `:17801`. Без `--yes`: выбор flavor / data GB / preemptible, затем confirm. Ctrl+C = туннель off |
|
||
| `gpu-rent up -v` / `--verbose` | Полная таблица doctor на `up` (по умолчанию кратко) |
|
||
| `gpu-rent up --ollama` / `--llamacpp` / `--llm …` | LLM рядом со SwarmUI |
|
||
| `gpu-rent up --no-update` | Без `git pull` SwarmUI/extensions (только недостающие clone) |
|
||
| `gpu-rent up --no-tunnel` | Только облако |
|
||
| `gpu-rent up --no-spot` | Не preemptible |
|
||
| `gpu-rent up --flavor ID --yes` | Явный flavor; без `--flavor` + `--yes` — первый доступный из `FLAVOR_PREFERENCE` |
|
||
| `gpu-rent tunnel` / `tunnel --open` | Повторный проброс; `--open` сразу браузер. Ctrl+C GPU **не** гасит |
|
||
| `gpu-rent open` / `open --llm` | Браузер на SwarmUI / LLM-порт (туннель уже должен слушать) |
|
||
| `gpu-rent status` | State, Nova, диск, killer/hold, LLM, local-watchdog |
|
||
| `gpu-rent hold` / `--minutes N` / `--until ISO` / `--clear` | Пауза idle-killer (нужны живая VM + SSH) |
|
||
| `gpu-rent stop` / `stop --no-pull` | Удалить compute (+ FIP), диски оставить; optional pull Output |
|
||
| `gpu-rent destroy --i-understand-data-loss` | `stop` + диски |
|
||
| `gpu-rent logs` | journalctl swarmui / cloud-init |
|
||
| `gpu-rent ssh` | Оболочка на VM |
|
||
| `gpu-rent seed-models` | Докачать новые строки Civitai-манифеста на живой диск |
|
||
| `gpu-rent seed-extensions` | Доклонировать/обновить git-репы; restart swarmui |
|
||
| `gpu-rent push` / `push-models` | Локальные деревья → VM |
|
||
| `gpu-rent pull-output` | VM `Output/` → `./Output` |
|
||
| `gpu-rent capture` / `capture all` | Инвентарь VM → merge **ссылок** в `models.yaml` + `extensions.yaml` (веса не качать) |
|
||
| `gpu-rent capture models` / `--kind lora` | Только модели (фильтр по типу) |
|
||
| `gpu-rent capture extensions` | Только git Extensions / DLNodes |
|
||
| `gpu-rent capture --dry-run` | Отчёт без записи файлов |
|
||
| `gpu-rent resize-data --gb 400` | Data volume **только вверх** |
|
||
| `gpu-rent watchdog install` / `uninstall` / `status` / `tick` | Локальный safety-net (см. ниже) |
|
||
|
||
Второй `up` при живой VM: не создаёт второй GPU; autocomplete-check + push локальных папок; при `PULL_OUTPUT` — подтянуть Output. `--adopt` — подхватить тег без state.
|
||
|
||
Нет команды `generate`. Локальный SwarmUI целиком не зеркалируем — только папки приложения ([local-folders.md](local-folders.md)).
|
||
|
||
---
|
||
|
||
## `doctor`
|
||
|
||
Не создаёт сервер и не тратит GPU. Нужен до первого `up` и когда «вчера работало».
|
||
|
||
Проверки (все печатаются в отчёт):
|
||
|
||
1. Читается `.env`, обязательные `OS_*`
|
||
2. Keystone выдаёт токен
|
||
3. Квота GPU > 0 (иначе текст про поддержку Selectel)
|
||
4. В сегменте есть flavor из `FLAVOR_PREFERENCE`
|
||
5. Volume type / место под data ~100 GB
|
||
6. SSH-ключ есть или будет создан в `.gpu-rent/`
|
||
7. Если есть `CIVITAI_API_TOKEN` — доступ к API-хосту; манифест парсится
|
||
8. `extensions.yaml` парсится, если есть
|
||
9. Предупреждения по огромным локальным `Models/`
|
||
|
||
Exit 0 → можно `up`. Exit 1 → причина в таблице / кратком списке на `up`.
|
||
|
||
---
|
||
|
||
## `status` и `hold`
|
||
|
||
**status** — без туннеля. При SSH: ещё `df` диска и состояние killer; иначе только OpenStack + локальный state.
|
||
|
||
**hold** пишет на VM `/mnt/swarm_data/.gpu-rent-hold-until`. Killer не удаляет compute, пока `now < ts`. Без живой VM — ошибка (не «запомню на потом»). После unshelve hold на диске сохраняется.
|
||
|
||
---
|
||
|
||
## Local watchdog (опционально)
|
||
|
||
Основной авто-stop — **idle-killer на VM** (ноут можно закрыть). Local watchdog — если хочешь гасить GPU при «убили окно / ребут» без `stop`.
|
||
|
||
1. `gpu-rent watchdog install` (раз на машине, из корня репо)
|
||
2. Пока крутится `up`/`tunnel`, пишется heartbeat `.gpu-rent/local-lease.json`
|
||
3. **Ctrl+C** → detach, GPU **не** трогаем
|
||
4. Процесс умер / ребут → через `LOCAL_WATCHDOG_GRACE_MINUTES` (дефолт 10) → `stop`
|
||
5. `gpu-rent stop` чистит lease сам
|
||
|
||
Без `install` поведение прежнее. При `up --no-tunnel` lease не вооружается.
|
||
|
||
---
|
||
|
||
## Конфигурация
|
||
|
||
| Файл | Назначение |
|
||
| --- | --- |
|
||
| `.env` | Секреты и OpenStack (`OS_*`, токены). Не в git |
|
||
| `gpu-rent.vars` | Несекретные дефолты; читают лаунчеры и CLI. Пример: `gpu-rent.vars.example` |
|
||
| `models.yaml` / `extensions.yaml` / `ollama-models.yaml` | Манифесты |
|
||
|
||
### Лаунчер (`gpu-rent.vars`)
|
||
|
||
```env
|
||
# Двойной клик / запуск без аргументов у .ps1/.bat/.sh:
|
||
GPU_RENT_DEFAULT_ARGS=up --yes
|
||
|
||
# Дописать ко всем вызовам:
|
||
# GPU_RENT_EXTRA_ARGS=--no-update
|
||
|
||
UPDATE_GIT=true
|
||
LLM_RUNTIME=none
|
||
```
|
||
|
||
### Основные переменные (`.env` / vars)
|
||
|
||
```env
|
||
OS_AUTH_URL=https://cloud.api.selcloud.ru/identity/v3
|
||
OS_USER_DOMAIN_NAME=
|
||
OS_USERNAME=
|
||
OS_PASSWORD=
|
||
OS_PROJECT_ID=
|
||
OS_REGION_NAME=ru-7
|
||
GPU_RENT_AZ=ru-7a
|
||
|
||
SSH_PRIVATE_KEY_PATH=
|
||
SSH_USER=ubuntu
|
||
# Пусто = авто /32 твоего IP. Для spike/WARP иногда 0.0.0.0/0:
|
||
GPU_RENT_SSH_CIDR=
|
||
|
||
BOOT_VOLUME_ID=
|
||
DATA_VOLUME_ID=
|
||
DATA_VOLUME_SIZE_GB=100
|
||
BOOT_SNAPSHOT_NAME=gpu-rent-boot-ok
|
||
|
||
CIVITAI_API_TOKEN=
|
||
CIVITAI_API_HOST=civitai.red
|
||
MODELS_MANIFEST=
|
||
LOCAL_MODELS_DIR=
|
||
LOCAL_WILDCARDS_DIR=
|
||
LOCAL_WORKFLOWS_DIR=
|
||
LOCAL_OUTPUT_DIR=
|
||
EXTENSIONS_MANIFEST=
|
||
GIT_TOKEN=
|
||
|
||
AUTOCOMPLETE_ENABLED=true
|
||
|
||
SWARMUI_LOCAL_PORT=17801
|
||
LLM_RUNTIME=none
|
||
OLLAMA_LOCAL_PORT=17811
|
||
LLAMACPP_LOCAL_PORT=17812
|
||
UPDATE_GIT=true
|
||
|
||
DEFAULT_FLAVOR_ID=
|
||
FLAVOR_PREFERENCE=4090-24,4090-48,a5000,a100-40
|
||
FLAVOR_FALLBACK=true
|
||
SCAN_POOLS=ru-6,ru-7
|
||
DEFAULT_SPOT=true
|
||
KEEP_FLOATING_IP=false
|
||
IDLE_MINUTES=30
|
||
IDLE_GRACE_MINUTES=45
|
||
# LOCAL_WATCHDOG_GRACE_MINUTES=10
|
||
PULL_OUTPUT=false
|
||
NOTIFY_READY=true
|
||
```
|
||
|
||
Flavor uuid в git не хардкодить. `FLAVOR_FALLBACK=false` — только `DEFAULT_FLAVOR_ID` / `--flavor`.
|
||
|
||
Application credential для idle-killer CLI создаёт на `up` (узко: DELETE/GET **этого** server) и отзывает на `stop`. В `.env` ноутбука дублировать не нужно.
|
||
|
||
Пути локальных папок по умолчанию: `Models/`, `Wildcards/`, `CustomWorkflows/`, `Output/` в корне репо.
|
||
|
||
Полный шаблон: [`env.example`](../env.example).
|
||
|
||
---
|
||
|
||
## State
|
||
|
||
`<repo>/.gpu-rent/state.json` — ids, фаза, timestamps (окно preempt 24 ч). Без паролей. Lockfile рядом — два `up` не создадут два сервера.
|
||
|
||
---
|
||
|
||
## Ожидание готовности
|
||
|
||
Ориентир: **~20–40 мин** первый bootstrap, **~5–10 мин** unshelve.
|
||
|
||
Порядок готовности:
|
||
|
||
1. Nova `ACTIVE`
|
||
2. TCP 22 / SSH
|
||
3. HTTP `http://127.0.0.1:7801` **на VM** (через SSH)
|
||
4. Backend Idle → toast (если `NOTIFY_READY`) + access-card
|
||
|
||
Локальный порт UI: **17801** (на VM по-прежнему 7801 на loopback).
|
||
|
||
---
|
||
|
||
## Windows / notify
|
||
|
||
`NOTIFY_READY`: toast + системный звук, когда backend Idle. Если toast недоступен — только звук и лог, без падения CLI.
|