10 KiB
Что сделать до первого gpu-rent up
Код не создаёт GPU, пока не пройден gpu-rent doctor. Сначала доступ в облако, квота GPU и ключи. Статический ключ панели X-Token для этого CLI не подходит — им нельзя управлять серверами и дисками.
Панель: my.selectel.ru.
1. Python
Нужен Python 3.11+. На Windows при установке включи «Add python.exe to PATH».
В корне репозитория:
python -m venv .venv
.\.venv\Scripts\activate
python -m pip install -U pip
python -m pip install -e .
Проверка:
python -m gpu_rent --help
gpu-rent --help
2. Selectel: проект и квота GPU
На новых аккаунтах лимит GPU почти всегда 0. Без тикета в поддержку up создать карту не сможет — это норма, не баг CLI.
2.1. Проект
- Панель → сверху IAM → Projects (Проекты).
- Отдельный проект, например
gpu-rent. Не клади GPU в общий «мусорный» проект. - Скопируй ID проекта (uuid). Он же
OS_PROJECT_ID. - Номер аккаунта — в правом верхнем углу панели. Он же
OS_USER_DOMAIN_NAME(domain в Keystone).
2.2. Есть ли GPU в квоте
- IAM → Projects → твой проект → вкладка Quotas and limits / Квоты и лимиты → Cloud platform.
- Выбери пул и сегмент, где есть GPU (матрица: GPU availability). Для Москвы часто смотрят
ru-7/ru-7a— проверь матрицу, GPU есть не везде. - Строка GPU (и при необходимости vCPU/RAM/network volumes). Если лимит 0 — дальше тикет.
Квоту внутри уже выданного лимита можно крутить в панели. Сам лимит GPU поднимает только поддержка.
2.3. Тикет в поддержку
Тикеты в панели (не email вслепую). Лимит увеличивают на один конкретный проект.
Текст можно почти копировать:
Прошу увеличить лимит GPU в облачной платформе.
Проект: <имя> (ID: <uuid проекта>)
Пул / сегмент: ru-7 / ru-7a ← подставь свой из матрицы GPU
Нужно: 1× NVIDIA RTX 4090 24 GB (если нет — ближайший аналог в этом сегменте: 4090 48 GB или A5000).
Цель: один прерываемый (preemptible) облачный сервер для персональных сессий генерации, диски сетевые.
Сейчас квота/лимит GPU = 0, создать сервер с GPU нельзя.
Пока тикет не закрыт, ставишь CLI и гоняешь doctor — он как раз покажет «квота 0, напишите в поддержку».
3. Ключи OpenStack (это и есть «API key» для gpu-rent)
Нужен сервисный пользователь + пароль. CLI сам получает IAM-токен на 24 часа (X-Auth-Token). В .env токен хранить не надо.
Не используй: Профиль → Access → API Keys → X-Token. Это статический ключ панели, OpenStack (серверы/диски/сети) он не двигает.
3.1. Сервисный пользователь
Только владелец аккаунта или роль iam.admin. На балансе для роли member должно быть хотя бы 100 ₽.
- Сверху IAM → Service users / Сервисные пользователи.
- Add service user.
- Имя, например
gpu-rent-api. - Пароль: минимум 20 символов, сохрани в менеджер паролей. После создания пароль больше не показывают — только сброс.
- Права:
- Scope: Projects (не весь аккаунт);
- проект
gpu-rent; - роль
member(создание серверов/дисков/сетей). Рольreaderдляupне хватит.
- Add user.
Официально: Add user, авторизация API.
3.2. Скачать RC-файл (готовые OS_*)
- IAM → Service users → твой пользователь → вкладка Access.
- Блок RC files:
- проект
gpu-rent; - локация = пул, например
ru-7(этоOS_REGION_NAME, не сегментru-7a); - Download.
- проект
- Открой файл (
rc.sh). Из него в.envпереносятся:
| Переменная | Откуда |
|---|---|
OS_AUTH_URL |
обычно https://cloud.api.selcloud.ru/identity/v3 |
OS_USER_DOMAIN_NAME |
номер аккаунта |
OS_PROJECT_DOMAIN_NAME |
тот же номер (можно не дублировать в нашем .env) |
OS_PROJECT_ID |
uuid проекта |
OS_USERNAME |
имя сервисного пользователя |
OS_PASSWORD |
пароль, который ты сохранил (в RC его часто нет — дописываешь сам) |
OS_REGION_NAME |
пул, ru-7 |
GPU_RENT_AZ |
сегмент пула, ru-7a — в RC его может не быть, смотри матрицу GPU |
Официально: Configure OpenStack CLI.
3.3. Куда класть
Создай каталог и файл вне git:
mkdir $env:USERPROFILE\.gpu-rent
copy env.example $env:USERPROFILE\.gpu-rent\.env
notepad $env:USERPROFILE\.gpu-rent\.env
Вставь значения из RC + пароль + GPU_RENT_AZ. Никогда не коммить .env.
Проверка без нашего CLI (необязательно):
# после pip install python-openstackclient, если хочешь
openstack token issue
openstack flavor list
Наш способ: gpu-rent doctor.
4. Civitai API token (модели)
Нужен, если хочешь seed с Civitai по models.yaml. Без токена SwarmUI поставит свою дефолтную модель — это допустимо.
- Войди на civitai.com (тот же аккаунт, что и для
.red). - Account settings → блок API Keys → Add API key.
- Имя, например
gpu-rent. Токен показывают один раз. - В
.env:CIVITAI_API_TOKEN=... - Хост API по умолчанию
civitai.red(полный каталог)..com— SFW-витрина, NSFW с неё часто 404. Один токен на оба домена.
Не клади токен в query-string в скриптах «на память» — в логах светится. CLI шлёт Authorization: Bearer … только на civitai.com / civitai.red / civitai.green, не на CDN.
Манифест (не в git со своими id, если не хочешь светить вкусы):
copy models.example.yaml $env:USERPROFILE\.gpu-rent\models.yaml
version_id: 0 — заглушка, doctor её игнорирует. Нужен modelVersionId из URL, не id карточки модели.
5. Git-токен (только приватные репы расширений)
Публичные GitHub-репы в extensions.yaml клонируются без токена.
Если репа приватная:
- GitHub → Settings → Developer settings → Personal access tokens.
- Fine-grained: доступ только к нужным репам, Contents: Read.
GIT_TOKENв.env.
Скопируй шаблон: extensions.example.yaml → ~\.gpu-rent\extensions.yaml. Пустой файл = стоковый SwarmUI.
6. SSH
Ключ не надо делать руками. CLI создаст ~\.gpu-rent\id_ed25519 без passphrase и зарегистрирует keypair в OpenStack при первом up. doctor только проверяет, что это получится.
7. Чеклист перед doctor
- Python 3.11+,
pip install -e . - Проект Selectel, скопирован uuid
- Тикет на лимит 1× GPU в нужном сегменте (или квота уже > 0)
- Сервисный пользователь
memberна этот проект, пароль сохранён - RC скачан на тот же пул, где GPU
~\.gpu-rent\.envзаполнен (OS_*+GPU_RENT_AZ)- Нет
X-Tokenвместо пароля сервисного пользователя - (опционально) Civitai token +
models.yaml - На балансе хватает на диск 100 GB даже когда GPU выключен
Дальше:
gpu-rent doctor
Exit 0 — облако отвечает, можно идти к spike / up, когда команда появится. Exit 1 — в отчёте причина (часто квота GPU = 0).
gpu-rent dry-run печатает план без создания сервера.