Enhance LLM and SwarmUI integration with improved configuration options
- Updated `env.example` and `gpu-rent.vars.example` to include new variables for LLM runtime and SwarmUI options. - Refactored CLI commands to support interactive selection of LLM runtime and workload type (SwarmUI, LLM, or both). - Improved access link generation to handle cases where SwarmUI is disabled, providing clearer user feedback. - Enhanced provisioning logic to conditionally bootstrap SwarmUI based on user configuration, allowing for LLM-only setups. - Updated documentation across multiple files to reflect changes in LLM integration, CLI usage, and configuration management.
This commit is contained in:
+59
-54
@@ -1,37 +1,52 @@
|
||||
# LLM рядом со SwarmUI (opt-in)
|
||||
|
||||
По умолчанию поднимается **только SwarmUI**. Ollama или llama.cpp — отдельно, когда нужны (помощь с промптами и т.п.).
|
||||
По умолчанию поднимается **только 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
|
||||
### A — wizard
|
||||
|
||||
```text
|
||||
gpu-rent setup
|
||||
```
|
||||
|
||||
Выбери `ollama` или `llamacpp`. Для **обоих** спросит пресет моделей. Значение пишется в `gpu-rent.vars` (`LLM_RUNTIME=…`).
|
||||
Меню: runtime → пресет моделей → опционально local-watchdog. Пишет `LLM_RUNTIME` в `gpu-rent.vars`.
|
||||
|
||||
### Вариант B — флаг на `up`
|
||||
### B — флаг на `up`
|
||||
|
||||
```text
|
||||
gpu-rent up --yes --ollama
|
||||
gpu-rent up --yes --llm llamacpp
|
||||
gpu-rent up --yes --llm-only --llamacpp # без SwarmUI
|
||||
```
|
||||
|
||||
### Вариант C — вручную в vars
|
||||
С `--yes` пресеты не спрашивает (берёт существующий yaml / example).
|
||||
|
||||
### C — vars вручную
|
||||
|
||||
```env
|
||||
LLM_RUNTIME=ollama
|
||||
```
|
||||
|
||||
Потом обычный `gpu-rent up --yes`.
|
||||
Потом `gpu-rent up --yes`.
|
||||
|
||||
Чтобы **выключить** LLM на следующих сессиях: `LLM_RUNTIME=none` (на `up` старые unit’ы `gpu-rent-ollama` / `gpu-rent-llamacpp` останавливаются).
|
||||
Выключить: `LLM_RUNTIME=none` (на `up` старые unit’ы `gpu-rent-ollama` / `gpu-rent-llamacpp` останавливаются).
|
||||
|
||||
Голый `gpu-rent` без args — help, не `up`. Двойной клик: `GPU_RENT_DEFAULT_ARGS=up --yes` в `gpu-rent.vars`. Полный doctor на up: `up -v`.
|
||||
Голый `gpu-rent` без args — **help**. Двойной клик: `GPU_RENT_DEFAULT_ARGS=up --yes`. Полный doctor на up: `up -v`.
|
||||
|
||||
---
|
||||
|
||||
@@ -48,105 +63,95 @@ gpu-rent tunnel
|
||||
gpu-rent open --llm
|
||||
```
|
||||
|
||||
Клиент Ollama:
|
||||
|
||||
```text
|
||||
# Windows PowerShell
|
||||
```powershell
|
||||
$env:OLLAMA_HOST = "http://127.0.0.1:17811"
|
||||
```
|
||||
|
||||
После успешного `up`/`tunnel` CLI печатает access-card со всеми URL и MCP-сниппетом.
|
||||
После `up`/`tunnel` — access-card с URL и MCP-сниппетом.
|
||||
|
||||
---
|
||||
|
||||
## Ollama: модели
|
||||
## Ollama
|
||||
|
||||
| Файл | Роль |
|
||||
| --- | --- |
|
||||
| `ollama-models.example.yaml` | шаблон в git |
|
||||
| `ollama-models.yaml` | твой список (gitignore) |
|
||||
| `ollama-models.yaml` | список тегов (gitignore); лаунчер копирует example при отсутствии |
|
||||
|
||||
На `up` при `LLM_RUNTIME=ollama` CLI делает `ollama pull` по списку. Уже скачанные теги **точно** не трогает (`foo:3b` ≠ `foo:7b`). Лишние модели на диске не удаляет.
|
||||
На `up` — `ollama pull` по списку. Точные теги: уже есть `foo:7b` ≠ skip для `foo:3b`. Лишнее на диске не удаляет.
|
||||
|
||||
### Пресеты `setup`
|
||||
### Пресеты (меню)
|
||||
|
||||
| preset | tag | зачем |
|
||||
| # | ключ | tag / смысл |
|
||||
| --- | --- | --- |
|
||||
| **recommended** | `huihui_ai/qwen2.5-abliterate:7b` | RU/EN, ~5 GB, меньше отказов |
|
||||
| light | `qwen2.5:3b` | быстрее, слабее |
|
||||
| stock | `qwen2.5:7b` | официальный |
|
||||
| alt | `richardyoung/qwen2.5-7b-instruct-abliterated` | другой abliterate |
|
||||
| empty | `[]` | только runtime, pull руками |
|
||||
| 1 | **recommended** | `huihui_ai/qwen2.5-abliterate:7b` — RU/EN, ~5 GB |
|
||||
| 2 | light | `qwen2.5:3b` |
|
||||
| 3 | stock | `qwen2.5:7b` |
|
||||
| 4 | alt | другой abliterate 7B |
|
||||
| 5 | empty | только runtime |
|
||||
| — | keep | не трогать yaml (если уже спросили повторно) |
|
||||
|
||||
Community abliterate-модели без гарантий безопасности — для личного prompt-help рядом со SwarmUI.
|
||||
|
||||
Поле `default: true` в yaml — preferred модель (лог / подсказка); pull идёт по всему списку.
|
||||
`default: true` в yaml — preferred в логе; pull идёт по всему списку.
|
||||
|
||||
---
|
||||
|
||||
## Автотюнинг Ollama под GPU
|
||||
## Автотюнинг Ollama
|
||||
|
||||
На установке `gpu-rent-ollama` читает `/mnt/swarm_data/.gpu-rent-gpu.json` и пишет env в systemd unit (одна карта вместе со SwarmUI):
|
||||
Unit `gpu-rent-ollama` читает `/mnt/swarm_data/.gpu-rent-gpu.json`:
|
||||
|
||||
| Tier (VRAM) | Flash Attn | KEEP_ALIVE | KV cache | GPU_OVERHEAD (запас под Swarm/Krea) |
|
||||
| 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`.
|
||||
|
||||
Файл: `/mnt/swarm_data/.gpu-rent-ollama.env` (пересоздаётся на каждом install Ollama).
|
||||
\*Flash на Ampere+ (compute ≥ 8.0). `NUM_PARALLEL=1`, `MAX_LOADED_MODELS=1`. Env: `/mnt/swarm_data/.gpu-rent-ollama.env`.
|
||||
|
||||
---
|
||||
|
||||
## llama.cpp
|
||||
|
||||
Манифест GGUF:
|
||||
|
||||
| Файл | Роль |
|
||||
| --- | --- |
|
||||
| `llamacpp-models.example.yaml` | шаблон в git |
|
||||
| `llamacpp-models.yaml` | URL на `.gguf` (gitignore) |
|
||||
| `llamacpp-models.example.yaml` | шаблон |
|
||||
| `llamacpp-models.yaml` | HTTPS URL на `.gguf` (gitignore) |
|
||||
|
||||
На interactive `up` / `setup` после выбора `llamacpp` спрашивается пресет (как у Ollama). На `up` CLI скачивает GGUF в `/mnt/swarm_data/llamacpp/models`, затем ставит `llama-server` + systemd.
|
||||
На `up`: скачать GGUF → `/mnt/swarm_data/llamacpp/models` → `llama-server` + systemd. Уже скачанные крупные файлы не трогает.
|
||||
|
||||
### Пресеты
|
||||
### Пресеты (меню)
|
||||
|
||||
| preset | что |
|
||||
| --- | --- |
|
||||
| **recommended** | Qwen2.5 7B abliterate Q4_K_M (~4.7 GB) |
|
||||
| light | Qwen2.5 3B Instruct Q4_K_M |
|
||||
| stock | официальный Qwen2.5 7B Instruct Q4_K_M |
|
||||
| empty | только runtime |
|
||||
| # | ключ | что |
|
||||
| --- | --- | --- |
|
||||
| 1 | **recommended** | Qwen2.5 7B abliterate Q4_K_M (~4.7 GB) |
|
||||
| 2 | light | Qwen2.5 3B Instruct Q4_K_M |
|
||||
| 3 | stock | официальный 7B Instruct Q4_K_M |
|
||||
| 4 | empty | только runtime |
|
||||
| — | keep | не трогать yaml |
|
||||
|
||||
Параметры `-ngl` / `-c` — по GPU probe. Опционально `HF_TOKEN` для gated HF. Вручную: положи GGUF в каталог models и `systemctl restart gpu-rent-llamacpp`.
|
||||
`-ngl` / `-c` — по GPU probe. Опционально `HF_TOKEN` для gated HF. Вручную: положи GGUF в models и `systemctl restart gpu-rent-llamacpp`.
|
||||
|
||||
---
|
||||
|
||||
## Idle-killer и LLM
|
||||
|
||||
Busy (не гасить GPU), если:
|
||||
Busy (не гасить GPU):
|
||||
|
||||
- идёт `ollama pull` (маркер младше ~45 мин; старше — сбрасывается);
|
||||
- в Ollama есть загруженная модель;
|
||||
- llama.cpp занимает слоты.
|
||||
- `ollama pull` (маркер младше ~45 мин; старше сбрасывается);
|
||||
- загруженная модель в Ollama;
|
||||
- llama.cpp: слоты заняты.
|
||||
|
||||
Ошибка установки LLM на `up` — **fail** (не тихий лог): почини или поставь `LLM_RUNTIME=none`.
|
||||
Ошибка установки LLM на `up` — **fail** (не тихий лог).
|
||||
|
||||
---
|
||||
|
||||
## Supply-chain (опциональный pin)
|
||||
|
||||
По умолчанию install-скрипты тянут upstream **без pin** (Ollama: `curl|sh`; llama.cpp: GitHub `latest`) — риск подмены. В логе будет `WARN`.
|
||||
|
||||
Жёстче — задай env на VM / при bootstrap:
|
||||
По умолчанию install тянет upstream без pin (`WARN` в логе). Жёстче:
|
||||
|
||||
```bash
|
||||
OLLAMA_VERSION=0.6.5
|
||||
OLLAMA_SHA256=<sha256 of ollama-linux-amd64.tgz>
|
||||
|
||||
LLAMACPP_TAG=b4690
|
||||
# или LLAMACPP_ASSET_URL=... + LLAMACPP_SHA256=...
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user