Local civitai-dataset launchers collect ~2000 prompt/params rows without images; search.jsonl is pushed on up for cheap example lookup. Co-authored-by: Cursor <cursoragent@cursor.com>
5.9 KiB
5.9 KiB
Roadmap
Код v1 (§1–6) готов (включая opt-in LLM, local-watchdog, access-card). Дальше — твой облачный прогон.
Пользовательский путь: setup.md → doctor → up. Чеклист живого GPU: spike-notes.md.
0.0 Квота GPU
- Квота GPU в панели ≥ 1 (иначе тикет — текст в setup §2.3)
- Тикет закрыт / не нужен
- Сервисный пользователь
member+.envзаполнен gpu-rent doctorexit 0
flavors / dry-run — по желанию перед первым up.
0. Ручной spike в панели
Заполняй spike-notes.md. В коде уже есть idle-killer, hold, snapshot, tunnel-watchdog — spike проверяет на живом GPU, не пишет заново.
- RC-файл,
doctorзелёный, квота > 0 flavors/ образ Driver 580 без Docker в пулеup --yes→ Idle backend + seed; время ACTIVE/SSH/Idletunnel→ UI :17801 + API;nvidia-smi- idle-killer timer +
hold; качалка UI → только hold - EXPIRED → tunnel unshelve или
up stop→ диски живы → второйup- Boot snapshot
gpu-rent-boot-ok→ следующий boot из него - ₽/час и ₽/мес диска из панели (в API нет)
Заметки — только в spike-notes.md, без секретов.
1. Каркас
pyproject.toml, пакетgpu_rent, MIT- config / state / Typer: doctor, dry-run, status, open, up, stop, destroy, ssh, logs, tunnel, hold, seed-*, push, pull-output, resize-data, flavors
- Windows:
gpu-rent.bat/gpu-rent.ps1; Unix:gpu-rent.sh; также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(ранжирование + выбор наup) doctor: Keystone, квота, flavor, диск, Civitai.red, манифесты- Тесты с моками / без облака
3. Сессия без туннеля
up/stop/status/ reconcile (compute+диски+SSH+bootstrap SwarmUI)status: диск used/free (SSH), TTL preempt 24 ч, killer/hold; ₽/час — «смотри панель»- Второй
upне создаёт второй GPU resize-dataвверх- Генерация
<repo>/.gpu-rent/id_ed25519+ keypair при первомup seed-modelsна живом диске (идемпотентно, SHA256)push/push-models:Models/,Wildcards/,CustomWorkflows/pull-outputиPULL_OUTPUTнаstop/ повторныйupseed-extensions+systemctl restart swarmuidestroyтолько с флагом
4. Bootstrap SwarmUI + idle-killer
- Идемпотентный first-boot, маркер FS (
/mnt/swarm_data/.gpu-rent-ready) - Bind-mounts data volume →
/opt/swarmui, systemdswarmui(auth SwarmUI ещё на spike) - Clone
extensions.yamlв Extensions / DLNodes до старта UI - Autocomplete: danbooru.csv + Settings.fds; на каждом up — GitHub sha
- Civitai seed по манифесту; без токена — дефолт SwarmUI
- systemd idle-killer + application credential; льгота
IDLE_GRACE_MINUTES=45; hold-файл; очередь/loading = busy; затемIDLE_MINUTES=30пустой очереди; вооружение после seed/start (качалка UI = hold) - Один 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 / Ctrl+D вызываютstop(диски остаются)gpu-rent open/tunnel --open- EXPIRED → unshelve + reconnect, пока туннель жив
- Сниппет MCP в stdout
6. UX
- Живой список flavors (
gpu-rent flavors/ dry-run / up),--no-spot, печать фоллбека - Оценка ₽ честно («смотри панель»), предупреждение про диск 24/7 и idle-killer
NOTIFY_READY: Windows toast + звук при backend Idle- Пользовательский README поверх
docs/ - Opt-in LLM +
setup; нумерованные меню; interactive Selectel plan (flavor/disk/spot) - Цветной CLI-лог;
captureссылок с VM - Local-watchdog; access-card
Уже в коде после v1
- Debug API на
127.0.0.1:17821(gpu-rent debug/ sidecar наup/tunnel); Assistent session / chat-eval civitai-dataset→datasets/civitai/search.jsonl→ FTS push наup/seed-personasseed-personas,capture wanted,logs --unit swarm|ollama|killer|cloud-init- Balance notify (
SELECTEL_API_TOKEN+ watchdog)
Spike в §0 по-прежнему нужно закрыть на живом GPU.
Вне скоупа v1
generateв CLI, S3 как источник моделей- Автоправка Cursor
mcp.json - Несколько GPU, публичный URL, Terraform как основной путь
- Tailscale (туннеля достаточно; к сети с телефона не подключались)