Files
gpu-rent/docs/setup.md
T
Leonid Pershin 2ab32a8ab5 Refactor LLM configuration to remove llamacpp support
- Removed references to llamacpp from configuration files, scripts, and documentation, streamlining the LLM setup process to focus solely on Ollama.
- Updated environment variables and paths to eliminate llamacpp-related entries, ensuring clarity in the configuration.
- Adjusted CLI commands and help messages to reflect the removal of llamacpp, enhancing user experience and reducing confusion.
- Revised documentation to provide clear guidance on using Ollama exclusively, including updates to setup instructions and runtime options.
2026-08-21 08:51:36 +03:00

280 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Подготовка до первого `up`
Цель: зелёный `doctor` → первый `up --yes` → UI на `http://127.0.0.1:17801``stop`.
Панель Selectel: [my.selectel.ru](https://my.selectel.ru).
**Важно:** ключ панели **`X-Token` не подходит**. Нужен сервисный пользователь + пароль (OpenStack Keystone). CLI сам получает токен на ~24 ч; в `.env` токен хранить не надо.
---
## Карта шагов
| # | Что сделать | Готово, когда |
| --- | --- | --- |
| 1 | Python 3.11+ и лаунчер | `.\gpu-rent.ps1 --help` печатает help |
| 2 | Проект + квота GPU > 0 | в панели лимит GPU ≥ 1 |
| 3 | Сервисный пользователь + `.env` | заполнены `OS_*` и `GPU_RENT_AZ` |
| 4 | (Опц.) Civitai + `models.yaml` | токен в `.env`, манифест с `modelVersionId` |
| 5 | (Опц.) `extensions.yaml` / Git | публичные репы без токена |
| 6 | `doctor` | exit 0 |
| 7 | Первый `up --yes` | браузер / :17801 |
| 8 | `stop` | compute удалён, диски на месте |
SSH-ключ руками не нужен — CLI создаст `.gpu-rent/id_ed25519` при первом `up`.
---
## 1. Python и лаунчер
Нужен **Python 3.11+**. На Windows при установке включи «Add python.exe to PATH».
В корне репозитория:
```powershell
.\gpu-rent.ps1 --help
```
```bat
gpu-rent.bat --help
```
```bash
chmod +x gpu-rent.sh
./gpu-rent.sh --help
```
Лаунчер сам создаёт `.venv` и ставит пакет. Первый запуск копирует шаблоны **в корень репо**, если файлов нет:
- `env.example``.env`
- `models.example.yaml``models.yaml`
- `extensions.example.yaml``extensions.yaml`
- `ollama-models.example.yaml``ollama-models.yaml` (лаунчер / setup)
- `gpu-rent.vars.example``gpu-rent.vars`
Секреты только в `<repo>/.env` и runtime в `<repo>/.gpu-rent/` (оба в `.gitignore`).
Опционально wizard (после того как `.env` хотя бы частично заполнен):
```powershell
.\gpu-rent.ps1 setup
```
Спросит (нумерованные меню): LLM runtime → пресет моделей → local-watchdog. Можно пропустить и настроить позже (`LLM_RUNTIME` / `up`).
Для разработки / pytest:
```powershell
python -m venv .venv
.\.venv\Scripts\activate
python -m pip install -U pip
python -m pip install -e ".[dev]"
python -m gpu_rent --help
```
---
## 2. Selectel: проект и квота GPU
На новых аккаунтах лимит GPU часто **0**. Без поднятия лимита `up` не создаст сервер — это нормально, не баг CLI.
### 2.1. Проект
1. Панель → **IAM****Projects** (Проекты).
2. Отдельный проект, например `gpu-rent` (не общий «мусорный»).
3. Скопируй **ID проекта** (uuid) → это `OS_PROJECT_ID`.
4. **Номер аккаунта** (правый верхний угол) → это `OS_USER_DOMAIN_NAME`.
### 2.2. Есть ли GPU в квоте
1. **IAM****Projects** → твой проект → **Quotas and limits** / **Квоты****Cloud platform**.
2. Пул и сегмент с GPU: матрица [GPU availability](https://docs.selectel.ru/en/cloud-servers/create/gpus/). Часто смотрят мультизональный `ru-6` и `ru-7`.
3. Строка **GPU**. Если лимит 0 — тикет (ниже).
Лимит GPU поднимает **только поддержка**. Внутри уже выданного лимита квоту можно крутить в панели.
Подсказка по пулу после появления ключей: `.\gpu-rent.ps1 flavors` (скан `SCAN_POOLS`).
### 2.3. Тикет в поддержку
**Тикеты** в панели. Лимит увеличивают **на один конкретный проект**.
```text
Прошу увеличить лимит GPU в облачной платформе.
Проект: <имя> (ID: <uuid проекта>)
Пул / сегмент: ru-7 / ru-7a ← подставь свой из матрицы GPU
Нужно: 1× NVIDIA RTX 4090 24 GB (если нет — ближайший аналог: 4090 48 GB или A5000).
Цель: один прерываемый (preemptible) облачный сервер для персональных сессий, диски сетевые.
Сейчас квота/лимит GPU = 0, создать сервер с GPU нельзя.
```
Пока тикет открыт, можно уже заполнять `.env` и гонять `doctor` — он покажет «квота 0».
---
## 3. Ключи OpenStack
Нужен **сервисный пользователь** + пароль. Не используй: Профиль → Access → API Keys → `X-Token`.
### 3.1. Сервисный пользователь
Только владелец аккаунта или `iam.admin`. На балансе для роли `member` обычно нужно хотя бы **~100 ₽**.
1. **IAM****Service users** / **Сервисные пользователи****Add**.
2. Имя, например `gpu-rent-api`.
3. Пароль: **≥ 20 символов**, сохрани сразу — потом только сброс.
4. Scope: **Projects** → проект `gpu-rent` → роль **`member`** (`reader` для `up` мало).
5. **Add user**.
Официально: [Add user](https://docs.selectel.ru/en/access-control/manage/add-user/), [API auth](https://docs.selectel.ru/en/api/authorization/).
### 3.2. RC-файл
1. **IAM****Service users** → пользователь → **Access**.
2. **RC files**: проект `gpu-rent`, локация = **пул** (например `ru-7`, не сегмент `ru-7a`) → **Download**.
3. Из `rc.sh` перенеси в `.env`:
| Переменная | Откуда |
| --- | --- |
| `OS_AUTH_URL` | обычно `https://cloud.api.selcloud.ru/identity/v3` |
| `OS_USER_DOMAIN_NAME` | номер аккаунта |
| `OS_PROJECT_ID` | uuid проекта |
| `OS_USERNAME` | имя сервисного пользователя |
| `OS_PASSWORD` | пароль (в RC часто нет — допиши сам) |
| `OS_REGION_NAME` | пул, например `ru-7` |
| `GPU_RENT_AZ` | **сегмент**, например `ru-7a` (в RC может не быть) |
Официально: [Configure OpenStack CLI](https://docs.selectel.ru/en/cloud-servers/tools/openstack-cli/configure-openstack-cli/).
### 3.3. Заполнить `.env`
```powershell
copy env.example .env
notepad .env
```
Вставь значения из RC + пароль + `GPU_RENT_AZ`. **Не коммить** `.env`.
Проверка: `.\gpu-rent.ps1 doctor` (не обязательно ставить `openstack` CLI).
---
## 4. Civitai API token (модели)
Нужен, если хочешь seed по `models.yaml`. Без токена SwarmUI поставит свою дефолтную модель — это нормально.
1. Войди на [civitai.com](https://civitai.com) (тот же аккаунт, что для `.red`).
2. [Account settings](https://civitai.com/user/account) → **API Keys****Add**.
3. Токен показывают **один раз** → в `.env`: `CIVITAI_API_TOKEN=...`
4. Хост по умолчанию **`civitai.red`** (полный каталог). С `.com` NSFW часто 404.
5. На `up` токен уходит и в seed на VM, и в SwarmUI User Settings (Civitai API Key) — вручную в UI вводить не нужно.
5. Манифест:
```powershell
copy models.example.yaml models.yaml
```
В URL нужен **`modelVersionId=`**, не id карточки модели. Подробности: [models.md](models.md).
---
## 5. Git-токен (только приватные репы)
Публичные репы в `extensions.yaml` клонируются без токена.
Приватные: GitHub fine-grained PAT, **Contents: Read**`GIT_TOKEN` в `.env`.
Шаблон: `extensions.example.yaml``extensions.yaml`. Пустой файл = стоковый SwarmUI. См. [extensions.md](extensions.md).
---
## 6. Чеклист перед `doctor`
- [ ] Python 3.11+, лаунчер отвечает на `--help`
- [ ] Проект Selectel, uuid скопирован
- [ ] Лимит GPU ≥ 1 (или тикет в работе — тогда `doctor` честно скажет «0»)
- [ ] Сервисный пользователь `member`, пароль сохранён
- [ ] RC с того же **пула**, где GPU
- [ ] `.env`: `OS_*` + `GPU_RENT_AZ`, не `X-Token`
- [ ] (опц.) Civitai + `models.yaml`
- [ ] На балансе хватает на **диск ~100 GB 24/7**, даже когда GPU выключен
```powershell
.\gpu-rent.ps1 doctor
.\gpu-rent.ps1 flavors
.\gpu-rent.ps1 dry-run
```
| Результат | Что делать |
| --- | --- |
| exit 0 | можно `up` |
| exit 1 | читай отчёт: чаще всего квота GPU = 0 или неверный пароль / пул |
---
## 7. Первый `up`
Первый прогон долгий (образ, SwarmUI, Comfy, seed): ориентир **2040 минут**. Не закрывай терминал посередине bootstrap.
Без вопросов (CI / двойной клик):
```powershell
.\gpu-rent.ps1 up --yes
```
Интерактивно (меню LLM, пресет, **flavor / диск / preemptible**, confirm):
```powershell
.\gpu-rent.ps1 up
```
Что произойдёт:
1. Короткий doctor (полный — `up -v`).
2. Create/unshelve GPU + диски (после confirm).
3. Bootstrap SwarmUI, extensions, autocomplete, Civitai-seed, push локальных папок; optional LLM.
4. Туннель на `localhost:17801` (или LLM-порт), **проверка** что сервисы отвечают, access-card.
5. Процесс ждёт: **Ctrl+C** закрывает только туннель, GPU остаётся.
Полезные флаги:
| Флаг | Зачем |
| --- | --- |
| `--no-tunnel` | только облако; UI потом: `tunnel --open` |
| `--no-update` | не `git pull` SwarmUI/extensions |
| `--ollama` / `--llm ollama` | LLM рядом ([llm.md](llm.md)) |
| `--no-swarm` / `--llm-only` | только LLM, без SwarmUI (нужен runtime) |
| `--no-spot` | обычный (не preemptible) тариф |
| `--flavor ID` | явный flavor (пропускает меню flavor) |
Двойной клик без аргументов: в `gpu-rent.vars` задай `GPU_RENT_DEFAULT_ARGS=up --yes`. Сам `gpu-rent` без args показывает **help**, не поднимает GPU.
---
## 8. Закончить сессию
```powershell
.\gpu-rent.ps1 stop
```
Удаляет compute (+ FIP по умолчанию), **диски оставляет**. Модели на месте для следующего `up`.
| Команда | Эффект |
| --- | --- |
| `hold` / `hold --minutes 90` | отложить idle-killer |
| `status` | Nova, диск, killer, LLM |
| `destroy --i-understand-data-loss` | stop + удалить диски |
---
## Деньги и риски (кратко)
- **GPU** — пока жив compute.
- **Data-диск** — тарифицируется **всегда** после создания.
- Preemptible ~**24 ч** → `EXPIRED`; `tunnel` или `up` восстановят.
- Idle-killer: после льготы (~45 мин) + ~30 мин пустой очереди → delete compute.
- Цены в OpenStack API нет — смотри панель Selectel.
Дальше: чеклист живого прогона [spike-notes.md](spike-notes.md), справочник команд [cli.md](cli.md).