Bump version to 0.2.0 and enhance documentation

- Updated version number in pyproject.toml and __init__.py to 0.2.0.
- Revised README.md to reflect the current state of the project, including usage instructions and setup steps.
- Improved CLI documentation in cli.md, adding details about new commands and their functionalities.
- Enhanced the quick start section in README.md for better clarity on initial setup.
- Updated local folder documentation to clarify file handling and commands.
- Added a new command for listing GPU flavors and improved error handling in the CLI.
- Implemented a watchdog feature in the tunnel to manage server states effectively.
This commit is contained in:
Leonid Pershin
2026-08-21 03:38:01 +03:00
parent 343f741baa
commit a563ae06c4
30 changed files with 1750 additions and 132 deletions
+66 -42
View File
@@ -1,59 +1,83 @@
# gpu-rent
Локальный CLI: прерываемый GPU в [Selectel](https://selectel.ru), SwarmUI через туннель на `localhost:17801`. Модели живут на сетевых дисках.
Прерываемый GPU в [Selectel](https://selectel.ru) + SwarmUI на `http://127.0.0.1:17801`.
Модели и ComfyUI живут на сетевом диске — платишь за GPU только пока он поднят.
**Сначала ключи и квота не `up`.** Пошагово: [`docs/setup.md`](docs/setup.md).
**Сначала ключи и квота GPU, не `up`.** [`docs/setup.md`](docs/setup.md)
Спецификация: [`docs/`](docs/README.md). Решения: [`docs/decisions.md`](docs/decisions.md).
---
## Что уже можно запустить
Windows (cmd или двойной клик): `gpu-rent.bat`
PowerShell: `.\gpu-rent.ps1`
Linux / macOS / Git Bash: `./gpu-rent.sh`
Скрипты сами создают `.venv`, ставят пакет и прокидывают аргументы. Активировать окружение не нужно.
## Быстрый старт
```powershell
.\gpu-rent.ps1 doctor
.\gpu-rent.ps1 dry-run
.\gpu-rent.ps1 status
# если doctor зелёный и квота GPU > 0:
.\gpu-rent.ps1 up --yes
.\gpu-rent.ps1 tunnel
.\gpu-rent.ps1 stop
.\gpu-rent.ps1 doctor # preflight
.\gpu-rent.ps1 flavors # что выберет фоллбек
.\gpu-rent.ps1 dry-run # план без create
.\gpu-rent.ps1 up --yes # GPU + SwarmUI + seed
.\gpu-rent.ps1 tunnel # UI на :17801 (Ctrl+C ≠ stop)
.\gpu-rent.ps1 hold # отложить idle-killer
.\gpu-rent.ps1 stop # гасить compute, диски оставить
```
```bash
chmod +x gpu-rent.sh # один раз на Unix
./gpu-rent.sh doctor
```
Unix: `./gpu-rent.sh …` (один раз `chmod +x gpu-rent.sh`).
Ключи: скопируй `env.example` в `.env` в корне репо (скрипт сделает это сам при первом запуске) и заполни `OS_*` по [`docs/setup.md`](docs/setup.md).
Лаунчер сам создаёт `.venv` и ставит пакет. Конфиг — **в корне репо**:
`up` поднимает compute и ставит SwarmUI нативно (`launch-linux.sh` + systemd). `tunnel` пробрасывает `localhost:17801`. `stop` гасит GPU, диски оставляет.
| Файл | Что |
| --- | --- |
| `.env` | из `env.example``OS_*`, Civitai |
| `models.yaml` | из `models.example.yaml` — seed с Civitai |
| `extensions.yaml` | из `extensions.example.yaml` |
| `.gpu-rent/` | state, SSH-ключ (gitignore) |
## Зачем какие ключи
---
| Что | Зачем | Как получить |
| --- | --- | --- |
| Сервисный пользователь Selectel + пароль | OpenStack: VM, диски, сеть. IAM-токен на 24 ч CLI берёт сам | IAM → Service users. **Не** X-Token из профиля |
| `OS_PROJECT_ID`, номер аккаунта, пул, AZ | Scope токена и куда ставить GPU | RC-файл с вкладки Access + матрица GPU |
| Тикет в поддержку | Лимит GPU часто 0 | Текст в docs/setup.md |
| Civitai API token | Seed моделей | [civitai.com/user/account](https://civitai.com/user/account) → API Keys |
| GitHub PAT | Только приватные репы в `extensions.yaml` | Fine-grained, Contents: Read |
## Команды
Статический `X-Token` панели **не умеет** создавать облачные серверы.
| Команда | Смысл |
| --- | --- |
| `doctor` | Keystone, квота GPU, flavor, Civitai, манифесты |
| `flavors` | Живой список по `FLAVOR_PREFERENCE` |
| `up` / `up --yes` / `up --no-spot` / `up --flavor ID` | Поднять GPU |
| `tunnel` / `tunnel --open` | SSH-проброс; watchdog на EXPIRED |
| `open` | Браузер на 17801 |
| `hold` / `hold --minutes 90` / `hold --clear` | Пауза idle-killer |
| `status` | Nova + диск + killer |
| `seed-models` / `seed-extensions` | Докачать на живой диск |
| `push` / `push-models` / `pull-output` | Локальные папки ↔ VM |
| `resize-data --gb 400` | Диск только вверх |
| `stop` / `destroy --i-understand-data-loss` | Стоп GPU / + диски |
## Продукт
---
- GPU по умолчанию preemptible; гасится `stop` или idle-killer на VM (`hold` откладывает killer).
- Первый диск: модели с Civitai по `models.yaml`, если задан API-токен; иначе дефолт SwarmUI.
- Локальные папки: непустые `Models/`, `Wildcards/`, `CustomWorkflows/` едут на `up`; `Output/` можно забрать (`PULL_OUTPUT`).
- Расширения: git-репы из `extensions.yaml` на первый bootstrap.
- Autocomplete: `Data/Autocompletions` + проверка новой версии csv на каждом `up`.
- `doctor` до create; фоллбек GPU flavor; toast когда UI готов; `open` на 17801.
- Локальный SwarmUI на порту 7801 не занимает.
- Прерывание хостером: `EXPIRED``unshelve`.
## Деньги и риски
Лицензия MIT. Секреты и веса в git не класть.
- **GPU** — пока жив compute (`up``stop` или idle-killer).
- **Диск data** — **24/7**, даже после `stop`.
- Цены в OpenStack API **нет** — смотри панель Selectel.
- Preemptible по умолчанию (~24 ч) → `EXPIRED`; `tunnel` сам unshelve, иначе `up`.
- Idle-killer: льгота после boot, потом N мин пустой очереди → delete. `hold` откладывает.
- `Ctrl+C` на tunnel **не** гасит GPU.
---
## Модели
1. Civitai-seed по `models.yaml` (нужен `CIVITAI_API_TOKEN`, хост `civitai.red`).
2. Локальные `Models/`, `Wildcards/`, `CustomWorkflows/` — непустые едут на каждый `up`.
Пример в репо уже с Krea 2 + LoRA — скопируй в `models.yaml`.
---
## Документация
| Док | Зачем |
| --- | --- |
| [docs/setup.md](docs/setup.md) | Ключи, квота, RC |
| [docs/spike-notes.md](docs/spike-notes.md) | Чеклист живого spike |
| [docs/cli.md](docs/cli.md) | Все команды и `.env` |
| [docs/decisions.md](docs/decisions.md) | Продуктовые решения |
| [docs/roadmap.md](docs/roadmap.md) | Что готово / что нет |
MIT. Секреты и веса в git не коммитить.