Здесь показаны различия между двумя версиями данной страницы.
| Следующая версия | Предыдущая версия | ||
|
truenas:application:strata_qwen_server [2026/11/12 17:25] werwolf Qwen3.8-Flash-Next на Strata: установка, кванты, Goose, сервер и клиенты по IP |
truenas:application:strata_qwen_server [2026/11/12 18:15] (текущий) werwolf llama.cpp: MoE-модели с NVMe + RAM на TrueNAS (Custom App) |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== Strata + Qwen3.8-Flash-Next на сервере и подключение клиентов по IP ====== | + | ====== Strata + Qwen3.8-Flash-Next на сервере TrueNAS (Docker, Custom App) и подключение клиентов по IP ====== |
| ===== Введение ===== | ===== Введение ===== | ||
| - | Инструкция описывает, как развернуть движок **Strata** с моделью **Qwen3.8-Flash-Next** на отдельном Linux-сервере с видеокартой и подключаться к нему по сети с других компьютеров: из Goose Desktop, OpenCode, Open WebUI, Claude Code или любого OpenAI-совместимого клиента. | + | Инструкция описывает, как развернуть движок **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)]]. Здесь используются те же команды Strata, но с доступом из сети. | + | Локальная установка на Windows-ПК (проверенная пошагово, с замерами скорости и таблицей моделей) — на странице [[:truenas:application:strata_qwen_goose|Qwen3.8-Flash-Next на Strata + Goose Desktop (Windows)]]. |
| - | **Статус инструкции.** Команды и ключи взяты из Strata 0.1.59 (''install.sh'', ''strata launch --help'', ''strata launch --plan''). Серверный сценарий целиком на реальном сервере ещё не прогонялся — места, требующие проверки, помечены **(проверить)**. | + | **Без обновления TrueNAS:** на текущем драйвере 550 работает llama.cpp, который держит модель на NVMe и подгружает через RAM — см. [[:truenas:application:llamacpp_moe_ssd|llama.cpp: большие MoE-модели с NVMe + RAM на TrueNAS]]. |
| - | ===== Схема ===== | + | **Статус инструкции.** Сервер обследован по SSH, совместимость образа Strata с текущим драйвером **проверена на сервере** (см. «Шаг 1»). Сама установка Custom App после обновления TrueNAS ещё не выполнялась — такие места помечены **(проверить)**. |
| - | <code> | + | ===== Сервер ===== |
| - | ┌──────────────────────────────┐ LAN ┌──────────────────────────┐ | + | |
| - | │ Linux-сервер + NVIDIA GPU │ http://IP:8080/v1 │ Клиентский ПК │ | + | |
| - | │ strata launch --access lan │ ◄────────────────────── │ Goose / OpenCode / │ | + | |
| - | │ API-ключ включён │ Authorization: Bearer │ Open WebUI / curl │ | + | |
| - | └──────────────────────────────┘ └──────────────────────────┘ | + | |
| - | </code> | + | |
| - | ===== Где запускать: TrueNAS или отдельная машина ===== | + | Данные сняты по SSH (''truenas_admin@192.168.1.135''): |
| - | Strata нужна видеокарта (NVIDIA RTX 20/30/40/50 или AMD), много RAM и быстрый диск. Варианты: | + | ^ Параметр ^ Значение ^ |
| + | | Система | 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** | | ||
| - | * **Отдельный Linux-сервер / ПК** (Ubuntu 22.04 / 24.04) — самый простой и рекомендуемый вариант. | + | **Кто уже использует видеокарту и память** (на момент обследования): |
| - | * **Виртуальная машина на TrueNAS SCALE** (Virtualization → VM с Ubuntu) с **пробросом GPU (PCI passthrough)** в ВМ. Внутри ВМ — всё как на обычном сервере. Нужна поддержка IOMMU (VT-d / AMD-Vi) и вторая видеокарта или встроенная графика для самого TrueNAS. **(проверить)** | + | |
| - | * **Не рекомендуется** ставить Strata прямо в хостовую систему TrueNAS SCALE: это appliance, системный раздел перезаписывается при обновлениях, а ставить туда пакеты не предусмотрено. | + | |
| - | Модели (84+ GB) лучше хранить на быстром SSD/NVMe; на HDD-пуле загрузка модели будет очень долгой. | + | * 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) ===== |
| - | | GPU | NVIDIA с 16 GB VRAM | 24 GB и больше — быстрее; несколько карт поддерживаются (''--gpu 0,1'') | | + | |
| - | | Драйвер | актуальный драйвер NVIDIA, ''nvidia-smi'' работает | для AMD — ROCm | | + | |
| - | | RAM | зависит от кванта, см. таблицу ниже | для IQ3_S — 64 GB | | + | |
| - | | Диск | размер модели + ~3 GB | SSD/NVMe | | + | |
| - | | ОС | Linux x86_64 | ARM64 — только NVIDIA DGX Spark | | + | |
| - | | Пакеты | ''curl'' или ''wget'', ''tar'', ''sha256sum'' | | | + | |
| - | ===== Шаг 1: Подготовка сервера ===== | + | ==== Почему ==== |
| - | Проверьте видеокарту и драйвер: | + | Образы Strata требуют драйвер NVIDIA: ''cuda13'' — **580+**, ''cuda12'' — **575+**. Проверка на этом сервере образом ''ghcr.io/niko1221/strata:0.2.13-cuda12'': |
| - | <code bash> | + | <code> |
| - | nvidia-smi | + | $ docker run --rm --gpus all ghcr.io/niko1221/strata:0.2.13-cuda12 strata components engine |
| - | free -g | + | this PC linux-x86_64, cuda (nvidia-smi) |
| - | df -h ~ | + | 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 ... | ||
| </code> | </code> | ||
| - | Если ''nvidia-smi'' не найден — установите драйвер (Ubuntu): | + | На TrueNAS драйвер не обновляется отдельно — он приходит с версией системы: |
| - | <code bash> | + | ^ Версия TrueNAS ^ Драйвер NVIDIA ^ Strata ^ |
| - | sudo ubuntu-drivers install | + | | 25.04 Fangtooth (сейчас) | 550.142 | **не работает** | |
| - | sudo reboot | + | | 25.10.0 – 25.10.6 Goldeye | 570.172.08 (open kernel modules) | не работает (нужно 575+) | |
| - | </code> | + | | **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) открытыми модулями поддерживается. |
| - | <code bash> | + | ==== Как обновить ==== |
| - | sudo adduser --disabled-password --gecos "" strata | + | |
| - | sudo usermod -aG video,render strata | + | |
| - | sudo -iu strata | + | |
| - | </code> | + | |
| - | ===== Шаг 2: Установка Strata ===== | + | - **System → General Settings → Manage Configuration → Download File** — сохранить конфигурацию (с ключом шифрования). |
| + | - **System → Update**: в выпадающем списке **Train** выбрать **TrueNAS-SCALE-Goldeye** (сервер его уже видит), дождаться списка обновлений, убедиться, что предлагается **25.10.7 или новее**, нажать **Download / Apply**, перезагрузить. | ||
| + | - После перезагрузки проверить драйвер: **System → Shell** (или SSH):<code bash> | ||
| + | nvidia-smi --query-gpu=name,driver_version --format=csv | ||
| + | </code>Ожидается ''NVIDIA RTX 2000 Ada Generation, 580.x''. | ||
| + | - Проверить, что GPU-приложения (Ollama, Whisper, LibreTranslate и др.) запустились и видят карту. **(проверить после обновления)** | ||
| - | От пользователя ''strata'': | + | **Важно:** переход 25.04 → 25.10 — смена основной версии. Перед обновлением почитайте release notes 25.10 (раздел о breaking changes) и убедитесь, что есть резервная копия важных данных. Откат возможен выбором предыдущего boot environment (**System → Boot**). |
| - | <code bash> | + | ===== Шаг 2: Выбор модели под этот сервер ===== |
| - | curl -fsSL https://github.com/Niko1221/Strata/releases/latest/download/install.sh -o install.sh | + | |
| - | less install.sh # прочитать, что делает скрипт | + | |
| - | sh install.sh | + | |
| - | </code> | + | |
| - | Что делает установщик: | + | Ресурсы сервера: 62 GB RAM + 16 GB VRAM = **78 GB**, но часть занята другими приложениями. Strata планирует память по **всему** объёму RAM сервера и не знает о других контейнерах, поэтому модель надо выбирать с запасом. |
| - | - скачивает Strata Terminal и сверяет SHA-256; | + | |
| - | - распаковывает в ''~/.local/share/strata/terminal/<версия>'' (без root, ничего вне домашней папки); | + | |
| - | - проверяет подпись релиза; | + | |
| - | - создаёт ссылку ''~/.local/bin/strata''. | + | |
| - | Если ''~/.local/bin'' нет в PATH: | + | Столбец «Нужно RAM+VRAM» — оценка Strata (та же, что в таблице на странице Windows-ПК). |
| - | <code bash> | + | ^ ''FAMILY'' / ''MODEL'' ^ Скачать ^ Нужно RAM+VRAM ^ На этом сервере ^ |
| - | echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc | + | | ''gyro'' / ''Gyro-M'' | — | ~35 GB | да | |
| - | source ~/.bashrc | + | | ''qwen'' / ''Q2_0'' | 66 GB | ~38 GB | **да, рекомендуется для начала** | |
| - | strata --version | + | | ''unsloth'' / ''UD-IQ1_M'' | 68 GB | ~39 GB | да | |
| - | </code> | + | | ''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'')** | | ||
| - | Хранить модели на другом диске (например, на NVMe-датасете): | + | Скорость здесь будет **ниже**, чем на ПК с RTX 4080: у RTX 2000 Ada примерно в 3 раза меньше пропускная способность видеопамяти и шина PCIe x8. Замеров нет. **(проверить)** |
| - | <code bash> | + | ==== Вариант: IQ3_S в режиме «только Strata» ==== |
| - | export STRATA_DATA_DIR=/mnt/fast/strata # до установки | + | |
| - | # или для уже установленной Strata — ключ запуска: | + | |
| - | strata launch ... --data-dir /mnt/fast/strata-models | + | |
| - | </code> | + | |
| - | ===== Шаг 3: Выбор типа квантования ===== | + | Если на время работы 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). **(проверить на сервере)** |
| - | Квант задаётся ключом ''--model'', семейство — ''--family''. Меньше бит → меньше памяти и быстрее, но ниже качество. | + | Что нужно: |
| + | - **Остановить приложения** (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 не стартовала автоматически рядом с остальными приложениями и не вызвала нехватку памяти. | ||
| - | ==== Официальные кванты Qwen3.8-Flash-Next (--family qwen, по умолчанию) ==== | + | Порядок работы: остановить приложения → **Start** у ''strata'' → дождаться ''healthy'' → работать → **Stop** у ''strata'' → запустить приложения обратно. |
| - | Цифры RAM — оценка установщика Strata для машины с 16 GB VRAM; при большей VRAM RAM нужно меньше. | + | Если при загрузке контейнер падает или в логах ошибки памяти — вернуться к ''Q2_0'' / ''UD-Q2_K_XL'' либо добавить RAM в сервер (i5-14500 поддерживает до 192 GB; с 128 GB IQ3_S работает рядом со всеми приложениями). |
| - | ^ ''--model'' ^ Тип ^ Скачивание ^ RAM (примерно) ^ Для чего ^ | + | Посмотреть план без запуска (после обновления TrueNAS, образ скачается ~0.7 GB): |
| - | | ''q2_0'' | 2 бита | 66 GB | ~34 GB | самый быстрый, качество ниже; сервер с 48 GB RAM | | + | |
| - | | ''iq2_xs'' | 2-битный i-quant | 68 GB | ~36 GB | чуть лучше качество, скорость близка к Q2_0 | | + | |
| - | | ''iq3_xxs'' | 3-битный i-quant | 76 GB | ~43 GB | компромисс качество/скорость | | + | |
| - | | ''iq3_s'' | 3.5-битный i-quant | 84 GB | ~50 GB | **рекомендуется**: лучшее качество среди официальных; 64 GB RAM | | + | |
| - | + | ||
| - | ==== Кванты Unsloth (--family unsloth) — для мощных серверов ==== | + | |
| - | + | ||
| - | ^ ''--model'' ^ Скачивание ^ Для чего ^ | + | |
| - | | ''ud-iq4_xs'' | 94 GB | 4 бита, 96+ GB RAM или несколько GPU | | + | |
| - | | ''ud-q4_k_xl'' | 111 GB | 4 бита K-quant | | + | |
| - | | ''ud-q5_k_xl'' | 158 GB | 5 бит, почти без потерь | | + | |
| - | | ''ud-q6_k_xl'' | 169 GB | 6 бит | | + | |
| - | | ''q8_0'' | 188 GB | 8 бит, практически полное качество | | + | |
| - | + | ||
| - | Для ''ud-iq4_xs'' / ''ud-q4_k_xl'' можно ограничить объём экспертов в RAM: ''--set resident_budget_gib=N'' **(проверить имя параметра; у установщика это ''--resident-budget-gib N'')**. | + | |
| - | + | ||
| - | ==== Другие семейства ==== | + | |
| - | + | ||
| - | * ''--family swift'' — Swift 1.5 (дообученная Qwen3.8-Flash-Next). | + | |
| - | * ''--family coder'' — вариант для кода. | + | |
| - | * ''--family qwen36'' — Qwen3.6-35B-A3B: компактнее, умеет картинки и **несколько запросов одновременно** (''--parallel N'') — удобно, если к серверу подключается несколько человек. | + | |
| - | * ''--family deepseek41'' — DeepSeek-V4.1-Flash: 1.75 / 2.00 / 2.25 bpw = 239 / 257 / 274 GB, только для больших серверов. | + | |
| - | + | ||
| - | ==== Как сравнить варианты, ничего не меняя ==== | + | |
| <code bash> | <code bash> | ||
| - | strata launch --model iq3_s --access lan --port 8080 --no-tui --plan | + | 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 |
| - | strata launch --model q2_0 --access lan --port 8080 --no-tui --plan | + | |
| - | strata launch --family unsloth --model ud-q4_k_xl --access lan --port 8080 --no-tui --plan | + | |
| </code> | </code> | ||
| - | Пример вывода: | + | ===== Шаг 3: Освободить видеокарту ===== |
| - | <code> | + | На время работы Strata остановите приложения, которые держат видеопамять: **Apps → Installed → (приложение) → Stop**: |
| - | Plan for 'IQ3_S 128K': | + | |
| - | model Qwen3.8-Flash-Next IQ3_S, 84 GB | + | |
| - | context 128K pictures off parallel fit to your card | + | |
| - | drafting DFlash2 (its drafter is downloaded first) | + | |
| - | tuning skip access My local network, port 8080 API key on | + | |
| - | Nothing was changed. | + | |
| - | </code> | + | |
| - | ===== Шаг 4: Запуск с доступом из локальной сети ===== | + | * ''ollama'' (держит загруженные модели в VRAM), |
| + | * ''whisper'', ''libretranslate'', ''xtts'', ''voxcpmtts''. | ||
| + | |||
| + | Проверка, что VRAM свободна: | ||
| <code bash> | <code bash> | ||
| - | strata launch --model iq3_s --context 128k --vision off --tune quick \ | + | nvidia-smi --query-gpu=memory.used,memory.total --format=csv |
| - | --access lan --port 8080 --no-tui --yes --save-preset "Server IQ3_S" | + | nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv |
| </code> | </code> | ||
| - | Ключи, отличающиеся от локальной установки: | + | Если Strata нужна постоянно — у этих приложений стоит выключить автозапуск или перенести их на CPU. |
| - | * ''--access lan'' — слушать сетевой интерфейс, доступ из локальной сети. **API-ключ включается автоматически.** | + | |
| - | * ''--port 8080'' — на сервере порт обычно свободен; при конфликте выберите другой. | + | |
| - | * ''--tune quick'' — при первом запуске подобрать самые быстрые настройки под это железо (результат сохраняется). | + | |
| - | * ''--parallel N'' — сколько запросов обрабатывать одновременно (1–8). **Внимание:** с drafter DFlash2 Strata принудительно ставит 1 запрос. Если к серверу подключается несколько человек одновременно — добавьте ''--drafting mtp'' (MTP поддерживает параллельность) и ''--parallel 2..4''. | + | |
| - | Другие режимы доступа: | + | ===== Шаг 4: Датасет для данных Strata ===== |
| - | ^ ''--access'' ^ Кто может подключиться ^ | + | Модель (десятки GB), подготовленные файлы, пресеты и API-ключ хранятся в ''/data'' контейнера. Кладём их на быстрый NVMe-пул: |
| - | | ''local'' | только сам сервер (127.0.0.1) | | + | |
| - | | ''lan'' | компьютеры локальной сети | | + | |
| - | | ''tailscale'' | устройства вашей сети Tailscale (доступ извне без проброса портов) | | + | |
| - | | ''cloudflare'' | быстрый туннель Cloudflare (публичный адрес; обязательно с ключом) | | + | |
| - | Своё значение ключа: ''--api-key КЛЮЧ'' или ''--api-key-env ИМЯ_ПЕРЕМЕННОЙ''; новый ключ — ''--new-key''. Без ключа — ''--no-api-key'' (не рекомендуется). | + | **Datasets** → выбрать ''appData'' → **Add Dataset**: |
| + | * Name: ''strata'' | ||
| + | * Dataset Preset: **Apps** | ||
| + | * Save. | ||
| - | ==== Узнать API-ключ ==== | + | Путь получится ''/mnt/appData/strata''. Нужно свободное место: размер модели + ~10 GB (для ''Q2_0'' — ~80 GB). |
| - | <code bash> | + | ===== Шаг 5: API-ключ ===== |
| - | strata launch --show-key --preset "Server IQ3_S" | + | |
| - | </code> | + | |
| - | Ключ понадобится на каждом клиенте. | + | Сервер будет доступен из сети, поэтому ключ обязателен (Strata без ключа в сеть не отдаёт). Сгенерировать (**System → Shell** или SSH): |
| - | + | ||
| - | ==== Управление ==== | + | |
| <code bash> | <code bash> | ||
| - | strata launch --preset "Server IQ3_S" --no-tui # запуск | + | openssl rand -hex 24 |
| - | strata launch --stop --preset "Server IQ3_S" # остановка | + | |
| - | strata launch --status # что запущено | + | |
| - | strata monitor --url http://127.0.0.1:8080 # монитор | + | |
| - | strata logs --url http://127.0.0.1:8080 --follow # журнал запросов в реальном времени | + | |
| </code> | </code> | ||
| - | ===== Шаг 5: Автозапуск через systemd ===== | + | Сохраните ключ (например, в KeePass) — он нужен в YAML и на каждом клиенте. Ниже он обозначен ''<КЛЮЧ>''. |
| - | ''strata launch --no-tui'' запускает сервер в фоне и возвращает управление, поэтому используется тип ''oneshot''. **(проверить на сервере)** | + | ===== Шаг 6: Установка Custom App через веб-интерфейс ===== |
| - | Файл ''/etc/systemd/system/strata.service'': | + | **Apps → Discover Apps →** (меню **⋮** справа вверху) **→ Install via YAML**. **(проверить название пункта в 25.10)** |
| - | <code ini> | + | * **Name:** ''strata'' |
| - | [Unit] | + | * **Custom Config** — вставить YAML: |
| - | Description=Strata LLM server (Qwen3.8-Flash-Next) | + | |
| - | After=network-online.target nvidia-persistenced.service | + | |
| - | Wants=network-online.target | + | |
| - | [Service] | + | <code yaml> |
| - | Type=oneshot | + | services: |
| - | RemainAfterExit=yes | + | strata: |
| - | User=strata | + | image: ghcr.io/niko1221/strata:0.2.13-cuda13 |
| - | Environment=HOME=/home/strata | + | container_name: strata |
| - | ExecStart=/home/strata/.local/bin/strata launch --preset "Server IQ3_S" --no-tui | + | restart: unless-stopped |
| - | ExecStop=/home/strata/.local/bin/strata launch --stop --preset "Server IQ3_S" | + | ports: |
| - | TimeoutStartSec=900 | + | - "30080:8080" |
| - | + | environment: | |
| - | [Install] | + | FAMILY: qwen |
| - | WantedBy=multi-user.target | + | 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 | ||
| </code> | </code> | ||
| - | <code bash> | + | * **Save** / **Install**. |
| - | sudo systemctl daemon-reload | + | |
| - | sudo systemctl enable --now strata | + | |
| - | systemctl status strata | + | |
| - | </code> | + | |
| - | ===== Шаг 6: Firewall ===== | + | Пояснения: |
| + | * ''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 стартует сама, если не была остановлена вручную. | ||
| - | Разрешите порт только из домашней сети (пример для ''ufw'', сеть ''192.168.1.0/24''): | + | Другие переменные (из документации Strata): ''PARALLEL'' (одновременных запросов 1–8), ''KV'' (''int8'' / ''q4_0'' — вдвое меньше памяти на контекст), ''TUNE=quick'' (один раз подобрать быстрые настройки), ''STRATA_SET'' (расширенные настройки движка), ''MODEL_PATH'' (свои GGUF-файлы, смонтированные в контейнер). |
| - | <code bash> | + | ===== Шаг 7: Первый запуск ===== |
| - | sudo ufw allow from 192.168.1.0/24 to any port 8080 proto tcp | + | |
| - | sudo ufw status | + | |
| - | </code> | + | |
| - | **Не пробрасывайте порт 8080 на роутере в интернет.** Для доступа извне используйте ''--access tailscale'' или VPN. | + | Первый старт скачивает модель (для ''Q2_0'' ~68 GB) — это долго. Ход загрузки: **Apps → Installed → strata → Logs** (или ''docker logs -f strata'' по SSH). Прерванная загрузка продолжается с места остановки. |
| - | ===== Шаг 7: Проверка с другого компьютера ===== | + | Состояние: пока качается и загружается — ''starting'', когда модель загружена — ''healthy'' / **Running**. |
| - | Ниже ''192.168.1.50'' — IP сервера, ''<КЛЮЧ>'' — ключ из ''--show-key''. | + | Проверка на самом сервере: |
| - | + | ||
| - | Linux / macOS: | + | |
| <code bash> | <code bash> | ||
| - | curl -s http://192.168.1.50:8080/v1/models -H "Authorization: Bearer <КЛЮЧ>" | + | curl -s http://127.0.0.1:30080/health |
| + | curl -s http://127.0.0.1:30080/v1/models -H "Authorization: Bearer <КЛЮЧ>" | ||
| </code> | </code> | ||
| + | |||
| + | ===== Шаг 8: Проверка с другого компьютера ===== | ||
| Windows (PowerShell): | Windows (PowerShell): | ||
| <code powershell> | <code powershell> | ||
| - | curl.exe -s http://192.168.1.50:8080/v1/models -H "Authorization: Bearer <КЛЮЧ>" | + | curl.exe -s http://192.168.1.135:30080/v1/models -H "Authorization: Bearer <КЛЮЧ>" |
| </code> | </code> | ||
| - | Должен вернуться JSON с ''"id": "qwen3.8-flash-next-iq3_s"'' и ''"status": {"value": "loaded"}''. | + | Linux / macOS: |
| - | + | ||
| - | Тестовый запрос: | + | |
| <code bash> | <code bash> | ||
| - | curl -s http://192.168.1.50:8080/v1/chat/completions \ | + | curl -s http://192.168.1.135:30080/v1/chat/completions \ |
| -H "Authorization: Bearer <КЛЮЧ>" -H "Content-Type: application/json" \ | -H "Authorization: Bearer <КЛЮЧ>" -H "Content-Type: application/json" \ | ||
| - | -d '{"model":"qwen3.8-flash-next-iq3_s","messages":[{"role":"user","content":"Привет, ответь одним словом"}],"max_tokens":200}' | + | -d '{"model":"<имя из /v1/models>","messages":[{"role":"user","content":"Привет, ответь одним словом"}],"max_tokens":200}' |
| </code> | </code> | ||
| - | Если не отвечает: | + | * ''Connection refused'' / таймаут — приложение не запущено, неверный порт; |
| - | * ''Connection refused'' / таймаут — сервер не запущен, не тот порт или блокирует firewall (''sudo ufw status'', ''ss -ltnp | grep 8080'' на сервере); | + | * ''401'' — неверный или не переданный ключ. |
| - | * ''401'' / ''403'' — неверный или не переданный ключ. | + | |
| + | Имя модели берите **точно** из ответа ''/v1/models'' (для Q2_0 — вида ''qwen3.8-flash-next-q2_0''). | ||
| - | ===== Шаг 8: Подключение клиентов ===== | + | ===== Шаг 9: Подключение клиентов ===== |
| - | Общие параметры для любого клиента: | + | Общие параметры: |
| ^ Параметр ^ Значение ^ | ^ Параметр ^ Значение ^ | ||
| | Тип API | OpenAI Compatible (Chat Completions) | | | Тип API | OpenAI Compatible (Chat Completions) | | ||
| - | | Base URL | ''http://192.168.1.50:8080/v1'' | | + | | Base URL | ''http://192.168.1.135:30080/v1'' | |
| - | | Полный путь Chat Completions | ''http://192.168.1.50:8080/v1/chat/completions'' | | + | | Полный путь Chat Completions | ''http://192.168.1.135:30080/v1/chat/completions'' | |
| - | | API Key | ключ из ''strata launch --show-key'' | | + | | API Key | ''<КЛЮЧ>'' | |
| - | | Модель | ''qwen3.8-flash-next-iq3_s'' (точное имя — из ''/v1/models'') | | + | | Модель | имя из ''/v1/models'' | |
| - | | Контекст | 131072 | | + | | Anthropic-совместимый адрес | ''http://192.168.1.135:30080'' (без ''/v1'') | |
| - | | Anthropic-совместимый адрес | ''http://192.168.1.50:8080'' (без ''/v1'') | | + | |
| ==== Goose Desktop ==== | ==== Goose Desktop ==== | ||
| Строка 280: | Строка 251: | ||
| | Provider Type | **OpenAI Compatible** | | | Provider Type | **OpenAI Compatible** | | ||
| | Display Name | ''Strata Server'' | | | Display Name | ''Strata Server'' | | ||
| - | | API URL | ''http://192.168.1.50:8080/v1/chat/completions'' | | + | | API URL | ''http://192.168.1.135:30080/v1/chat/completions'' | |
| - | | API Key | ключ сервера | | + | | API Key | ''<КЛЮЧ>'' | |
| - | | Available Models | ''qwen3.8-flash-next-iq3_s'' | | + | | Available Models | имя из ''/v1/models'' | |
| | Streaming | включить | | | Streaming | включить | | ||
| - | Или файлом ''%APPDATA%\Block\goose\config\custom_providers\custom_strata_server.json'' (Windows; на Linux/macOS — ''~/.config/goose/custom_providers/''): | + | Или файлом ''%APPDATA%\Block\goose\config\custom_providers\custom_strata_server.json'' (Linux/macOS — ''~/.config/goose/custom_providers/''): |
| <code json> | <code json> | ||
| Строка 292: | Строка 263: | ||
| "engine": "openai", | "engine": "openai", | ||
| "display_name": "Strata Server", | "display_name": "Strata Server", | ||
| - | "description": "Strata on 192.168.1.50:8080", | + | "description": "Strata on TrueNAS 192.168.1.135:30080", |
| "api_key_env": "CUSTOM_STRATA_SERVER_API_KEY", | "api_key_env": "CUSTOM_STRATA_SERVER_API_KEY", | ||
| - | "base_url": "http://192.168.1.50:8080/v1/chat/completions", | + | "base_url": "http://192.168.1.135:30080/v1/chat/completions", |
| "models": [ | "models": [ | ||
| - | { "name": "qwen3.8-flash-next-iq3_s", "context_limit": 131072 } | + | { "name": "qwen3.8-flash-next-q2_0", "context_limit": 65536 } |
| ], | ], | ||
| "headers": null, | "headers": null, | ||
| Строка 305: | Строка 276: | ||
| </code> | </code> | ||
| - | Ключ после этого ввести в Settings → Models у провайдера //Strata Server// или задать переменной окружения ''CUSTOM_STRATA_SERVER_API_KEY'' **(проверить)**. Русский язык, ''.goosehints'' и MCP (Developer, Playwright) — как на [[:truenas:application:strata_qwen_goose|странице локальной установки]]: MCP-расширения работают на клиенте, сервер только отвечает моделью. | + | Ключ — ввести в Settings → Models у провайдера //Strata Server// или задать переменной окружения ''CUSTOM_STRATA_SERVER_API_KEY'' **(проверить)**. Русский язык, ''.goosehints'' и MCP (Developer, Playwright) настраиваются на клиенте — как на [[:truenas:application:strata_qwen_goose|странице локальной установки]]. |
| - | ==== OpenCode ==== | + | ==== Open WebUI (уже стоит на этом же TrueNAS) ==== |
| - | Strata умеет сама сгенерировать конфиг: | + | Admin Panel → Settings → Connections → OpenAI API → добавить: |
| + | * URL: ''http://192.168.1.135:30080/v1'' | ||
| + | * Key: ''<КЛЮЧ>'' | ||
| - | <code bash> | + | Модель Strata появится в списке рядом с моделями Ollama. |
| - | strata connect opencode # показать конфиг (на сервере) | + | |
| - | </code> | + | |
| - | На клиенте в ''~/.config/opencode/opencode.json'' замените адрес и ключ: | + | ==== OpenCode ==== |
| + | |||
| + | ''~/.config/opencode/opencode.json'': | ||
| <code json> | <code json> | ||
| { | { | ||
| "$schema": "https://opencode.ai/config.json", | "$schema": "https://opencode.ai/config.json", | ||
| - | "model": "strata/qwen3.8-flash-next-iq3_s", | + | "model": "strata/qwen3.8-flash-next-q2_0", |
| "provider": { | "provider": { | ||
| "strata": { | "strata": { | ||
| "npm": "@ai-sdk/openai-compatible", | "npm": "@ai-sdk/openai-compatible", | ||
| - | "name": "Strata (server)", | + | "name": "Strata (TrueNAS)", |
| "options": { | "options": { | ||
| - | "baseURL": "http://192.168.1.50:8080/v1", | + | "baseURL": "http://192.168.1.135:30080/v1", |
| "apiKey": "<КЛЮЧ>" | "apiKey": "<КЛЮЧ>" | ||
| }, | }, | ||
| "models": { | "models": { | ||
| - | "qwen3.8-flash-next-iq3_s": { | + | "qwen3.8-flash-next-q2_0": { |
| - | "name": "Qwen3.8-Flash-Next", | + | "name": "Qwen3.8-Flash-Next Q2_0", |
| "tool_call": true, | "tool_call": true, | ||
| "reasoning": true, | "reasoning": true, | ||
| - | "limit": { "context": 131072, "output": 16384 } | + | "limit": { "context": 65536, "output": 16384 } |
| } | } | ||
| } | } | ||
| Строка 342: | Строка 315: | ||
| </code> | </code> | ||
| - | ''strata connect'' без аргументов показывает все клиенты, для которых у Strata есть готовые настройки: opencode, codex, claude-code, omp, pi, hermes, openclaw. | + | Готовый файл с ключом и именем модели можно получить на сервере: ''docker exec strata strata connect opencode'' (адрес в нём будет внутренний — замените на ''http://192.168.1.135:30080''). |
| - | + | ||
| - | ==== Open WebUI (чат в браузере) ==== | + | |
| - | + | ||
| - | Admin Panel → Settings → Connections → OpenAI API → добавить: | + | |
| - | * URL: ''http://192.168.1.50:8080/v1'' | + | |
| - | * Key: ключ сервера | + | |
| - | + | ||
| - | Модель ''qwen3.8-flash-next-iq3_s'' появится в списке. | + | |
| ==== Claude Code ==== | ==== Claude Code ==== | ||
| - | |||
| - | Strata отдаёт и Anthropic-совместимый API (без ''/v1''): | ||
| <code bash> | <code bash> | ||
| - | export ANTHROPIC_BASE_URL=http://192.168.1.50:8080 | + | export ANTHROPIC_BASE_URL=http://192.168.1.135:30080 |
| export ANTHROPIC_AUTH_TOKEN=<КЛЮЧ> | export ANTHROPIC_AUTH_TOKEN=<КЛЮЧ> | ||
| claude | claude | ||
| </code> | </code> | ||
| - | |||
| - | Готовые настройки: ''strata connect claude-code''. | ||
| ==== Python (openai SDK) ==== | ==== Python (openai SDK) ==== | ||
| Строка 369: | Строка 330: | ||
| from openai import OpenAI | from openai import OpenAI | ||
| - | client = OpenAI(base_url="http://192.168.1.50:8080/v1", api_key="<КЛЮЧ>") | + | client = OpenAI(base_url="http://192.168.1.135:30080/v1", api_key="<КЛЮЧ>") |
| r = client.chat.completions.create( | r = client.chat.completions.create( | ||
| - | model="qwen3.8-flash-next-iq3_s", | + | model="qwen3.8-flash-next-q2_0", |
| messages=[{"role": "user", "content": "Привет! Кратко: чем list отличается от tuple?"}], | messages=[{"role": "user", "content": "Привет! Кратко: чем list отличается от tuple?"}], | ||
| ) | ) | ||
| Строка 377: | Строка 338: | ||
| </code> | </code> | ||
| - | ===== Особенности и ограничения ===== | + | ===== Управление ===== |
| + | |||
| + | ^ Действие ^ Как ^ | ||
| + | | Остановить / запустить | **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» ==== | ||
| - | * **Один запрос за раз с DFlash2.** Пока один клиент получает ответ, остальные ждут в очереди. Для нескольких пользователей — ''--drafting mtp --parallel 2..4'' (каждый слот съедает память под контекст) или семейство ''qwen36''. | + | Драйвер ниже 575/580. Решение — «Шаг 1» (TrueNAS 25.10.7+). Образ ''cuda12'' не поможет: ему нужен 575+. |
| - | * **Первый запрос агента долгий.** Агенты (Goose, OpenCode) отправляют системный промпт с описанием инструментов на ~12 тыс. токенов; на RTX 4080 + 64 GB RAM это ~30 с, дальше работает кэш. | + | |
| - | * **Скорость по сети** практически не теряется: трафик — это текст, узкое место — генерация на сервере. Ориентир (RTX 4080 16 GB, 64 GB RAM, IQ3_S): ~21 токен/с генерации. | + | ==== CUDA out of memory / модель не помещается ==== |
| - | * **Ответ содержит ''reasoning_content''** (рассуждения модели) — большинство клиентов его скрывают или показывают отдельно. | + | |
| - | * Лог движка на сервере: ''~/.local/share/strata/launch/<пресет>.engine.log''. | + | Видеокарту держат другие приложения — «Шаг 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: | ||
| + | |||
| + | <code bash> | ||
| + | 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" | ||
| + | </code> | ||
| + | |||
| + | ''--access lan'' открывает доступ из сети и включает API-ключ. | ||
| ===== Шпаргалка ===== | ===== Шпаргалка ===== | ||
| <code bash> | <code bash> | ||
| - | # сервер | + | # сервер (SSH или System → Shell) |
| - | strata launch --preset "Server IQ3_S" --no-tui | + | docker logs -f strata |
| - | strata launch --stop --preset "Server IQ3_S" | + | docker exec -it strata strata monitor |
| - | strata launch --show-key --preset "Server IQ3_S" | + | docker exec strata strata launch --show-key --preset docker |
| - | strata logs --url http://127.0.0.1:8080 --follow | + | nvidia-smi |
| # клиент | # клиент | ||
| - | curl -s http://192.168.1.50:8080/v1/models -H "Authorization: Bearer <КЛЮЧ>" | + | curl -s http://192.168.1.135:30080/v1/models -H "Authorization: Bearer <КЛЮЧ>" |
| </code> | </code> | ||
| + | |||
| + | ^ Что ^ Значение ^ | ||
| + | | Адрес API | ''http://192.168.1.135:30080/v1'' | | ||
| + | | Данные | ''/mnt/appData/strata'' | | ||
| + | | Образ | ''ghcr.io/niko1221/strata:0.2.13-cuda13'' (нужен TrueNAS 25.10.7+) | | ||