5.6 KiB
5.6 KiB
Roadmap
Код не начинать, пока не закрыты 0.0 (квота) и 0 (spike). Без GPU в квоте остальное — театр.
0.0 Квота GPU
Аккаунт есть, квота скорее 0.
- В панели: Облачные серверы → квоты / создание сервера с GPU
- Тикет в поддержку Selectel: 1× GPU (целевой: RTX 4090 24 GB или что дадут в пуле), проект gpu-rent
- Сервисный пользователь с правом только на этот проект
Пока квота 0, можно писать каркас CLI с dry-run и моками, но не считать этап 0 закрытым.
0. Ручной spike в панели
- RC-файл,
openstack token issue - Сегмент с GPU,
flavor list/image list(GPU Driver 580, без Docker) - Сеть + SG :22 + FIP + keypair
- Boot-from-volume, тег
preemptible, API 2.72, второй диск в том же AZ nvidia-smiна хосте; SwarmUI нативноlaunch-linux.sh- SwarmUI на 127.0.0.1:7801, туннель на 17801, UI + один вызов API
flavor list: какие 4090 / A5000 / A100 есть; disabled vs capacity- Скачать тестовую маленькую модель через Civitai API на VM (крошечный embedding) + sidecar json; убедиться, что установщик SwarmUI не качает свой SD
- Время: ACTIVE / SSH / UI / backend Idle / seed; ₽/час
- EXPIRED →
unshelve→ те же модели - Delete VM, диски живы → create from boot volume
- Snapshot boot после первого Idle → create from snapshot
- Прототип idle-killer: скрипт на VM с application credential удаляет этот сервер
- JSON «качалка модели в UI» vs пустая очередь (или нет сигнала → только
hold)
Заметки — docs/spike-notes.md, без секретов и личных имён файлов моделей.
1. Каркас
pyproject.toml, пакетgpu_rent, MIT- config / state / Typer по cli.md:
doctor/dry-run/status/openживые; остальные команды есть и честно говорят, что mutating ещё нет - Windows:
python -m gpu_rent - setup.md — квота, сервисный пользователь, RC, Civitai
2. OpenStack-клиент
- Token через openstacksdk (
authorize), inventory flavors/квота/volume type - Сеть find-or-create, SG, FIP, volumes, server, unshelve
- Preemptible tag 2.72, BDM boot+data,
delete_on_termination=false - Flavor fallback по
FLAVOR_PREFERENCE(ранжирование; create ещё нет) doctor: Keystone, квота, flavor, диск, Civitai.red, манифесты- Тесты с моками / без облака
3. Сессия без туннеля
up/stop/status/ reconcilestatus: диск used/free, ₽/час, TTL preempt 24 ч, killer/hold- Второй
upне создаёт второй GPU resize-dataвверх- Генерация
~/.gpu-rent/id_ed25519+ keypair при первомup seed-modelsна живом диске (идемпотентно, SHA256)push/push-models:Models/,Wildcards/,CustomWorkflows/pull-outputиPULL_OUTPUTнаstop/ повторныйupseed-extensions+ restart контейнераdestroyтолько с флагом
4. Bootstrap SwarmUI + idle-killer
- Идемпотентный first-boot, маркер FS
- Bind-mounts data volume →
/opt/swarmui, systemdswarmui, auth - Clone
extensions.yamlв Extensions / DLNodes до старта UI - Autocomplete: danbooru.csv + Settings.fds; на каждом up — GitHub sha
- Civitai seed по манифесту; без токена — дефолт SwarmUI
- systemd idle-killer + application credential; льгота 45 мин; hold-файл; качалка в UI = busy; затем 30 мин пустой очереди; не вооружать до конца seed
- Один snapshot
gpu-rent-boot-okпосле первого backend Idle; следующие create — из snapshot если есть gpu-rent hold/hold --clearпо SSHreadyпо HTTP, затем backend Idle
5. Туннель
gpu-rent tunnel→ 17801, Ctrl+C не делаетstopgpu-rent open/tunnel --open- EXPIRED → unshelve + reconnect, пока туннель жив
- Сниппет MCP в stdout
6. UX
- Живой список flavors,
--no-spot, печать фоллбека и цены - Оценка ₽, предупреждение про диск 24/7 и про idle-killer
NOTIFY_READY: Windows toast + звук при backend Idle- Пользовательский README поверх
docs/
Вне скоупа v1
generateв CLI, S3 как источник моделей- Автоправка Cursor
mcp.json - Несколько GPU, публичный URL, Terraform как основной путь
- Tailscale (туннеля достаточно; к сети с телефона не подключались)