- Added a new configuration option `UP_STOP_ON_FAIL` to control whether the GPU should be stopped automatically if the `up` command fails, enhancing user control over resource management. - Updated the CLI to include a `--keep-on-fail` flag, allowing users to prevent GPU shutdown during installation errors. - Enhanced the installation scripts and documentation to reflect these changes, providing clearer guidance on the new behavior and configuration options. - Improved error handling in the CLI to ensure proper cleanup of resources in case of failure, preventing unexpected billing for unused GPU resources.
187 lines
6.9 KiB
Markdown
187 lines
6.9 KiB
Markdown
# LLM рядом со SwarmUI (opt-in)
|
||
|
||
По умолчанию поднимается **только SwarmUI**. Ollama или llama.cpp — отдельно (помощь с промптами и т.п.).
|
||
|
||
Интерактивные вопросы — **нумерованные меню** (Enter = вариант со ←). Ключ словом (`recommended`, `keep`) тоже принимается.
|
||
|
||
Три стека на GPU:
|
||
|
||
| # | стек | смысл |
|
||
| --- | --- | --- |
|
||
| 1 | SwarmUI | только генерация картинок |
|
||
| 2 | SwarmUI + LLM | UI + Ollama/llama.cpp на той же карте |
|
||
| 3 | только LLM | **без** SwarmUI — Ollama или llama.cpp |
|
||
|
||
Флаги: `up --yes --llm-only --llamacpp` / `--no-swarm --ollama`. Vars: `ENABLE_SWARMUI=false` или `WORKLOAD=llm`.
|
||
|
||
---
|
||
|
||
## Быстрый путь
|
||
|
||
### A — wizard
|
||
|
||
```text
|
||
gpu-rent setup
|
||
```
|
||
|
||
Меню: runtime → пресет моделей → опционально local-watchdog. Пишет `LLM_RUNTIME` в `gpu-rent.vars`.
|
||
|
||
### B — флаг на `up`
|
||
|
||
```text
|
||
gpu-rent up --yes --ollama
|
||
gpu-rent up --yes --llm llamacpp
|
||
gpu-rent up --yes --llm-only --llamacpp # без SwarmUI
|
||
```
|
||
|
||
С `--yes` пресеты не спрашивает (берёт существующий yaml / example).
|
||
|
||
### C — vars вручную
|
||
|
||
```env
|
||
LLM_RUNTIME=ollama
|
||
```
|
||
|
||
Потом `gpu-rent up --yes`.
|
||
|
||
Выключить: `LLM_RUNTIME=none` (на `up` старые unit’ы `gpu-rent-ollama` / `gpu-rent-llamacpp` останавливаются).
|
||
|
||
Голый `gpu-rent` без args — **help**. Двойной клик: `GPU_RENT_DEFAULT_ARGS=up --yes`. Полный doctor на up: `up -v`.
|
||
|
||
---
|
||
|
||
## Порты (loopback + туннель)
|
||
|
||
| Сервис | На VM | На ноутбуке |
|
||
| --- | --- | --- |
|
||
| SwarmUI | 7801 | **17801** |
|
||
| Ollama | 11434 | **17811** |
|
||
| llama.cpp | 8080 | **17812** |
|
||
|
||
```text
|
||
gpu-rent tunnel
|
||
gpu-rent open --llm
|
||
```
|
||
|
||
```powershell
|
||
$env:OLLAMA_HOST = "http://127.0.0.1:17811"
|
||
```
|
||
|
||
После `up`/`tunnel` — access-card с URL и MCP-сниппетом.
|
||
|
||
---
|
||
|
||
## Ollama
|
||
|
||
| Файл | Роль |
|
||
| --- | --- |
|
||
| `ollama-models.example.yaml` | шаблон в git |
|
||
| `ollama-models.yaml` | список тегов (gitignore); лаунчер копирует example при отсутствии |
|
||
|
||
На `up` — `ollama pull` по списку. Точные теги: уже есть `foo:7b` ≠ skip для `foo:3b`. Лишнее на диске не удаляет.
|
||
|
||
### Пресеты (меню)
|
||
|
||
| # | ключ | tag / смысл |
|
||
| --- | --- | --- |
|
||
| 1 | **recommended** | `huihui_ai/qwen2.5-vl-abliterated:7b` — vision+RU, ~6 GB |
|
||
| 2 | light | VL 3B abliterate (~3 GB) |
|
||
| 3 | text | text-only `qwen2.5-abliterate:7b` |
|
||
| 4 | stock | `qwen2.5:7b` |
|
||
| 5 | alt | другой text abliterate 7B |
|
||
| 6 | empty | только runtime |
|
||
| — | keep | не трогать yaml (если уже спросили повторно) |
|
||
|
||
`default: true` в yaml — preferred в логе; pull идёт по всему списку.
|
||
|
||
---
|
||
|
||
## Автотюнинг Ollama
|
||
|
||
Unit `gpu-rent-ollama` читает `/mnt/swarm_data/.gpu-rent-gpu.json`:
|
||
|
||
| Tier (VRAM) | Flash Attn | KEEP_ALIVE | KV cache | GPU_OVERHEAD |
|
||
| --- | --- | --- | --- | --- |
|
||
| low (<16 GiB) | off | 2m | q4_0 | 6 GiB |
|
||
| mid (16–23) | on* | 5m | q8_0 | 10 GiB |
|
||
| high (24–47) | on* | 15m | q8_0 | 14 GiB |
|
||
| ultra (≥48) | on* | 30m | q8_0 | 20 GiB |
|
||
|
||
\*Flash на Ampere+ (compute ≥ 8.0). `NUM_PARALLEL=1`, `MAX_LOADED_MODELS=1`. Env: `/mnt/swarm_data/.gpu-rent-ollama.env`.
|
||
|
||
---
|
||
|
||
## llama.cpp
|
||
|
||
| Файл | Роль |
|
||
| --- | --- |
|
||
| `llamacpp-models.example.yaml` | шаблон |
|
||
| `llamacpp-models.yaml` | HTTPS URL на `.gguf` (gitignore) |
|
||
|
||
На `up`: скачать GGUF → `/mnt/swarm_data/llamacpp/models` → `llama-server` + systemd. Уже скачанные крупные файлы не трогает.
|
||
|
||
**Бинарник:** в GitHub Releases **нет** Linux CUDA — только Windows CUDA + Ubuntu CPU/Vulkan. Драйвер/CUDA runtime на VM ≠ готовый `llama-server` с CUDA: его нужно **собрать** (`nvcc`) или взять Vulkan prebuilt.
|
||
|
||
Порядок по умолчанию (`LLAMACPP_BACKEND=auto`):
|
||
|
||
1. Если на VM уже есть `nvcc` (часто после прошлого `up`) → **CUDA-сборка** (тихо + heartbeat 5–15 мин).
|
||
2. Иначе → Ubuntu **Vulkan** prebuilt (~30 MB).
|
||
3. Fallback на другой путь при ошибке.
|
||
|
||
Был только Vulkan-stamp, а `nvcc` появился — следующий `up` сам пересоберёт CUDA.
|
||
|
||
| Var | Зачем |
|
||
| --- | --- |
|
||
| `LLAMACPP_BACKEND=auto\|cuda\|vulkan` | выбор пути (default auto) |
|
||
| `LLAMACPP_TAG` | pin release (`b10545`) |
|
||
| `LLAMACPP_ASSET_URL` + `LLAMACPP_SHA256` | свой архив |
|
||
| `LLAMACPP_BUILD_CUDA=1` | форс CUDA; `=0` — никогда не собирать |
|
||
| `LLAMACPP_FORCE_REINSTALL=1` | снести бинарь и поставить заново |
|
||
| `LLAMACPP_NGL` / `LLAMACPP_CTX` | override GPU layers / context |
|
||
| `LLAMACPP_HOST` / `LLAMACPP_PORT` | bind (default `127.0.0.1:8080`) |
|
||
| `LLAMACPP_EXTRA_ARGS` | доп. флаги `llama-server` |
|
||
| `OLLAMA_VERSION` / `OLLAMA_SHA256` | pin Ollama |
|
||
|
||
Готовые кейсы A–H — в `gpu-rent.vars.example`.
|
||
|
||
### Пресеты (меню)
|
||
|
||
| # | ключ | что |
|
||
| --- | --- | --- |
|
||
| 1 | **recommended** | Qwen2.5-VL 7B abliterate + mmproj (~4.7+0.8 GB, картинки+RU) |
|
||
| 2 | light | Qwen2.5 3B Instruct text Q4_K_M |
|
||
| 3 | text | Qwen2.5 7B abliterate text-only |
|
||
| 4 | stock | официальный 7B Instruct Q4_K_M |
|
||
| 5 | empty | только runtime |
|
||
| — | keep | не трогать yaml |
|
||
|
||
`-ngl` / `-c` — по GPU probe. Для recommended abliterate GGUF нужен **`HF_TOKEN`** в `.env` (иначе 401). Вручную: положи GGUF в models и `systemctl restart gpu-rent-llamacpp`.
|
||
|
||
---
|
||
|
||
## Idle-killer и LLM
|
||
|
||
Busy (не гасить GPU):
|
||
|
||
- `ollama pull` (маркер младше ~45 мин; старше сбрасывается);
|
||
- загруженная модель в Ollama;
|
||
- llama.cpp: слоты заняты.
|
||
|
||
Ошибка установки LLM на `up` — **fail** (не тихий лог).
|
||
|
||
---
|
||
|
||
## Supply-chain (опциональный pin)
|
||
|
||
По умолчанию install тянет upstream без pin (`WARN` в логе). Жёстче:
|
||
|
||
```bash
|
||
OLLAMA_VERSION=0.6.5
|
||
OLLAMA_SHA256=<sha256 of ollama-linux-amd64.tgz>
|
||
LLAMACPP_TAG=b10545
|
||
# или LLAMACPP_ASSET_URL=... + LLAMACPP_SHA256=...
|
||
# CUDA из исходников (медленно): LLAMACPP_BUILD_CUDA=1
|
||
# Переустановка бинаря: LLAMACPP_FORCE_REINSTALL=1
|
||
# VRAM: LLAMACPP_NGL=40 LLAMACPP_CTX=4096 LLAMACPP_EXTRA_ARGS=--flash-attn on
|
||
```
|