====== Strata + Qwen3.8-Flash-Next на сервере TrueNAS (Docker, Custom App) и подключение клиентов по IP ======
===== Введение =====
Инструкция описывает, как развернуть движок **Strata** с моделью **Qwen3.8-Flash-Next** на домашнем сервере **TrueNAS SCALE** в Docker — как приложение (Custom App) через веб-интерфейс TrueNAS — и подключаться к нему по сети с других компьютеров: из Goose Desktop, OpenCode, Open WebUI, Claude Code или любого OpenAI-совместимого клиента.
Локальная установка на Windows-ПК (проверенная пошагово, с замерами скорости и таблицей моделей) — на странице [[:truenas:application:strata_qwen_goose|Qwen3.8-Flash-Next на Strata + Goose Desktop (Windows)]].
**Без обновления TrueNAS:** на текущем драйвере 550 работает llama.cpp, который держит модель на NVMe и подгружает через RAM — см. [[:truenas:application:llamacpp_moe_ssd|llama.cpp: большие MoE-модели с NVMe + RAM на TrueNAS]].
**Статус инструкции.** Сервер обследован по SSH, совместимость образа Strata с текущим драйвером **проверена на сервере** (см. «Шаг 1»). Сама установка Custom App после обновления TrueNAS ещё не выполнялась — такие места помечены **(проверить)**.
===== Сервер =====
Данные сняты по SSH (''truenas_admin@192.168.1.135''):
^ Параметр ^ Значение ^
| Система | TrueNAS SCALE **25.04.2.6** (Fangtooth), ядро 6.12.15 |
| CPU | Intel Core i5-14500 (14 ядер / 20 потоков, AVX2, без AVX-512) |
| RAM | 62 GB |
| GPU | NVIDIA **RTX 2000 Ada Generation, 16 GB**, PCIe 4.0 x8 |
| Драйвер NVIDIA | **550.142** — для Strata **слишком старый** |
| Docker | 27.5, NVIDIA Container Runtime установлен (runtime по умолчанию — ''nvidia'') |
| Быстрый пул | ''appData'' — 2 × Samsung 990 PRO 4 TB (NVMe), свободно ~3.3 TB, монтируется в ''/mnt/appData'' |
| Большой пул | ''storage'' — 5 × HDD 16 TB, ''/mnt/storage'' |
| Занятые порты | среди прочих 8080 (ai-anki), 8081 (youtrack) — для Strata берём **30080** |
**Кто уже использует видеокарту и память** (на момент обследования):
* VRAM занято **11.8 из 16 GB**: Ollama, LibreTranslate, Whisper, XTTS / VoxCPM TTS.
* RAM: из 62 GB около 24 GB занимают приложения, ещё ~22 GB — кэш ZFS (ARC, отдаётся по требованию).
Strata нужна почти вся видеопамять и десятки GB RAM, поэтому на время работы Strata GPU-приложения нужно останавливать (см. «Шаг 3»).
===== Шаг 1: Обновить TrueNAS до 25.10.7 или новее (драйвер NVIDIA 580) =====
==== Почему ====
Образы Strata требуют драйвер NVIDIA: ''cuda13'' — **580+**, ''cuda12'' — **575+**. Проверка на этом сервере образом ''ghcr.io/niko1221/strata:0.2.13-cuda12'':
$ docker run --rm --gpus all ghcr.io/niko1221/strata:0.2.13-cuda12 strata components engine
this PC linux-x86_64, cuda (nvidia-smi)
installed 0.1.59 linux-x86_64-cuda /opt/strata/components/engine/0.1.59-linux-x86_64-cuda-cuda12
Your NVIDIA graphics driver (550.142) is too old for Strata. Install driver 575 or newer ...
На TrueNAS драйвер не обновляется отдельно — он приходит с версией системы:
^ Версия TrueNAS ^ Драйвер NVIDIA ^ Strata ^
| 25.04 Fangtooth (сейчас) | 550.142 | **не работает** |
| 25.10.0 – 25.10.6 Goldeye | 570.172.08 (open kernel modules) | не работает (нужно 575+) |
| **25.10.7 Goldeye и новее** | **580.173.02** (LTS-ветка) | работает образ ''cuda13'' |
Источники: release notes TrueNAS 25.10 (переход на open kernel modules с 570.172.08) и заметки к 25.10.7 (обновление на 580.173.02). RTX 2000 Ada (архитектура Ada) открытыми модулями поддерживается.
==== Как обновить ====
- **System → General Settings → Manage Configuration → Download File** — сохранить конфигурацию (с ключом шифрования).
- **System → Update**: в выпадающем списке **Train** выбрать **TrueNAS-SCALE-Goldeye** (сервер его уже видит), дождаться списка обновлений, убедиться, что предлагается **25.10.7 или новее**, нажать **Download / Apply**, перезагрузить.
- После перезагрузки проверить драйвер: **System → Shell** (или SSH):
nvidia-smi --query-gpu=name,driver_version --format=csv
Ожидается ''NVIDIA RTX 2000 Ada Generation, 580.x''.
- Проверить, что GPU-приложения (Ollama, Whisper, LibreTranslate и др.) запустились и видят карту. **(проверить после обновления)**
**Важно:** переход 25.04 → 25.10 — смена основной версии. Перед обновлением почитайте release notes 25.10 (раздел о breaking changes) и убедитесь, что есть резервная копия важных данных. Откат возможен выбором предыдущего boot environment (**System → Boot**).
===== Шаг 2: Выбор модели под этот сервер =====
Ресурсы сервера: 62 GB RAM + 16 GB VRAM = **78 GB**, но часть занята другими приложениями. Strata планирует память по **всему** объёму RAM сервера и не знает о других контейнерах, поэтому модель надо выбирать с запасом.
Столбец «Нужно RAM+VRAM» — оценка Strata (та же, что в таблице на странице Windows-ПК).
^ ''FAMILY'' / ''MODEL'' ^ Скачать ^ Нужно RAM+VRAM ^ На этом сервере ^
| ''gyro'' / ''Gyro-M'' | — | ~35 GB | да |
| ''qwen'' / ''Q2_0'' | 66 GB | ~38 GB | **да, рекомендуется для начала** |
| ''unsloth'' / ''UD-IQ1_M'' | 68 GB | ~39 GB | да |
| ''unsloth'' / ''UD-Q2_K_XL'' | 80 GB | ~51 GB | только если остановить другие тяжёлые приложения (Nextcloud, PhotoPrism, Jellyfin…) |
| ''unsloth'' / ''UD-IQ3_XXS'' | 84 GB | ~55 GB | то же, впритык |
| ''qwen'' / ''IQ3_XXS'', ''IQ3_S'' | 76 / 84 GB | ~76 / ~84 GB | **только в режиме «только Strata»** — см. ниже «Вариант: IQ3_S» |
| unsloth ''UD-Q4_K_XL'' и крупнее | 111+ GB | 82+ GB | нет — не хватит RAM |
| ''qwen36'' (Qwen3.6-35B-A3B) | меньше | меньше | да; меньшая модель, умеет несколько запросов одновременно — **(проверить размер ''--plan'')** |
Скорость здесь будет **ниже**, чем на ПК с RTX 4080: у RTX 2000 Ada примерно в 3 раза меньше пропускная способность видеопамяти и шина PCIe x8. Замеров нет. **(проверить)**
==== Вариант: IQ3_S в режиме «только Strata» ====
Если на время работы Strata остановить все остальные приложения, сервер по памяти почти равен Windows-ПК, на котором IQ3_S проверен (64 GB RAM + 16 GB VRAM, реально занято ~50 GB RAM + 15.7 GB VRAM, ~21.5 ток/с на RTX 4080). На сервере 62 GB RAM — запас меньше, а генерация будет медленнее (видеопамять RTX 2000 Ada примерно в 3 раза медленнее, чем у RTX 4080). **(проверить на сервере)**
Что нужно:
- **Остановить приложения** (Apps → Installed → Stop): все GPU-приложения (''ollama'', ''whisper'', ''libretranslate'', ''xtts'', ''voxcpmtts'') и тяжёлые по памяти (''nextcloud'', ''photoprism'', ''jellyfin'', ''open-webui'', ''anki'', ''pdf-ocr'', ''youtrack''…). Проверка свободной памяти: ''free -g'' — в ''available'' должно быть 55+ GB.
- **Ограничить кэш ZFS (ARC).** По умолчанию он может занять почти всю RAM и отдаёт её постепенно, а Strata при загрузке сразу закрепляет десятки GB. **System → Advanced Settings → Init/Shutdown Scripts → Add**:
* Type: **Command**
* Command: ''echo 8589934592 > /sys/module/zfs/parameters/zfs_arc_max'' (8 GB)
* When: **Post Init**
* Сохранить и, чтобы применить сразу, выполнить ту же команду в **System → Shell** под root (''sudo -i''). Проверка: ''awk '/^size/ {print $3/2^30 " GB"}' /proc/spl/kstat/zfs/arcstats''. **(проверить)**
* Минус: меньше кэша для файлов на дисках — сетевые шары и приложения могут работать чуть медленнее.
- В YAML («Шаг 6») поставить ''MODEL: IQ3_S'' (скачивание ~85 GB) и **''restart: "no"''** — чтобы после перезагрузки сервера Strata не стартовала автоматически рядом с остальными приложениями и не вызвала нехватку памяти.
Порядок работы: остановить приложения → **Start** у ''strata'' → дождаться ''healthy'' → работать → **Stop** у ''strata'' → запустить приложения обратно.
Если при загрузке контейнер падает или в логах ошибки памяти — вернуться к ''Q2_0'' / ''UD-Q2_K_XL'' либо добавить RAM в сервер (i5-14500 поддерживает до 192 GB; с 128 GB IQ3_S работает рядом со всеми приложениями).
Посмотреть план без запуска (после обновления TrueNAS, образ скачается ~0.7 GB):
docker run --rm --gpus all ghcr.io/niko1221/strata:0.2.13-cuda13 strata launch --plan --family qwen --model q2_0 --vision off --no-tui
===== Шаг 3: Освободить видеокарту =====
На время работы Strata остановите приложения, которые держат видеопамять: **Apps → Installed → (приложение) → Stop**:
* ''ollama'' (держит загруженные модели в VRAM),
* ''whisper'', ''libretranslate'', ''xtts'', ''voxcpmtts''.
Проверка, что VRAM свободна:
nvidia-smi --query-gpu=memory.used,memory.total --format=csv
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
Если Strata нужна постоянно — у этих приложений стоит выключить автозапуск или перенести их на CPU.
===== Шаг 4: Датасет для данных Strata =====
Модель (десятки GB), подготовленные файлы, пресеты и API-ключ хранятся в ''/data'' контейнера. Кладём их на быстрый NVMe-пул:
**Datasets** → выбрать ''appData'' → **Add Dataset**:
* Name: ''strata''
* Dataset Preset: **Apps**
* Save.
Путь получится ''/mnt/appData/strata''. Нужно свободное место: размер модели + ~10 GB (для ''Q2_0'' — ~80 GB).
===== Шаг 5: API-ключ =====
Сервер будет доступен из сети, поэтому ключ обязателен (Strata без ключа в сеть не отдаёт). Сгенерировать (**System → Shell** или SSH):
openssl rand -hex 24
Сохраните ключ (например, в KeePass) — он нужен в YAML и на каждом клиенте. Ниже он обозначен ''<КЛЮЧ>''.
===== Шаг 6: Установка Custom App через веб-интерфейс =====
**Apps → Discover Apps →** (меню **⋮** справа вверху) **→ Install via YAML**. **(проверить название пункта в 25.10)**
* **Name:** ''strata''
* **Custom Config** — вставить YAML:
services:
strata:
image: ghcr.io/niko1221/strata:0.2.13-cuda13
container_name: strata
restart: unless-stopped
ports:
- "30080:8080"
environment:
FAMILY: qwen
MODEL: Q2_0
CONTEXT: 64k
VISION: "off"
TUNE: skip
API_KEY: "<КЛЮЧ>"
volumes:
- /mnt/appData/strata:/data
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
ulimits:
memlock:
soft: -1
hard: -1
shm_size: 2gb
stop_grace_period: 2m
* **Save** / **Install**.
Пояснения:
* ''image'' — версия закреплена (''0.2.13''); ''cuda13'' — для драйвера 580+. Список версий: ''ghcr.io/niko1221/strata'' на GitHub.
* ''ports: "30080:8080"'' — снаружи порт **30080** (8080 и 8081 на сервере заняты), внутри контейнера 8080. Порт открыт для всей сети — поэтому ключ.
* ''FAMILY'' / ''MODEL'' — модель из таблицы «Шаг 2»; ''CONTEXT'' — длина контекста (''32k'', ''64k'', ''128k''); больше контекст — больше памяти.
* ''volumes'' — всё скачанное и настройки живут в датасете, переживают обновление образа и пересоздание приложения.
* ''deploy … nvidia'' — доступ к GPU (так же настроены ваши ''whisper'' и ''libretranslate'').
* ''memlock'', ''shm_size'' — движок закрепляет в RAM десятки GB; **не ставьте лимит памяти** контейнеру.
* ''stop_grace_period: 2m'' — время на выгрузку модели при остановке.
* ''restart: unless-stopped'' — после перезагрузки сервера Strata стартует сама, если не была остановлена вручную.
Другие переменные (из документации Strata): ''PARALLEL'' (одновременных запросов 1–8), ''KV'' (''int8'' / ''q4_0'' — вдвое меньше памяти на контекст), ''TUNE=quick'' (один раз подобрать быстрые настройки), ''STRATA_SET'' (расширенные настройки движка), ''MODEL_PATH'' (свои GGUF-файлы, смонтированные в контейнер).
===== Шаг 7: Первый запуск =====
Первый старт скачивает модель (для ''Q2_0'' ~68 GB) — это долго. Ход загрузки: **Apps → Installed → strata → Logs** (или ''docker logs -f strata'' по SSH). Прерванная загрузка продолжается с места остановки.
Состояние: пока качается и загружается — ''starting'', когда модель загружена — ''healthy'' / **Running**.
Проверка на самом сервере:
curl -s http://127.0.0.1:30080/health
curl -s http://127.0.0.1:30080/v1/models -H "Authorization: Bearer <КЛЮЧ>"
===== Шаг 8: Проверка с другого компьютера =====
Windows (PowerShell):
curl.exe -s http://192.168.1.135:30080/v1/models -H "Authorization: Bearer <КЛЮЧ>"
Linux / macOS:
curl -s http://192.168.1.135:30080/v1/chat/completions \
-H "Authorization: Bearer <КЛЮЧ>" -H "Content-Type: application/json" \
-d '{"model":"<имя из /v1/models>","messages":[{"role":"user","content":"Привет, ответь одним словом"}],"max_tokens":200}'
* ''Connection refused'' / таймаут — приложение не запущено, неверный порт;
* ''401'' — неверный или не переданный ключ.
Имя модели берите **точно** из ответа ''/v1/models'' (для Q2_0 — вида ''qwen3.8-flash-next-q2_0'').
===== Шаг 9: Подключение клиентов =====
Общие параметры:
^ Параметр ^ Значение ^
| Тип API | OpenAI Compatible (Chat Completions) |
| Base URL | ''http://192.168.1.135:30080/v1'' |
| Полный путь Chat Completions | ''http://192.168.1.135:30080/v1/chat/completions'' |
| API Key | ''<КЛЮЧ>'' |
| Модель | имя из ''/v1/models'' |
| Anthropic-совместимый адрес | ''http://192.168.1.135:30080'' (без ''/v1'') |
==== Goose Desktop ====
Settings → Models → **Add Custom Provider**:
^ Поле ^ Значение ^
| Provider Type | **OpenAI Compatible** |
| Display Name | ''Strata Server'' |
| API URL | ''http://192.168.1.135:30080/v1/chat/completions'' |
| API Key | ''<КЛЮЧ>'' |
| Available Models | имя из ''/v1/models'' |
| Streaming | включить |
Или файлом ''%APPDATA%\Block\goose\config\custom_providers\custom_strata_server.json'' (Linux/macOS — ''~/.config/goose/custom_providers/''):
{
"name": "custom_strata_server",
"engine": "openai",
"display_name": "Strata Server",
"description": "Strata on TrueNAS 192.168.1.135:30080",
"api_key_env": "CUSTOM_STRATA_SERVER_API_KEY",
"base_url": "http://192.168.1.135:30080/v1/chat/completions",
"models": [
{ "name": "qwen3.8-flash-next-q2_0", "context_limit": 65536 }
],
"headers": null,
"timeout_seconds": 600,
"supports_streaming": true,
"requires_auth": true
}
Ключ — ввести в Settings → Models у провайдера //Strata Server// или задать переменной окружения ''CUSTOM_STRATA_SERVER_API_KEY'' **(проверить)**. Русский язык, ''.goosehints'' и MCP (Developer, Playwright) настраиваются на клиенте — как на [[:truenas:application:strata_qwen_goose|странице локальной установки]].
==== Open WebUI (уже стоит на этом же TrueNAS) ====
Admin Panel → Settings → Connections → OpenAI API → добавить:
* URL: ''http://192.168.1.135:30080/v1''
* Key: ''<КЛЮЧ>''
Модель Strata появится в списке рядом с моделями Ollama.
==== OpenCode ====
''~/.config/opencode/opencode.json'':
{
"$schema": "https://opencode.ai/config.json",
"model": "strata/qwen3.8-flash-next-q2_0",
"provider": {
"strata": {
"npm": "@ai-sdk/openai-compatible",
"name": "Strata (TrueNAS)",
"options": {
"baseURL": "http://192.168.1.135:30080/v1",
"apiKey": "<КЛЮЧ>"
},
"models": {
"qwen3.8-flash-next-q2_0": {
"name": "Qwen3.8-Flash-Next Q2_0",
"tool_call": true,
"reasoning": true,
"limit": { "context": 65536, "output": 16384 }
}
}
}
}
}
Готовый файл с ключом и именем модели можно получить на сервере: ''docker exec strata strata connect opencode'' (адрес в нём будет внутренний — замените на ''http://192.168.1.135:30080'').
==== Claude Code ====
export ANTHROPIC_BASE_URL=http://192.168.1.135:30080
export ANTHROPIC_AUTH_TOKEN=<КЛЮЧ>
claude
==== Python (openai SDK) ====
from openai import OpenAI
client = OpenAI(base_url="http://192.168.1.135:30080/v1", api_key="<КЛЮЧ>")
r = client.chat.completions.create(
model="qwen3.8-flash-next-q2_0",
messages=[{"role": "user", "content": "Привет! Кратко: чем list отличается от tuple?"}],
)
print(r.choices[0].message.content)
===== Управление =====
^ Действие ^ Как ^
| Остановить / запустить | **Apps → Installed → strata → Stop / Start** (остановка корректно выгружает модель и освобождает VRAM) |
| Логи | **Apps → strata → Logs** или ''docker logs -f strata'' |
| Монитор (скорость, память, запросы) | ''docker exec -it strata strata monitor'' (выход — ''q'', сервер продолжает работать) |
| Показать ключ | ''docker exec strata strata launch --show-key --preset docker'' |
| Сменить модель | **Apps → strata → Edit** → поменять ''MODEL'' / ''FAMILY'' → Save. Новая модель скачается, старая останется в ''/mnt/appData/strata'' |
| Обновить Strata | **Edit** → поменять версию в ''image'' (например ''0.2.14-cuda13'') → Save. Модели и настройки сохраняются. ''strata update'' внутри контейнера не используется |
| Удалить старые модели | ''/mnt/appData/strata/Strata-data/models/'' и ''packs/'' |
===== Безопасность =====
* Порт 30080 доступен из всей домашней сети — поэтому ключ обязателен. **Не пробрасывайте 30080 на роутере в интернет.**
* Нужен доступ извне — через VPN (Tailscale/WireGuard) или через ''nginx-proxy-manager'' (уже стоит на сервере) с HTTPS и ограничением доступа.
* Контейнер Strata работает от ''root'' (нужно для GPU и закрепления памяти) — не монтируйте в него лишние папки.
===== Проблемы и решения =====
==== «Your NVIDIA graphics driver (550.142) is too old for Strata» ====
Драйвер ниже 575/580. Решение — «Шаг 1» (TrueNAS 25.10.7+). Образ ''cuda12'' не поможет: ему нужен 575+.
==== CUDA out of memory / модель не помещается ====
Видеокарту держат другие приложения — «Шаг 3». Либо выберите модель меньше, ''CONTEXT: 32k'' или ''KV: q4_0''.
==== Контейнер убит, сервер тормозит ====
Не хватает RAM: остановите другие тяжёлые приложения, возьмите модель меньше. У контейнера не должно быть лимита памяти.
==== Порт занят ====
Выберите другой внешний порт в ''ports'' (например ''"30081:8080"'') и поменяйте адрес у клиентов.
==== Не скачивается модель ====
Смотрите **Logs**: прогресс выводится каждые несколько секунд. Нужно свободное место в ''/mnt/appData/strata'' (размер модели + ~10 GB).
===== Приложение: обычный Linux-сервер (не TrueNAS) =====
На Ubuntu/Debian с драйвером NVIDIA 580+ и NVIDIA Container Toolkit — тот же YAML через ''docker compose up -d''. Без Docker — установщик Terminal:
curl -fsSL https://github.com/Niko1221/Strata/releases/latest/download/install.sh -o install.sh
less install.sh && sh install.sh
strata launch --family qwen --model q2_0 --vision off --access lan --port 8080 --no-tui --yes --save-preset "Server Q2_0"
strata launch --show-key --preset "Server Q2_0"
''--access lan'' открывает доступ из сети и включает API-ключ.
===== Шпаргалка =====
# сервер (SSH или System → Shell)
docker logs -f strata
docker exec -it strata strata monitor
docker exec strata strata launch --show-key --preset docker
nvidia-smi
# клиент
curl -s http://192.168.1.135:30080/v1/models -H "Authorization: Bearer <КЛЮЧ>"
^ Что ^ Значение ^
| Адрес API | ''http://192.168.1.135:30080/v1'' |
| Данные | ''/mnt/appData/strata'' |
| Образ | ''ghcr.io/niko1221/strata:0.2.13-cuda13'' (нужен TrueNAS 25.10.7+) |