Align architecture/cli/decisions with modules and Debug API; cross-link seed overlays and scrape→FTS so user docs match 0.2.0. Co-authored-by: Cursor <cursoragent@cursor.com>
6.8 KiB
LLM рядом со SwarmUI (opt-in)
По умолчанию поднимается только SwarmUI. Ollama — отдельно (помощь с промптами, Assistent chat и т.п.). llama.cpp снят из продукта: LLM_RUNTIME только none | ollama (leftover unit gpu-rent-llamacpp на up стопается).
Интерактивные вопросы — нумерованные меню (Enter = вариант со ←). Ключ словом (recommended, keep) тоже принимается.
Три стека на GPU:
| # | стек | смысл |
|---|---|---|
| 1 | SwarmUI | только генерация картинок |
| 2 | SwarmUI + LLM | UI + Ollama на той же карте |
| 3 | только LLM | без SwarmUI — только Ollama |
Флаги: up --yes --llm-only --ollama / --no-swarm --ollama. Vars: ENABLE_SWARMUI=false или WORKLOAD=llm.
Быстрый путь
A — wizard
gpu-rent setup
Меню: runtime → пресет моделей → опционально local-watchdog. Пишет LLM_RUNTIME в gpu-rent.vars.
B — флаг на up
gpu-rent up --yes --ollama
gpu-rent up --yes --llm ollama
gpu-rent up --yes --llm-only --ollama # без SwarmUI
С --yes пресеты не спрашивает (берёт существующий yaml / example).
C — vars вручную
LLM_RUNTIME=ollama
Потом gpu-rent up --yes.
Выключить: LLM_RUNTIME=none (на up старые LLM unit’ы на VM останавливаются). Journal: gpu-rent logs -u ollama (алиас → systemd gpu-rent-ollama).
Голый gpu-rent без args — help. Двойной клик: GPU_RENT_DEFAULT_ARGS=up --yes. Полный doctor на up: up -v.
Порты (loopback + туннель)
| Сервис | На VM | На ноутбуке |
|---|---|---|
| SwarmUI | 7801 | 17801 |
| Ollama | 11434 | 17811 |
gpu-rent tunnel
gpu-rent open --llm
$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 по списку, сверка с /api/tags. Слой 100% без status=success не считается успехом (кэш ≠ модель в Assistent). Если тега всё ещё нет — warning, GPU не гасим. Лишнее на диске не удаляет.
После успешного тега — warmup: 1-token POST /api/chat, чтобы веса (~6 GB VL) легли в VRAM до первого сообщения в Assistent. То же при gpu-rent tunnel, если /api/ps пуст. Промах warmup — warning, GPU не гасим.
Qwen3-VL (huihui_ai/qwen3-vl-abliterated:…) требует Ollama ≥ 0.12.7. Тег :8b-instruct — чат Instruct; :latest у этой библиотеки — Thinking, не ставить дефолтом.
Пресеты (меню)
| # | ключ | tag / смысл |
|---|---|---|
| 1 | recommended | huihui_ai/qwen3-vl-abliterated:8b-instruct — RU + vision, ~6.1 GB; запасной huihui_ai/qwen2.5-vl-abliterated:7b |
| 2 | light | …:3b — то же, мало VRAM (~3 GB) |
| 3 | text | huihui_ai/qwen2.5-abliterate:7b — RU, без vision (~5 GB) |
| 4 | big | huihui_ai/qwen2.5-vl-abliterated:32b — RU + vision (~21 GB) |
| 5 | empty | только runtime |
| — | keep | не трогать yaml |
Рекомендуемый пресет — abliterated Qwen3-VL Instruct; light / text / big пока Qwen2.5. Официальные censored-теги (qwen2.5vl:…) в меню нет.
default: true в yaml — preferred в логе и в Assistent/ollama-roles.json → default_chat (Assistent UI + warmup); pull идёт по всему списку.
Автотюнинг Ollama
Unit gpu-rent-ollama читает /mnt/swarm_data/.gpu-rent-gpu.json:
| Tier (VRAM) | Flash Attn | KEEP_ALIVE | KV cache | GPU_OVERHEAD | CONTEXT |
|---|---|---|---|---|---|
| low (<16 GiB) | off | 2m | q4_0 | 6 GiB | 8k |
| mid (16–23) | on* | 5m | q8_0 | 10 GiB | 16k |
| high (24–47) | on* | 5m | q8_0 | 14 GiB | 16k |
| ultra (≥48) | on* | 30m | q8_0 | 20 GiB | 32k |
*Flash на Ampere+ (compute ≥ 8.0). NUM_PARALLEL=2, MAX_LOADED_MODELS=2 (chat VL + memory embed). Memory models use use: memory and a CPU Modelfile (num_gpu 0) so embed does not steal VRAM from the chat model. Ollama default num_ctx is 4096; we set OLLAMA_CONTEXT_LENGTH so Assistent + vision fits. Mid/high keep-alive is 5m because Assistent parks the chat model before Generate (AssistentParkLlm) and warms after. Env: /mnt/swarm_data/.gpu-rent-ollama.env.
Personas: laptop assistent-personas/ → on up / seed-personas overlay folders under /mnt/swarm_data/Assistent/personas/<id>/ (+ _base/assistant.json with default_persona / num_ctx). Shelves are short JSON files (not a long prompt). See extensions.md. Optional FTS examples: datasets/README (search.jsonl → Assistent/civitai-examples.jsonl). Journal: gpu-rent logs -u ollama.
ollama-models.yaml entries:
- name: huihui_ai/qwen3-vl-abliterated:8b-instruct
use: chat
default: true
- name: huihui_ai/qwen2.5-vl-abliterated:7b
use: chat
- name: nomic-embed-text
use: memory
Roles are written to /mnt/swarm_data/Assistent/ollama-roles.json for the Assistent extension (chat / memory lists + default_chat for UI default and warmup).
Idle-killer и LLM
Busy (не гасить GPU):
- очередь / loading SwarmUI (Generate) — даже если Ollama
/api/psпуст после ParkLlm; ollama pull(маркер младше ~3 ч; refresh во время pull);- загруженная модель в Ollama.
Ошибка установки LLM на up — fail (не тихий лог).
Supply-chain (опциональный pin)
По умолчанию install тянет upstream без pin (WARN в логе). Жёстче:
# Pin must be ≥ 0.12.7 if you use Qwen3-VL (see above)
OLLAMA_VERSION=0.12.7
OLLAMA_SHA256=<sha256 of ollama-linux-amd64.tgz>
Готовые кейсы — в gpu-rent.vars.example.