Запуск большой языковой модели локально больше не обязательно требует дискретной видеокарты с десятками гигабайт VRAM. AMD Strix Halo с 128 ГБ унифицированной памяти способен обслуживать крупные MoE-модели, если движок умеет работать с UMA-памятью, memory mapping и особенностями iGPU.
В этой статье — практическая настройка Qwen3.8-Flash-Next на Fedora 43 Server через HALOGEN, включая OpenAI-совместимый API, API-ключ, четыре параллельные сессии и внешний доступ через порт 9091.
HALOGEN — специализированный inference-движок именно для AMD Strix Halo (gfx1151) и семейства Qwen3.8-Flash-Next. Это не универсальная замена llama.cpp или vLLM: его преимущества достигаются именно за счёт узкой оптимизации под одну архитектуру GPU и одну модельную линейку.
Что представляет собой Qwen3.8-Flash-Next
Qwen3.8-Flash-Next — это не «обычная» dense-модель. Она использует смесь экспертов (MoE), гибридное внимание и отдельные N-gram embeddings.
| Параметр | Значение |
|---|---|
| Основная модель | 125 млрд параметров |
| Активируется на токен | около 6 млрд параметров |
| N-gram embedding table | около 51 млрд параметров |
| MTP-head | около 4 млрд параметров |
| Количество слоёв | 48 |
| MoE-экспертов | 512 routed + 1 shared |
| Активных routed-экспертов | 10 |
| Нативный контекст | 262 144 токена |
| Максимальный расширенный контекст | до 1 000 000 токенов |
| Возможности | текст и опционально изображения |
MoE означает, что модель имеет большую суммарную ёмкость, но не выполняет вычисления по всем параметрам на каждом токене. Это позволяет получить более высокую производительность, чем у плотной модели аналогичного полного размера.
Почему HALOGEN хорошо подходит Strix Halo
Strix Halo использует unified memory architecture: CPU и встроенный GPU работают с общей LPDDR5X-памятью. У него нет отдельной физической VRAM, как у дискретной NVIDIA или Radeon.
HALOGEN учитывает это устройство:
- ориентирован на GPU
gfx1151; - использует собственный формат весов
.hgn; - не требует копировать весь комплект весов в «VRAM»;
- хранит N-gram lookup table через memory mapping;
- использует MTP/speculative decoding для ускорения генерации;
- предоставляет OpenAI-совместимый HTTP API.
Для запуска важно установить в BIOS параметр UMA Frame Buffer в минимальное фиксированное значение, а не оставлять Auto. HALOGEN нужен доступ к обычной памяти хоста, а крупный статический резерв под iGPU уменьшает доступный объём RAM.
Размер модели и требования к диску
Стандартный набор весов HALOGEN выглядит так:
| Файл | Размер | Назначение |
|---|---|---|
qwen38-flash-next-v2.hgn | 62,1 GiB | Основной checkpoint |
qwen38-flash-next-ngram.hgn | 47,7 GiB | N-gram lookup table |
tokenizer/ | небольшой | Токенизатор |
| Всего | около 110 GiB | Текстовая модель |
qwen38-flash-next-vision.hgn | 0,84 GiB | Опциональная поддержка изображений |
qwen38-flash-next-mtp.hgn | 1,42 GiB | Draft-head для стороннего GGUF |
При первом запуске HALOGEN автоматически загрузит нужные файлы, если указать:
-e HALOGEN_DOWNLOAD=peonist-ai/halogen-qwen3.8-flash-next
Нужно заранее иметь хотя бы 120–140 ГБ свободного места: помимо самих весов нужны служебные файлы и запас для обновлений.
Ожидаемая производительность
По опубликованным результатам HALOGEN для Strix Halo ориентиры следующие:
| Сценарий | Производительность |
|---|---|
| Генерация текста | около 54 токенов/с |
| Благоприятный сценарий speculative decoding | до 94 токенов/с |
| Генерация при редактировании кода | до 81 токена/с |
| Генерация tool calls | около 71 токена/с |
| Prefill: промпт 8K токенов | около 1 821 токена/с |
| Prefill: промпт 32K токенов | около 1 740 токенов/с |
| Prefill: промпт 131K токенов | около 1 675 токенов/с |
Для практики это означает:
- новый документ на 32K токенов будет обработан примерно за 19 секунд;
- уже закэшированная история диалога продолжится заметно быстрее;
- ответ на 1 000 токенов при скорости 54 токена/с будет генерироваться около 18–19 секунд;
- реальная скорость зависит от текста, длины контекста, температуры, speculative decoding и параллельной нагрузки.
При четырёх одновременных сессиях HALOGEN делит вычислительный ресурс между потоками. Ориентир из документации:
- примерно 76 токенов/с суммарно;
- примерно 11–19 токенов/с на один параллельный поток.
Четыре слота полезны для API-сервера с несколькими клиентами, но не ускоряют единичный запрос.
Подготовка Fedora 43 Server
Установим Podman и базовые утилиты:
sudo dnf upgrade --refresh -y
sudo dnf install -y podman curl pciutils
sudo reboot
После перезагрузки проверим драйвер и GPU-устройства:
lspci -nnk | grep -A 4 -Ei 'VGA|Display|3D'
ls -l /dev/kfd /dev/dri/renderD*
free -h
Для работы с GPU пользователю обычно нужны группы render и video:
sudo usermod -aG render,video "$USER"
После этого необходимо полностью завершить SSH-сеанс и подключиться снова.
Создание API-ключа
HALOGEN может защищать API через переменную HALOGEN_API_KEY. Клиент передаёт её через стандартный заголовок:
Authorization: Bearer ВАШ_КЛЮЧ
Создадим файл окружения с правами доступа только для текущего пользователя:
mkdir -p "$HOME/.config/halogen" "$HOME/halogen-models"
chmod 700 "$HOME/.config/halogen"
(
umask 077
if [ ! -f "$HOME/.config/halogen/server.env" ]; then
printf 'HALOGEN_API_KEY=%s\n' \
"$(head -c 32 /dev/urandom | od -An -tx1 | tr -d ' \n')" \
> "$HOME/.config/halogen/server.env"
fi
)
chmod 600 "$HOME/.config/halogen/server.env"
Просмотреть ключ можно так:
cat "$HOME/.config/halogen/server.env"
Не добавляйте этот файл в Git, не передавайте его в мессенджерах и не храните в публичных конфигурациях.
Запуск HALOGEN с четырьмя параллельными сессиями
HALOGEN слушает порт 8731 внутри контейнера. Если внешний API должен быть доступен через порт 9091, порт-маппинг должен быть таким:
9091 на хосте → 8731 в контейнере
Команда запуска:
podman run -d \
--name halogen \
-p 0.0.0.0:9091:8731 \
--device /dev/kfd \
--device /dev/dri \
--group-add keep-groups \
--security-opt label=disable \
--ipc=host \
--ulimit memlock=-1:-1 \
--env-file "$HOME/.config/halogen/server.env" \
-e HALOGEN_KV_SLOTS=4 \
-e HALOGEN_DOWNLOAD=peonist-ai/halogen-qwen3.8-flash-next \
-v "$HOME/halogen-models:/models" \
ghcr.io/peonist-ai/halogen-flash-server:0.18.5
Что означают ключевые параметры
| Параметр | Назначение |
|---|---|
-p 0.0.0.0:9678:8731 | Публикует API в интернете на порту 9678 |
--device /dev/kfd | Доступ к AMD Compute Runtime |
--device /dev/dri | Доступ к DRM/GPU |
--group-add keep-groups | Передаёт контейнеру права групп пользователя |
--security-opt label=disable | Обход ограничений SELinux-разметки для GPU-доступа |
--ipc=host | Общий IPC namespace, как рекомендовано quickstart-конфигурацией |
--ulimit memlock=-1:-1 | Снимает лимит блокируемой памяти |
HALOGEN_KV_SLOTS=4 | До четырёх одновременно генерирующих диалогов |
HALOGEN_DOWNLOAD=... | Автоматическая загрузка весов при первом старте |
--env-file | Подключает API-ключ без помещения его в командную строку |
Посмотреть ход загрузки и инициализации модели:
podman logs -f halogen
И завершающая, на мой взгляд обязательная настройка — разрешить пользователю работать в фоне. Без этого, при закрытии ssh-консоли сервер будет выключаться.
sudo loginctl enable-linger "$USER"
Почему nvtop показывает около 27 ГБ видеопамяти
На Strix Halo показания nvtop часто вызывают вопросы: модель занимает около 110 ГиБ на SSD, основной checkpoint требует примерно 62 ГиБ резидентной памяти, но nvtop может показывать лишь около 27 ГБ GPU memory.
Это нормально.
Strix Halo не имеет отдельной физической VRAM. Его iGPU использует RAM хоста, а HALOGEN не обязан отображать весь объём модели как классическую GPU VRAM.
Память распределяется примерно так:
- Основные веса занимают около 62 ГиБ в резидентной памяти.
- N-gram table размером 47,7 ГиБ подключается через
mmap. - Linux загружает страницы N-gram table по мере необходимости и использует page cache.
- В
nvtopобычно хорошо видны:- буферы GPU;
- рабочие области вычислений;
- KV-cache;
- часть GPU memory mapping.
- При
HALOGEN_KV_SLOTS=4заметную часть отображаемых примерно 27 ГБ может занимать именно общий KV-pool и сопутствующее состояние слотов.
Поэтому показатель в nvtop не означает, что модель загрузилась «только на 27 ГБ» или работает не полностью.
Не публикуйте HTTP API в интернете без TLS
API-ключ защищает сервер от неавторизованных запросов, но не шифрует соединение. При прямом HTTP-доступе токен и содержимое запросов могут быть перехвачены в сети.
Корректная production-схема:
Интернет
↓ HTTPS :9091
Caddy / Nginx / Traefik
↓ HTTP 127.0.0.1:8731
HALOGEN
Итог
Связка из AMD Strix Halo, 128 ГБ RAM, Fedora 43 Server и HALOGEN позволяет развернуть быстрый локальный API для Qwen3.8-Flash-Next без дискретной GPU.
Практическая конфигурация даёт:
- модель MoE на 125B параметров с 6B активных на токен;
- около 110 ГиБ весов на диске;
- около 50+ токенов/с для одного интерактивного потока;
- до четырёх параллельных генераций через
HALOGEN_KV_SLOTS=4; - OpenAI-совместимые
/v1/chat/completions,/v1/completionsи/v1/responses; - доступ извне через порт
9678; - API-авторизацию через
HALOGEN_API_KEY.
Ключевое отличие этой конфигурации от обычного LLM-сервера — правильная работа с UMA-памятью: низкое значение UMA carve-out в BIOS, понимание роли memory-mapped N-gram table и отказ от попыток интерпретировать показания nvtop как полный объём памяти, занятой моделью.