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

> AI Release · @ai_release1 · https://ai-release.org/guides/kak-zapustit-lokalnyy-llm-server-na-amd-strix-halo-halo.html

## TL;DR
- Время выполнения: 60–90 минут без учёта скачивания весов модели (веса качаются отдельно и зависят от размера квантования).
- Уровень сложности: Intermediate
- Понадобится: мини-ПК или ноутбук на AMD Ryzen AI Max (кодовое имя Strix Halo) с iGPU Radeon 8060S, Fedora 43 Workstation, права `sudo`, 64 ГБ унифицированной памяти и больше, ~100 ГБ свободного места на диске, `git`, `cmake`, `gcc-c++`, `llama.cpp` (сборка с HIP-бэкендом), GGUF-веса модели семейства Qwen, стек HALOGEN из документации проекта.

## Требования и подготовка
![Иллюстрация к разделу «Требования и подготовка»](https://ai-release.org/guides/img/kak-zapustit-lokalnyy-llm-server-na-amd-strix-halo-halo-ru-1.jpg?v=1792918215)

- ОС: Fedora 43 Workstation (проверяется командой ниже; на других версиях пути к пакетам и версии ROCm-пакетов могут отличаться).
- Железо: APU AMD Strix Halo. Ключевая особенность — унифицированная память: CPU и iGPU делят один пул RAM, поэтому «видеопамять» под модель выделяется из общей памяти.
- Права: пользователь с `sudo`, членство в группах `video` и `render` (без этого ядро не даст доступ к `/dev/kfd`).
- Пакеты: `git`, `cmake`, `gcc-c++`, `make`, `python3-devel`, `rocminfo`.
- Модель: GGUF-файл Qwen нужного размера и квантования (например, квант `Q4_K_M` — компромисс между качеством и объёмом). Точное имя файла и репозитория сверьте с карточкой модели на Hugging Face.
- Точные версии ROCm/HALOGEN, поддерживаемые архитектуры GPU и результаты замеров скорости в этом гайде не фиксируются — сверьтесь с документацией проекта HALOGEN и матрицей поддержки ROCm перед установкой.

Чек-лист готовности:
- [ ] `sudo` работает без пароля-сюрпризов
- [ ] на диске свободно больше 100 ГБ
- [ ] пользователь добавлен в группы `video` и `render`
- [ ] известно имя GGUF-файла Qwen и место, куда его скачивать (`/models`)

Если Strix Halo под рукой нет, а запустить модель хочется на обычном железе — начните с материала [Как запустить ИИ-модель локально на своём компьютере: гайд для начинающих](https://ai-release.org/guides/kak-zapustit-ii-model-lokalno-na-svoem-kompyutere-gayd.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

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

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

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

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

```bash
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:

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

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

```bash
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»](https://ai-release.org/guides/img/kak-zapustit-lokalnyy-llm-server-na-amd-strix-halo-halo-ru-2.jpg?v=1792918223)


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

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

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

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

```bash
rocminfo | grep -m1 -A2 "Agent 2"
```

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

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

```bash
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` (имя репозитория и файла подставьте свои):

```bash
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. Запустите сервер:

```bash
./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 и финальный результат»](https://ai-release.org/guides/img/kak-zapustit-lokalnyy-llm-server-na-amd-strix-halo-halo-ru-3.jpg?v=1792918228)


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

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

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

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

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

```bash
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, значит к нему можно подключить любой совместимый клиент.

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

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

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

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

**Проблема. Сервер падает при старте, модель не грузится на GPU**
- Ошибка: `error: unable to open /dev/kfd` (или `Permission denied` при обращении к `/dev/kfd`)
- Причина: пользователь не входит в группы `video` и `render`, либо не перелогинился после `usermod`.
- Решение: проверьте `id -nG`; если групп нет — выполните `sudo usermod -aG video,render "$USER"`, полностью выйдите из сессии и войдите снова, затем перезапустите сервер и проверьте `ls -l /dev/kfd`.

**Проблема. Процесс убит при загрузке весов или контекст не создаётся**
- Ошибка: `Killed` в терминале или сообщение вида `failed to allocate buffer for kv cache`
- Причина: модель плюс KV-кэш не помещаются в доступную пулу память. На Strix Halo память общая, и её часть резервируется под iGPU настройкой прошивки (UMA Frame Buffer / GTT).
- Решение: уменьшите `--ctx-size` (например, с 8192 до 4096), возьмите более компактное квантование (`Q4_K_M` вместо `Q6_K`/`Q8_0`) и при необходимости увеличьте лимит памяти под iGPU в BIOS/UEFI — конкретное название пункта зависит от прошивки, сверьтесь с документацией производителя устройства.

**Проблема. Клиент не подключается к серверу**
- Ошибка: `curl: (7) Failed to connect to 127.0.0.1 port 8080`
- Причина: сервер не стартовал, слушает другой порт или (если вы обращаетесь с другой машины) привязан только к `127.0.0.1`.
- Решение: проверьте `ss -ltnp | grep 8080`; если порт не занят — смотрите лог `llama-server`. Для доступа по сети перезапустите с `--host 0.0.0.0` и откройте порт: `sudo firewall-cmd --add-port=8080/tcp --permanent && sudo firewall-cmd --reload`.

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

Вы получили локальный OpenAI-совместимый сервер с Qwen на Strix Halo и убедились, что генерация идёт на iGPU. Дальше имеет смысл сравнить несколько моделей между собой по удобству и скорости — например, по материалу [Как запустить новую открытую модель Meta локально и сравнить её с DeepSeek и Qwen](https://ai-release.org/guides/kak-zapustit-novuyu-otkrytuyu-model-meta-lokalno-i-srav.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide), а список доступных открытых весов посмотреть в подборке [Какие ИИ-модели имеют открытые веса и как их запустить бесплатно](https://ai-release.org/guides/kakie-ii-modeli-imeyut-otkrytye-vesa-i-kak-ih-zapustit.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

## 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`, и с другой машины он недоступен.
