← Все гайды AI Release
EN Подписаться на @ai_release1

Как запустить локальный LLM-сервер на AMD Strix Halo: HALOGEN и Qwen в Fedora 43

Обновлено: 25.10.2026 · AI Release · @ai_release1
Как запустить локальный LLM-сервер на AMD Strix Halo: HALOGEN и Qwen в Fedora 43

TL;DR

Требования и подготовка

Иллюстрация к разделу «Требования и подготовка»
Иллюстрация к разделу «Требования и подготовка»

Чек-лист готовности:

Если Strix Halo под рукой нет, а запустить модель хочется на обычном железе — начните с материала Как запустить ИИ-модель локально на своём компьютере: гайд для начинающих.

Шаг 1. Проверка железа и подготовка Fedora 43

Что сделать: убедиться, что система видит APU, что памяти достаточно и что установлены сборочные зависимости.

Зачем: 90% провалов на Strix Halo — не «плохая модель», а незамеченное отсутствие прав на GPU-устройства или нехватка места под веса и кэш сборки.

Как проверить: выполните блок и сравните вывод с ожидаемым.

cat /etc/fedora-release
lscpu | grep -i "model name"
free -h
df -h /home
lspci -nn | grep -Ei "vga|display"

Ожидаемый результат: строка Fedora release 43, название процессора семейства Ryzen AI Max, несколько десятков гигабайт в столбце Mem, и в lspci — устройство AMD с упоминанием Radeon 8060S. У части прошивок iGPU определяется как AMD Device xxxx — это нормально, важен сам факт наличия AMD-дисплейного контроллера.

Пример: при 128 ГБ RAM строка free -h покажет примерно Mem: 125Gi, и это тот пул, из которого дальше будет выдана память под веса модели.

Установите зависимости и добавьте себя в группы доступа к GPU:

sudo dnf install -y git cmake gcc-c++ make python3-devel rocminfo
sudo usermod -aG video,render "$USER"

После usermod обязателен полный выход из сессии и повторный вход — иначе новая группа не применится к текущему процессу.

id -nG
ls -l /dev/kfd /dev/dri/renderD*

Ожидаемый результат: в выводе id -nG есть video и render, а ls показывает устройства /dev/kfd и /dev/dri/renderD128. Почему это работает: amdgpu создаёт эти узлы при загрузке, а группы video/render дают права на запись в них — без прав HIP-бэкенд не инициализируется.

Шаг 2. Установка HALOGEN и запуск сервера с Qwen

Иллюстрация к разделу «Шаг 2. Установка HALOGEN и запуск сервера с Qwen»
Иллюстрация к разделу «Шаг 2. Установка HALOGEN и запуск сервера с Qwen»

Что сделать: развернуть сборотное окружение HALOGEN, собрать llama.cpp с HIP-бэкендом, скачать веса Qwen и поднять OpenAI-совместимый сервер на порту 8080.

Зачем: HALOGEN даёт согласованный набор драйверов и библиотек под gfx-архитектуру Strix Halo, а llama-server превращает локальную модель в HTTP-API, к которому подключаются любые клиенты, понимающие формат OpenAI.

Как проверить: по шагам ниже — сначала сборка, потом загрузка слоёв на GPU в логе.

Шаг 2.1. Разверните HALOGEN по инструкции проекта (URL репозитория и точные команды установки берите из документации HALOGEN — здесь они не приводятся, чтобы не давать устаревших путей). После установки проверьте, что ROCm видит GPU:

rocminfo | grep -m1 -A2 "Agent 2"

Ожидаемый результат: блок с Name: gfx1151 (или иной gfx-идентификатор вашего APU) и типом GPU. Если вывод пуст или содержит ошибку — см. раздел «Возможные проблемы».

Шаг 2.2. Соберите llama.cpp с HIP:

git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_HIP=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build -j"$(nproc)" --target llama-server

Ожидаемый результат: в конце сборки появляется build/bin/llama-server. Почему это работает: флаг GGML_HIP=ON включает HIP-бэкенд, и вычисления уходят на iGPU вместо CPU.

Шаг 2.3. Скачайте веса в каталог /models (имя репозитория и файла подставьте свои):

sudo mkdir -p /models && sudo chown "$USER":"$USER" /models
huggingface-cli download <репозиторий-Qwen-GGUF> \
  --include "*Q4_K_M*.gguf" \
  --local-dir /models
ls -lh /models

Пример: в /models появляется один файл вида qwen-...-Q4_K_M.gguf размером в десятки гигабайт — именно его путь вы подставите в следующую команду.

Шаг 2.4. Запустите сервер:

./build/bin/llama-server \
  --model /models/<имя-файла-Qwen>.gguf \
  --host 127.0.0.1 \
  --port 8080 \
  --ctx-size 8192 \
  --n-gpu-layers 999

Разбор флагов: --ctx-size — размер контекстного окна в токенах (чем больше, тем больше памяти под KV-кэш); --n-gpu-layers 999 — «выгрузить на GPU столько слоёв, сколько есть»; --host 127.0.0.1 — слушать только локально.

Ожидаемый результат в логе: строка вида llama server listening at http://127.0.0.1:8080 и строка load_tensors: offloading ... repeating layers to GPU. Если в логе offloading 0 repeating layers to GPU — модель считается на CPU, и это первый признак, что HIP-бэкенд не подхватился.

Шаг 3. Проверка API и финальный результат

Иллюстрация к разделу «Шаг 3. Проверка API и финальный результат»
Иллюстрация к разделу «Шаг 3. Проверка API и финальный результат»

Что сделать: проверить health-эндпоинт, отправить реальный запрос к модели и убедиться, что генерация идёт на iGPU.

Зачем: успешный старт процесса не гарантирует, что модель отвечает; проверка идёт от «сервер жив» к «модель отвечает» к «считает GPU».

Как проверить: три команды подряд.

curl -s http://127.0.0.1:8080/health

Ожидаемый вывод: {"status":"ok"}.

curl -s http://127.0.0.1:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "local",
    "messages": [{"role": "user", "content": "Объясни в одном предложении, что такое унифицированная память."}]
  }'

Ожидаемый результат: JSON с непустым полем choices[0].message.content. Поле model в запросе может игнорироваться сервером — важно, что ответ пришёл в формате OpenAI, значит к нему можно подключить любой совместимый клиент.

cat /sys/class/drm/card*/device/gpu_busy_percent

Во время генерации значение должно быть заметно больше нуля. Это и есть финальный признак успеха: модель отвечает, а нагрузка лежит на iGPU, а не на CPU.

Пример: запрос про унифицированную память возвращает одну фразу, а gpu_busy_percent в момент генерации показывает двузначное число и падает до нуля после ответа.

Возможные проблемы и решения

Проблема. Сервер падает при старте, модель не грузится на GPU

Проблема. Процесс убит при загрузке весов или контекст не создаётся

Проблема. Клиент не подключается к серверу

Резюме и следующие шаги

Вы получили локальный OpenAI-совместимый сервер с Qwen на Strix Halo и убедились, что генерация идёт на iGPU. Дальше имеет смысл сравнить несколько моделей между собой по удобству и скорости — например, по материалу Как запустить новую открытую модель Meta локально и сравнить её с DeepSeek и Qwen, а список доступных открытых весов посмотреть в подборке Какие ИИ-модели имеют открытые веса и как их запустить бесплатно.

FAQ

Нужна ли дискретная видеокарта для запуска LLM на Strix Halo?

Нет. Strix Halo — APU с унифицированной памятью: CPU и встроенная графика используют один пул RAM, поэтому отдельная видеокарта с собственной VRAM не требуется.

Почему модель не помещается в память, если RAM много?

Часть общей памяти резервируется под iGPU настройкой прошивки, а остальное делят между собой веса модели, KV-кэш контекста и система. Уменьшите --ctx-size или возьмите более компактное квантование.

Что означает offloading 0 repeating layers to GPU в логе?

Это признак того, что модель считает на CPU: HIP-бэкенд не собрался или не видит GPU. Проверьте вывод rocminfo и то, что llama-server собран с -DGGML_HIP=ON.

Можно ли обращаться к серверу с другого устройства в сети?

Да, если запустить сервер с --host 0.0.0.0 и открыть порт 8080 в firewalld. По умолчанию сервер слушает только 127.0.0.1, и с другой машины он недоступен.

🤖 Кратко для ИИ