Часть 4 из 4
В третьей части я рассказал о тонкой настройке параметров генерации, решении проблемы с режимом рассуждения в Qwen3, оптимизации промптов для озвучки, сравнении моделей на практике, а также о планах на будущее: RAG-контуре, голосовом ассистенте и интеграции с умным домом. Теперь перехожу к финалу: полный чек-лист настройки с нуля, справочник команд, ответы на частые вопросы и итоговые выводы.
Полный чек-лист: настройка агента за один вечер
Если у вас уже есть ноутбук с AMD XDNA2 и Fedora, вот пошаговый план. Я разбил его на этапы, чтобы можно было остановиться в любой точке и продолжить потом. Весь процесс при чистом старте занимает два-три часа. Если что-то уже установлено — меньше.
Этап первый: проверка железа (пять минут).
Откройте терминал и введите:
lspci -nn | grep -i npu
Если видите строку с 1022:17f0 — NPU физически присутствует.
Затем:
lspci -nn -vvv -s 66:00.1 | head -20
Убедитесь, что устройство видно, что у него есть память и прерывания. Если строка пустая или выдаёт ошибку — PCI-шина не инициализировала устройство.
Этап второй: установка XRT и драйвера (пятнадцать минут).
Установите XRT в /opt/xilinx/xrt/. Затем установите DKMS-модуль. После установки проверьте:
dkms status | grep amdxdna
Должна быть строка с версией 2.26.0 и статусом «installed». Если статус «added» или «built» — модуль не установлен. Выполните:
sudo dkms install xrt-amdxdna/2.26.0 -k $(uname -r)
sudo depmod -a
Затем загрузите модуль:
sudo modprobe amdxdna
И проверьте:
ls -la /dev/accel/accel0
Должно быть crw-rw-rw-. root render. Если файла нет — модуль не загрузился. Смотрите dmesg.
Этап третий: проверка прошивки (две минуты).
ls /lib/firmware/amdnpu/17f0_10/
Должен быть файл npu.dev.sbin. Если его нет — прошивка не установлена. Если есть — проверьте загрузку:
sudo dmesg | grep -i "Load firmware"
Должна быть строка Load firmware amdnpu/17f0_10/npu.dev.sbin. Обратите внимание: директория называется 17f0_10, а не 17f0_20. Это нормально. Не переименовывайте. Не создавайте отдельную. Драйвер использует одну директорию для обеих ревизий.
Этап четвёртый: проверка состояния NPU (одна минута).
source /opt/xilinx/xrt/setup.sh
xrt-smi examine
Если видите NPU Krackan 1 и Device(s) Present — всё работает. Переходите к следующему этапу.
Если видите 0 devices found — NPU не определился. Если в dmesg есть строки с failed to init smu — железо зависло. Единственное решение: sudo reboot. После перезагрузки проверьте снова.
Этап пятый: установка FastFlowLM (десять минут).
Установите бинарник в /opt/fastflowlm/. Добавьте его в PATH. Затем:
flm validate
Пять строк без ошибок — значит, всё в порядке.
flm list
Список доступных моделей. Если список пустой — проблема с подключением к серверу моделей. Проверьте интернет на этом этапе. Загрузка моделей требует сети.
Загрузите модель:
flm pull qwen3:4b
Дождитесь завершения. Это может занять десять-двадцать минут в зависимости от скорости соединения. Размер — около трёх гигабайт.
Этап шестой: первый запуск сервера (две минуты).
flm serve qwen3:4b
Дождитесь строки о том, что сервер слушает на порту. Не закрывайте этот терминал. Откройте второй.
Во втором терминале:
curl -s http://localhost:52625/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "qwen3:4b", "messages": [{"role": "user", "content": "Привет!"}], "max_tokens": 100}' \
| python3 -m json.tool
Если получили связный ответ — сервер работает. Модель загружена. NPU крутит инференс. Поздравляю.
Этап седьмой: установка Piper (три минуты).
pip install --user piper-tts
mkdir -p ~/.local/share/piper/voices
cd ~/.local/share/piper/voices
Скачайте два файла: модель голоса и её конфигурацию. Для Ирины:
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/ru/ru_RU/irina/medium/ru_RU-irina-medium.onnx
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/ru/ru_RU/irina/medium/ru_RU-irina-medium.onnx.json
Проверка:
echo "Привет, мир" | ~/.local/bin/piper \
--model ~/.local/share/piper/voices/ru_RU-irina-medium.onnx \
--output_file /tmp/test.wav
aplay /tmp/test.wav
Если слышите голос — всё работает.
Этап восьмой: установка зависимостей агента (одна минута).
pip install --user feedparser openai
Всё. Больше ничего не нужно. subprocess, pathlib, logging — стандартная библиотека.
Этап девятый: создание скрипта агента (пять минут).
Создайте директорию ~/news_agent/. Скопируйте в неё скрипт news_digest.py, который я привёл во второй части. Сделайте его исполняемым:
chmod +x ~/news_agent/news_digest.py
Создайте директорию для аудио:
mkdir -p ~/.config/news-agent/audio
Этап десятый: первый запуск агента (одна минута).
python3 ~/news_agent/news_digest.py
Подождите пятнадцать-двадцать секунд. Из динамиков должна раздаться новостная сводка. Если раздалась — вы всё сделали правильно.
Этап одиннадцатый: скрипт окружения и автозапуск (пять минут).
Создайте ~/activate_npu.sh по шаблону из первой части. Добавьте строку в ~/.bashrc. Создайте systemd-юниты для автозапуска. Активируйте таймер.
Готово. Теперь каждое утро в семь тридцать ноутбук сам загрузит новости, суммаризирует их через NPU и озвучит через динамик. Без вашего участия.
Справочник команд для диагностики
Этот раздел — шпаргалка. Держите его под рукой. Когда что-то ломается, вы не хотите искать по форумам. Вы хотите открыть справочник и ввести команду.
Проверка состояния NPU:
source /opt/xilinx/xrt/setup.sh
xrt-smi examine
xrt-smi examine --report aie-partitions
ls -la /dev/accel/accel0
Проверка драйвера:
lsmod | grep amdxdna
dkms status | grep amdxdna
modinfo -F filename amdxdna
modinfo amdxdna | grep -E "version|srcversion"
Логи:
sudo dmesg | grep -i amdxdna | tail -30
sudo dmesg | grep -i "Load firmware"
sudo dmesg --since "5 minutes ago" | grep -i amdxdna
Информация об устройстве:
lspci -nn -vvv -s 66:00.1
Проверка процессов:
pgrep -a flm
Безопасная остановка сервера:
pkill -TERM -f flm
sleep 3
pgrep -a flm
Если последняя команда ничего не вывела — процесс остановлен. Если нет — подождите ещё пять секунд и проверьте снова. Не убивайте девяткой.
Перезагрузка модуля:
sudo rmmod amdxdna
sudo modprobe amdxdna
ls -la /dev/accel/accel0
xrt-smi examine
Пересборка DKMS:
sudo dkms remove xrt-amdxdna/2.26.0 --all
sudo dkms install xrt-amdxdna/2.26.0 -k $(uname -r)
sudo depmod -a
sudo rmmod amdxdna 2>/dev/null
sudo modprobe amdxdna
Последнее средство:
sudo reboot
Таблица ошибок: что видеть и что делать
| Симптом в логе | Причина | Действие |
|---|---|---|
failed to init smu, ret -22 | SMU завис после некорректной остановки процесса | Перезагрузка |
Access power failed, ret -22 | То же самое | Перезагрузка |
firmware is not alive | Прошивка не загрузилась или несовместима | Проверить файл в /lib/firmware/amdnpu/17f0_10/ |
No such device with index 0 | Устройство /dev/accel/accel0 не создано | sudo modprobe amdxdna |
Module amdxdna not found | DKMS потерял модуль | sudo dkms install xrt-amdxdna/2.26.0 -k $(uname -r) |
probe with driver amdxdna failed with error -22 | Аппаратное зависание | Перезагрузка |
Error: No NPU device found (flm) | Сервер не видит устройство | Проверить xrt-smi, при необходимости перезагрузка |
smu cmd 4 failed, 0xff | Контроллер питания не отвечает | Перезагрузка |
-62 (ETIME) | Прошивка не ответила за секунду | Проверить прошивку, перезагрузка |
-19 (ENODEV) | Устройство недоступно | Проверить PCI, BIOS, перезагрузка |
FAQ: частые вопросы и прямые ответы
Вопрос первый: можно ли использовать NPU для обучения моделей, а не только для инференса?
Нет. Архитектура AIE2p оптимизирована исключительно для прямого прогона тензоров через матричные умножители. Обратное распространение ошибки, градиентный спуск, оптимизаторы — всё это требует произвольных операций с памятью, которых фиксированный массив не поддерживает. Для обучения нужен GPU или CPU. NPU — только инференс.
Вопрос второй: сколько моделей можно держать загруженными одновременно?
Практически одну. Тридцать два гигабайта оперативки — это система, браузер, сервер и одна модель на три-четыре гигабайта. Вторая модель такого же размера уже создаёт давление на память. Теоретически можно загрузить две маленькие модели по миллиарду параметров, но практического смысла в этом мало: переключение между ними на NPU не реализовано эффективно. Лучше держать одну рабочую и подгружать другую по мере необходимости.
Вопрос третий: что делать, если после обновления ядра NPU перестал работать?
DKMS должен пересобрать модуль автоматически. Если не пересобрал — выполните вручную:
sudo dkms install xrt-amdxdna/2.26.0 -k $(uname -r)
sudo depmod -a
sudo modprobe amdxdna
Если после этого устройство не появляется — перезагрузитесь. В подавляющем большинстве случаев обновление ядра не ломает NPU. Ломает его только некорректная остановка процессов.
Вопрос четвёртый: можно ли использовать агент без интернета?
Для суммаризации и синтеза речи — да. Модель работает локально. Piper работает локально. Но для загрузки новостей нужен интернет: RSS-лента скачивается с сервера 3DNews. Если хотите полностью автономный режим, нужно предварительно загрузить новости и сохранить их в файл. Агент сможет читать из файла вместо сети. Это несложная правка скрипта.
Вопрос пятый: почему голос Ирины, а не Дениса или Руслана?
Субъективный выбор. Я перепробовал все четыре. Ирина звучит наиболее естественно для новостного формата: спокойный темп, чёткая дикция, мягкие интонации. Денис чуть резче, подходит для инструкций. Руслан слишком размеренный, звучит как медитация. Дмитрий почти не отличается от Дениса. Для сводки новостей Ирина — оптимальный баланс. Но это вкусовщина. Попробуйте все четыре и выберите свой.
Вопрос шестой: что будет, если я всё-таки убью процесс через kill -9?
NPU зависнет. SMU останется в состоянии «занят». Драйвер не сможет инициализироваться. Единственное решение — перезагрузка. Никакой патч, никакой перезапуск модуля, никакая пересборка драйвера не помогут. Только выключение питания и повторный старт. Это аппаратная особенность. Запомните: kill -9 на процесс, работающий с NPU, — это гарантированная перезагрузка.
Вопрос седьмой: можно ли использовать другую операционную систему?
Документация и мой опыт относятся к Fedora 44. На других дистрибутивах принцип тот же: XRT, DKMS-модуль, прошивка. Но конкретные пути, версии пакетов и команды установки будут отличаться. На Ubuntu и Debian процесс похож. На Arch — другой менеджер пакетов. На Windows — пока не пробовал. Если вы на другом дистрибутиве, ищите информацию по ключевым словам «amdxdna DKMS» и «XRT AMD NPU». Принципиальная архитектура та же.
Вопрос восьмой: как часто нужно обновлять прошивку и драйвер?
Не нужно, если всё работает. Прошивка 1.1.2.64 стабильна. Драйвер 2.26.0 стабильный. Обновляйте только если появилась новая версия, в которой исправлена конкретная проблема, с которой вы столкнулись. Не обновляйте ради обновления. Каждое обновление — это риск. Каждая пересборка DKMS — это потенциальный конфликт с ядром. Работает — не трогайте.
Вопрос девятый: сколько электроэнергии потребляет агент в месяц?
Один запуск в день, пятнадцать секунд активной работы, восемнадцать ватт. Это 0.075 ватт-часа в день. В месяц — 2.25 ватт-часа. По тарифу пять рублей за киловатт-час — это одна копейка в месяц. Буквально. Если ноутбук работает от сети, вы не заметите разницы. Если от батареи — один запуск забирает ноль целых восемь сотых процента заряда.
Вопрос десятый: стоит ли переходить на Qwen3-8B для лучшего качества?
Если вас устраивает качество четырёхмиллиардной модели — нет. Разница в качестве суммаризации между 4B и 8B на этой задаче минимальна. Обе выделяют главное, обе пишут связный текст. Но 8B генерирует в два раза медленнее: восемнадцать-двадцать пять секунд вместо восьми-двенадцати. Для утреннего запуска это заметно. Для интерактивного запроса — тем более. Оставайтесь на 4B. Переходите на 8B только если задача усложнится: анализ, сравнение, выводы по нескольким источникам.
Что я понял за месяц работы с агентом
Месяц — достаточный срок, чтобы оценить, работает ли решение в повседневной жизни. Не в демо-режиме, не в первых восторгах, а в рутине. Каждый день. Без пропусков.
Первое: я перестал открывать новостные сайты утром. Совсем. Сводка из пяти предложений заменяет мне двадцать минут пролистывания. Если что-то зацепило — ищу подробности потом, в течение дня. Но утренний ритуал «открыть браузер, кликнуть, пролистать рекламу, кликнуть ещё» исчез. И я не скучаю по нему.
Второе: голосовое восприятие новостей отличается от текстового. Когда читаешь — глаз цепляется за заголовки, пропускает детали, сканирует. Когда слушаешь — информация поступает последовательно, и мозг обрабатывает её иначе. Я стал лучше запоминать содержание. Не потому что голос лучше текста, а потому что слушаю внимательнее, чем читаю.
Третье: локальность даёт спокойствие. Я знаю, что мои данные не ушли на сервер. Что никто не анализирует мои интересы. Что завтра сервис не закроется, не изменит тариф, не введёт ограничения. Агент будет работать, пока работает ноутбук. Это редкое ощущение контроля в мире подписок и облаков.
Четвёртое: агент не идеален. Иногда модель пропускает действительно важную новость. Иногда формулировка звучит чуть коряво. Иногда синтезатор ставит ударение не туда. Но эти мелочи не перевешивают пользу. Как не идеален диктор на радио, который иногда запинается. Это не повод отказываться от радио.
Пятое: я стал лучше понимать, как работает железо внутри моего ноутбука. Не абстрактно, из обзоров и спецификаций. А практически: что такое SMU, как загружается прошивка, почему драйвер общается с железом именно так, а не иначе. Инцидент с зависанием научил меня. Иногда лучший способ понять систему — сломать её и починить.
Куда движется рынок локальных нейросетей
Я вижу, как меняется ландшафт. И хочу поделиться наблюдениями, которые кажутся мне важными.
Ещё два года назад локальный запуск модели на четыре миллиарда параметров был экзотикой. Требовал дискретную видеокарту с двенадцатью гигабайтами памяти, много ручной настройки, терпения. Сейчас это делается на ноутбуке со встроенным нейросетевым процессором за пятнадцать минут. Без видеокарты. Без облака. Без подписки.
Через два-три года NPU станет стандартом. Не опцией. Не маркетинговым ходом. Стандартом, как сейчас встроенный графический чип. Каждый процессор будет иметь нейросетевой блок. Каждый ноутбук сможет запускать локальную модель. Каждый пользователь сможет собрать своего агента.
Это изменит парадигму. Сейчас мы привыкли, что интеллект — это облако. Запрос ушёл на сервер, ответ пришёл обратно. Через три года интеллект станет локальным. Не вместо облака — а рядом с ним. Для повседневных задач — локальный. Для сложных — облачный. Как сейчас: для простых вычислений калькулятор в телефоне, для сложных — сервер.
Малоизвестный факт, который я узнал из технической документации: архитектура AIE в XDNA2 поддерживает не только матричные умножения, но и векторные операции, скалярные вычисления и даже простейшие операции с плавающей запятой. Это значит, что теоретически на NPU можно запускать не только нейросети, но и другие параллельные задачи. Например, обработку сигналов, криптографию, сжатие данных. Пока это не реализовано на уровне пользовательского API, но аппаратная возможность есть. Через поколение-два, возможно, мы увидим, как NPU используется не только для ИИ, но и для ускорения мультимедиа, шифрования и других задач.
Ещё один факт: в индустрии идёт тихая стандартизация. Несколько крупных производителей работают над единым программным интерфейсом для нейросетевых процессоров. Аналог того, что сделал один из графических стандартов для GPU (я конечно про CUDA). Когда это произойдёт, приложение, написанное для NPU одного вендора, будет работать на чипе другого без перекомпиляции. Мы к этому идём. Медленно. Но идём.
Итоговые рекомендации: что делать прямо сейчас
Если вы дочитали до этого места, значит, тема вам интересна. Вот конкретные шаги, которые я рекомендую.
Если у вас уже есть ноутбук с NPU AMD. Проверьте, что драйвер установлен. Запустите xrt-smi examine. Если устройство видно — поставьте FastFlowLM, загрузите Qwen3-4B, убедитесь, что инференс работает. Это займёт двадцать минут. После этого вы сможете экспериментировать с локальными моделями без риска для данных.
Если вы выбираете ноутбук. Смотрите на процессоры с индексом «AI» в названии. Убедитесь, что в спецификациях указан именно нейросетевой процессор, а не просто «поддержка ИИ». Проверьте, есть ли поддержка в вашем дистрибутиве. На момент написания статьи можно Fedora и семейство на базе ядра 6.8 и выше.
Если хотите собрать агента. Не усложняйте. Один скрипт. Три зависимости. Один источник новостей. Одна модель. Один голос. Всё остальное — потом. Сначала добейтесь, чтобы цепочка работала от начала до конца. Потом добавляйте источники, настраивайте автозапуск, улучшайте промпт. Эволюция, а не революция.
Если что-то сломалось. Не паникуйте. В девяти случаях из десяти помогает перезагрузка. Не патчите драйвер, если не понимаете, что делаете. Не убивайте процессы через kill -9. Не ставьте патчи, написанные для другой ревизии железа. Если сомневаетесь — перезагрузитесь и начните с чистой диагностики.
Если хотите развиваться дальше. Начните с RAG. Накапливайте архив новостей. Через месяц у вас будет база, по которой можно задавать вопросы. Это уже не просто сводка, а персональная поисковая система по вашим интересам. Локальная. Приватная. Без подписки.
Финальное слово
Эта статья — не инструкция. Это опыт. Мой, конкретный, с ошибками и находками. Я не претендую на то, что описал единственный правильный путь. Есть другие способы собрать новостного агента. Есть другие модели, другие голоса, другие источники. Есть облачные решения, которые проще в настройке. Есть готовые приложения, которые работают из коробки.
Но я выбрал свой путь. Локальный. Приватный. Полностью подконтрольный. Да, он потребовал времени. Да, я сломал NPU по собственной неосторожности. Да, потратил вечер на патчи, которые не могли сработать. Но в итоге я получил то, что хотел: голос, который каждое утро читает мне новости. Без рекламы. Без подписки. Без слежки. Без зависимости от чужого сервера.
И если этот рассказ сэкономит вам время, убережёт от моих ошибок или просто вдохновит попробовать — значит, он написан не зря.
Нажмите кнопку перезагрузки, если что-то пошло не так. И помните: kill -9 — зло. Для процессов, работающих с NPU. Это я запомнил на всю жизнь.
Финальный чек-лист
Для тех, кто хочет убедиться, что всё на месте:
- Файл
~/activate_npu.shсуществует и исполняем - В
~/.bashrcесть строка подключения этого скрипта - Устройство
/dev/accel/accel0существует xrt-smi examineпоказываетNPU Krackan 1flm validateпроходит все проверкиflm listпоказывает моделиflm serve qwen3:4bзапускается без ошибок- Piper установлен, голос
ru_RU-irina-medium.onnxскачан - Скрипт
~/news_agent/news_digest.pyсуществует и запускается - DKMS-модуль установлен и не патчен
- После последних правок драйвера система перезагружалась
- Правило «не убивать
flmчерезkill -9» запомнено навсегда - Таймер автозапуска активен
- Лог
~/.config/news-agent/agent.logпишется корректно - Аудиофайлы сохраняются в
~/.config/news-agent/audio/
Если все пункты отмечены — система работает. Голос читает новости. NPU крутит модель. Вы свободны от подписок, от облака, от чужих серверов. Добро пожаловать в локальный ИИ.
Информация актуальна на сентябрь 2026 года. Версии программного обеспечения, упомянутые в статье: ядро 7.2.7, DKMS-модуль xrt-amdxdna 2.26.0, прошивка NPU 1.1.2.64, Piper TTS 1.8.0, Python 3.14, Fedora 44. При использовании более новых версий отдельные детали могут отличаться, но архитектура решений остаётся прежней.


Добавить комментарий