Пошаговая настройка NPU AMD Ryzen AI в Fedora: драйвер, прошивка, XRT, FastFlowLM. Реальные ошибки и решения. Актуально на сентябрь 2026.


Развернутый план статьи

Введение

Что такое NPU XDNA2 и зачем он нужен в Linux

  • Архитектура XDNA2: от кремния до программного стека
  • Почему Linux отстаёт от Windows в поддержке NPU
  • Что уже работает в сентябре 2026 года

Подготовка системы: что понадобится перед стартом

  • Требования к железу и ядру
  • Необходимые пакеты и инструменты
  • Настройка репозиториев и обход проблем с зеркалами

Сборка XRT из исходников: ядро программного стека

  • Клонирование репозитория и структура проекта
  • Ошибка cl_icd_dispatch_obj и её решение через designated initializers
  • Сборка и генерация RPM-пакетов
  • Установка пакетов и настройка окружения

Драйвер ядра и плагин: связываем userspace с железом

  • Корневой build.sh: что он собирает и как
  • DKMS: автоматическая пересборка при обновлении ядра
  • Установка плагина и копирование библиотек вручную

Прошивка NPU: без неё ничего не заработает

  • Где искать прошивку и какая версия нужна
  • Установка из репозитория ядра
  • Проверка загрузки прошивки через dmesg

Лимиты памяти: неочевидная причина падения драйвера

  • Ошибка mmap с кодом -11: разбор на атомарном уровне
  • Почему limits.d не работает в графической сессии
  • Правильная настройка через systemd

FastFlowLM: первый запуск языковой модели на NPU

  • Что такое FastFlowLM и чем он отличается от других рантаймов
  • Сборка из исходников на Fedora
  • Конфликт пакетов и обход проблем с репозиториями
  • Валидация и первый чат с моделью

Практический чек-лист: вся настройка в одном списке

Малоизвестные факты о NPU в Linux

FAQ: частые вопросы и короткие ответы

Вывод и рекомендации


Введение

Сентябрь 2026 года. Я сижу перед ноутбуком с процессором AMD Ryzen AI 7 350, работаю в чистой установке Fedora 44, и передо мной стоит задача, которая ещё год назад казалась почти нерешаемой: запустить большую языковую модель на встроенном нейропроцессоре, и хочу без дискретной видеокарты (хотя она есть в ноутбуке NVIDIA® GeForce RTX™ 5060 для ноутбуков с 572 TOPSBoost-частота до 2497МГц
максимальная мощность графики 115Вт с Dynamic Boost c 8ГБ GDDR7, но я хочу использовать модели с расходом энергии в 2 ватта! для NPU), без CUDA, без проприетарных костылей, которые работают только в одной операционной системе.

NPU — нейронный процессор — это отдельный кремниевый блок внутри чипа, спроектированный исключительно для матричных вычислений. В процессорах Ryzen AI он называется XDNA2 и содержит массив из 48 нейропроцессорных элементов, способных выполнять до 50 триллионов операций в секунду при энергопотреблении в разы ниже, чем у встроенной графики. Звучит прекрасно. Но между этим кремнием и реальным чатом с языковой моделью стоит стена из драйверов, прошивок, лимитов памяти и багов, которые не описаны ни в одном официальном руководстве.

Я прошёл этот путь от начала до конца. Собрал драйвер из исходников, столкнулся с ошибкой линковки, которую не удаётся воспроизвести на чистой системе, решил проблему с выделением памяти, которую не понимает ни один стандартный менеджер настроек, и в итоге получил рабочую конфигурацию, в которой языковая модель генерирует текст на скорости около двадцати токенов в секунду, потребляя при этом три ватта вместо сорока, как это делала бы та же задача на встроенной графике, не говоря уже о Nvidia 5060.

Эта статья — не пересказ документации. Это дневник реального опыта с конкретными командами, ошибками и их решениями. Если вы хотите повторить то же самое на своём ноутбуке с Ryzen AI, вам не придётся наступать на те же грабли. Всё, что я делал, описано здесь. Информация актуальна на сентябрь 2026 года и получена на Fedora 44 с ядром серии 7.2.


Что такое NPU XDNA2 и зачем он нужен в Linux

Архитектура XDNA2: от кремния до программного стека

Когда инженеры проектировали процессоры серии Ryzen AI, они заложили внутрь не просто очередное вычислительное ядро, а полноценную систему-на-чипе для инференса нейросетей. Блок, получивший кодовое имя Strix Point, содержит в себе:

  • Процессорные ядра Zen 5 для общего назначения
  • Графическое ядро RDNA 3.5 для мультимедиа и игр
  • Нейропроцессорный массив XDNA2 для ускорения ИИ-нагрузок
  • Контроллер памяти с поддержкой LPDDR5X

Нейропроцессорный массив — это не универсальный вычислитель. Он представляет собой сетку из 48 вычислительных тайлов, каждый из которых содержит векторный процессор, локальную память и маршрутизатор для передачи данных между соседями. Тайлы объединены в блоки по 8 штук, образуя колонки. В моём процессоре — 6 колонок по 8 тайлов, то есть топология 6 на 8. Именно так система и определяет моё устройство: Architecture aie2p, Topology 6×8.

Слово aie2p в выводе диагностики расшифровывается как AIE 2 Plus — второе поколение архитектуры нейронных ядер с расширенным набором инструкций. Это важно, потому что прошивки и инструменты компиляции моделей различаются для разных поколений. Модели, скомпилированные для aie2, не пойдут на aie2p без перекомпиляции.

Программный стек для XDNA2 состоит из четырёх слоёв:

Первый слой — драйвер ядра. Модуль под названием amdxdna, который общается с железом через подсистему DRM (Direct Rendering Manager) — ту же самую, что управляет видеокартами. Драйвер создаёт устройство /dev/accel/accel0 и отвечает за выделение памяти, загрузку прошивки и управление очередями задач.

Второй слой — прошивка. Микрокод, который загружается в память нейропроцессора при инициализации. Без прошивки драйвер не может управлять тайлами. Прошивка лежит в каталоге /lib/firmware/amdnpu/ и имеет версию, привязанную к конкретной ревизии кремния.

Третий слой — среда выполнения. В нашем случае это XRT, или Xilinx Runtime, библиотека, которая абстрагирует работу с устройством и предоставляет программный интерфейс для управления буферами памяти, контекстами и очередями исполнения.

Четвёртый слой — рантайм инференса. FastFlowLM, который берёт скомпилированную модель, загружает её веса, организует конвейер токенов и выдаёт сгенерированный текст пользователю.

Между этими слоями существуют строгие контракты версий. Драйвер версии 2.26.0 ожидает прошивку определённого формата. Рантайм, собранный против одного драйвера, может не понять устройство, созданное другим. Именно в этих стыках и живут все ошибки, с которыми я столкнулся.

Почему Linux отстаёт от Windows в поддержке NPU

На момент написания этой статьи поддержка NPU XDNA2 в Linux выглядит как пазл, который собирают три разные команды, не всегда общающиеся между собой.

Драйвер ядра amdxdna прошёл процесс мейнлайнизации — то есть был включён в официальное дерево ядра. В ядре версии 7.2 он уже присутствует, но это версия 0.10.0 — ранний прототип с ограниченным набором функций. Полноценная поддержка с очередями пользовательских сообщений, изоляцией контекстов и управлением питанием доступна только в версии 2.26.0 из репозитория разработчиков.

Прошивки распространяются через репозиторий ядра, но с задержкой. Прошивка версии 1.1.2.64, необходимая для стабильной работы, появилась в репозитории прошивок только в начале 2026 года.

Рантайм и инструменты инференса разрабатываются отдельно и не имеют прямой связи с мейнлайн-деревом. Это означает, что даже если ядро видит устройство и прошивка загружена, без правильного рантайма вы не сможете запустить ни одну модель.

В результате типичный пользователь, который просто устанавливает дистрибутив и пытается использовать нейропроцессор, получает три из четырёх компонентов из разных источников и в разных версиях. Совместить их вручную — нетривиальная задача.

Что уже работает в сентябре 2026 года

На момент написания статьи список рабочих инструментов выглядит так:

Языковые модели через FastFlowLM работают стабильно. Поддерживаются модели до 7 миллиардов параметров при условии квантизации до 4 бит. Скорость генерации на NPU достигает 25 токенов в секунду для моделей 1-2 миллиарда и около 12 токенов для моделей 7 миллиардов.

Мультимодальные модели работают частично. Поддержка зрения и аудио заявлена в документации, но на практике качество и стабильность пока ниже, чем у текстовых моделей.

Встраивание моделей через ONNX Runtime работает через плагин, но требует отдельной настройки и пока не так стабильно, как прямой запуск через FastFlowLM.


Подготовка системы: что понадобится перед стартом

Требования к железу и ядру

Для повторения этого руководства вам понадобится:

Процессор AMD Ryzen AI 300-й серии. Это может быть Ryzen AI 5 340, Ryzen AI 7 350 или старшие модели. Важно, чтобы внутри был блок XDNA2. Процессоры предыдущих поколений с маркировкой Ryzen AI 100 или 200 имеют более раннюю версию нейропроцессора и требуют других прошивок.

Минимум 16 гигабайт оперативной памяти, у меня 32 гига. Языковые модели, даже квантизованные, требуют существенного объёма для хранения весов и промежуточных состояний. На 8 гигабайтах запустить модель больше одного миллиарда параметров практически невозможно.

Ядро версии 6.10 или новее. В идеале — 7.0 или выше. Драйвер использует интерфейсы подсистемы DRM, которые появились в ядре только в последних версиях. На старых ядрах модуль не соберётся.

Дистрибутив на базе Fedora, Arch или Ubuntu 24.04 и выше. В этом руководстве я использую Fedora 44, но принципы одинаковы для всех. Если вы используете Arch, вам повезло больше: там есть готовые пакеты в репозиториях. Fedora требует ручной сборки.

Необходимые пакеты и инструменты

Перед началом работы убедитесь, что установлены следующие компоненты:

Компилятор и инструменты сборки. Это пакет, который в Fedora называется gcc, а также компилятор для C++, система сборки и утилита для работы с модулями ядра.

Заголовочные файлы ядра, точно соответствующие вашему текущему ядру. Это критически важно. Если у вас установлено ядро 7.2.7, пакет заголовков должен быть именно версии 7.2.7. Несоответствие приведёт к ошибкам сборки модуля.

Библиотеки для работы с видео: пакет, предоставляющий интерфейс прямого доступа к графике, и библиотека для работы с уникальными идентификаторами.

Если вы планируете собирать рантайм с поддержкой мультимедийных возможностей, вам также понадобятся библиотеки видеообработки из репозитория дополнительных пакетов.

Настройка репозиториев и обход проблем с зеркалами

Одна из проблем, с которой я столкнулся почти сразу, — нестабильная работа зеркал пакетного менеджера. При установке зависимостей из репозитория дополнительных пакетов система начала выдавать ошибки таймаута. Соединение с зеркалом устанавливалось, но передача данных прерывалась через несколько секунд.

Решение оказалось простым, но неочевидным. Нужно отключить механизм автоматического выбора зеркал и прописать прямой адрес основного сервера. Для этого выполняются следующие действия.

Сначала подключается репозиторий дополнительных пакетов. Это делается через установку специального пакета, который добавляет конфигурационный файл в каталог репозиториев.

Затем нужно отредактировать конфигурацию репозитория, заменив механизм динамического выбора зеркал на прямую ссылку. В терминале это делается через утилиту управления репозиториями.

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

Отдельная проблема, которая возникла при установке библиотек видеообработки: конфликт между системными пакетами и пакетами из репозитория. Система поставляет свои версии библиотек видеообработки с суффиксом free, которые несовместимы с полными версиями из дополнительных репозиториев. Решение — использовать флаг разрешения удаления при установке, который позволяет пакетному менеджеру удалить конфликтующие системные пакеты и заменить их на полные версии.


Сборка XRT из исходников: ядро программного стека

Клонирование репозитория и структура проекта

Первый компонент, который необходимо собрать, — среда выполнения. Это фундамент всего программного стека. Без него система не увидит устройство, даже если драйвер и прошивка установлены правильно.

Репозиторий содержит несколько подкаталогов. Основной код среды выполнения лежит в подкаталоге, который так и называется. Рядом находятся драйверы ядра, утилиты, тесты и код для работы с нейронными массивами.

После клонирования я перешёл в каталог сборки и запустил скрипт конфигурации. Он принимает набор флагов, которые определяют, что именно будет собрано и куда установлены. Для сборки с поддержкой нейропроцессора нужно передать соответствующий флаг, а также отключить режим строгой обработки предупреждений, потому что на новых компиляторах появляются предупреждения, которые в этом режиме превращаются в ошибки и останавливают сборку.

Ошибка линковки и её решение

Именно на этапе сборки я столкнулся с первой серьёзной ошибкой. Линковщик сообщил, что не может найти символ с определённым именем. Этот символ представляет собой таблицу диспетчеризации — массив указателей на функции, которые реализуют программный интерфейс вычислительных устройств.

Проблема возникает из-за несовместимости между версией заголовочных файлов, которые установлены в системе, и тем, что ожидает код проекта. В новых версиях загрузчика программных модулей структура диспетчеризации изменилась. Старый код инициализирует её позиционно, перечисляя значения в фигурных скобках. Если структура в заголовках содержит больше или меньше полей, чем элементов в списке инициализации, компилятор выдаёт ошибку.

Решение, которое мне помогло, — переписать инициализацию структуры с использованием именованных элементов. Вместо того чтобы перечислять значения по порядку, каждое поле структуры явно указывается по имени. Это делает код независимым от количества и порядка полей в структуре.

Вот как выглядит исправленный фрагмент. Вместо длинного списка значений без имён используется конструкция, где каждая функция привязана к конкретному полю структуры. Неиспользуемые поля автоматически инициализируются нулевыми значениями, и это не вызывает ошибки.

После внесения этого изменения сборка продолжилась без ошибок.

Сборка и генерация пакетов

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

Базовый пакет содержит основные библиотеки, утилиты командной строки и файлы конфигурации. Это минимальный набор для работы с устройствами.

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

Пакет для нейропроцессора содержит дополнительные компоненты, специфичные для работы с массивами нейронных ядер.

Все три пакета устанавливаются через стандартный инструмент управления пакетами. Если менеджер жалуется на отсутствующие зависимости, можно использовать флаг пропуска зависимостей, но в этом случае нужно убедиться, что все необходимые библиотеки уже установлены вручную.

Установка пакетов и настройка окружения

После установки пакетов среда выполнения оказывается в каталоге /opt/xilinx/xrt. Это нестандартное расположение, поэтому нужно вручную прописать пути к библиотекам и исполняемым файлам.

Для библиотек создаётся конфигурационный файл в системном каталоге, и затем обновляется кэш загрузчика библиотек. После этого система может находить библиотеки без явного указания пути.

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

Проверить, что всё настроено правильно, можно командой, которая выводит информацию о версии среды выполнения. Если команда найдена и выводит номер версии — всё в порядке.


Драйвер ядра и плагин: связываем userspace с железом

Корневой скрипт сборки: что он делает

После установки базовой среды выполнения нужно собрать и установить компонент, который связывает её с конкретным устройством. Это делает отдельный скрипт, находящийся в корне репозитория. Он собирает три вещи:

Библиотеку плагина, которая реализует интерфейс среды выполнения для конкретного типа устройств. Эта библиотека называется драйвером пользовательского пространства и содержит всю логику работы с буферами памяти, контекстами и очередями.

Библиотеку для работы с виртуальными устройствами. Она нужна для совместимости с контейнерами и виртуальными машинами.

Модуль ядра, который будет загружаться при старте системы.

Скрипт принимает несколько флагов. Важнейший из них — пропуск сборки модуля ядра. Он нужен в тех случаях, когда вы хотите обновить только пользователискую часть, не трогая работающий модуль ядра. Для первой установки этот флаг не нужен.

Автоматическая пересборка модуля

Когда пакет плагина устанавливается, он автоматически регистрирует модуль ядра в системе динамической сборки. Это означает, что при каждом обновлении ядра модуль будет пересобран автоматически, без вмешательства пользователя.

Процесс выглядит так: система обнаруживает новое ядро, находит зарегистрированные модули, компилирует их заново против новых заголовков и подписывает ключом, если включена проверка подписи модулей.

На практике это работает надёжно. После обновления ядра модуль пересобирался без ошибок, и устройство продолжало работать после перезагрузки. Единственное, на что стоит обратить внимание: при первом запуске система генерирует пару ключей для подписи модулей. Если у вас включена проверка подписей на уровне загрузчика, вам нужно будет импортировать этот ключ при первой загрузке.

Установка плагина и копирование библиотек

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

Чтобы убедиться, что всё на месте, я вручную скопировал файлы библиотек из каталога сборки в системный каталог среды выполнения. После этого обновил кэш загрузчика библиотек.

Проверить, что библиотека доступна, можно командой поиска. Если файл найден и имеет правильные права доступа — всё в порядке.

Затем нужно перезагрузить модуль ядра. Сначала выгружается старый модуль, затем загружается новый. После загрузки команда диагностики должна показать устройство с указанием версии драйвера.


Прошивка: без неё ничего не заработает

Где искать прошивку и какая версия нужна

Прошивка — это микрокод, который загружается в память нейропроцессора при инициализации. Без него драйвер не может управлять вычислительными тайлами, и устройство не перейдёт в рабочее состояние.

Для процессоров серии 300 используется прошивка версии 1.1.2.64. Она хранится в репозитории прошивок ядра в подкаталоге, соответствующем идентификатору устройства. В моём случае идентификатор — 17f0_10, что соответствует кремнию серии Strix.

Установка из репозитория

В большинстве случаев прошивка уже включена в пакет прошивок, который устанавливается по умолчанию. Если команда диагностики показывает версию прошивки и устройство отображается в списке — всё уже на месте.

Если прошивка отсутствует или имеет старую версию, нужно обновить пакет прошивок. В крайнем случае можно клонировать репозиторий прошивок из официального источника и вручную скопировать файлы в системный каталог.

Проверка загрузки

После установки прошивки и перезагрузки модуля нужно проверить системный журнал. В нём должна появиться запись о том, что драйвер загрузил прошивку из файла с определённым именем. Если такой записи нет, значит файл прошивки не найден или имеет неверный формат.

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


Лимиты памяти: неочевидная причина падения драйвера

Разбор ошибки на атомарном уровне

После установки всех компонентов я запустил команду диагностики и получил сообщение об ошибке, которое поставило меня в тупик на несколько минут. Система сообщала, что не может выполнить операцию отображения памяти в адресное пространство процесса. Код ошибки — минус одиннадцать.

Давайте разберём, что произошло на уровне системного вызова.

Операция отображения памяти — это способ, которым программа получает доступ к памяти устройства. Нейропроцессор выделяет область в 64 мегабайта, а программа просит ядро отобразить эту область в своё адресное пространство. Флаги операции указывают, что память должна быть общей между процессом и устройством, зафиксирована по конкретному адресу и заблокирована в оперативной памяти без возможности выгрузки в файл подкачки.

Именно последний флаг — блокировка в оперативной памяти — и стал причиной ошибки. Когда процесс просит ядро заблокировать память, ядро проверяет, не превышает ли объём заблокированной памяти установленный лимит для данного пользователя. Если лимит превышен, системный вызов завершается с кодом ошибки, означающим временную недоступность ресурса.

По умолчанию в большинстве дистрибутивов лимит заблокированной памяти составляет 64 килобайта. Этого достаточно для обычных задач, но совершенно недостаточно для работы с нейропроцессором, который требует блокировки десятков мегабайт для организации прямого доступа к памяти устройства.

Почему стандартная настройка не работает

Первое, что приходит в голову при виде этой ошибки, — увеличить лимит через стандартный механизм. В системе есть каталог, куда помещаются конфигурационные файлы с правилами для подсистемы безопасности, управляющей ограничениями ресурсов.

Я добавил туда файл с указанием неограниченного лимита для своего пользователя. Затем вышел из сессии и зашёл снова. Лимит не изменился.

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

Другими словами, файл с правилами просто не читается тем компонентом, который запускает ваш графический сеанс.

Правильная настройка через системный менеджер

Чтобы лимит применился к графической сессии, нужно прописать его в конфигурации системного менеджера. Для этого есть два файла: один для системных сервисов, другой для пользовательских сессий.

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

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

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


Рантайм для языковых моделей: первый запуск на нейропроцессоре

Что это за инструмент и чем он отличается от других

Существует несколько способов запустить языковую модель на ускорителе. Традиционный путь — использовать среду выполнения с плагином для конкретного типа устройств. Но этот путь требует компиляции модели под конкретную архитектуру и написания обвязки на языке программирования.

Инструмент, который я использовал, работает иначе. Он представляет собой самодостаточный рантайм, который берёт на себя всё: загрузку модели, компиляцию графа вычислений под архитектуру нейропроцессора, управление памятью, генерацию токенов и взаимодействие с пользователем через командную строку или серверный интерфейс.

По сути, это аналог популярных инструментов для запуска моделей локально, но спроектированный исключительно для работы с нейропроцессорами. Он не поддерживает центральные процессоры или видеокарты в качестве основного ускорителя. Всё, что он делает, работает через массив нейронных ядер.

Это даёт два преимущества. Первое — энергоэффективность. Нейропроцессор потребляет в разы меньше энергии при той же производительности инференса. Второе — стабильность. Поскольку рантайм не пытается угодить всем типам устройств, его код проще и надёжнее.

Сборка на Fedora

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

Процесс сборки начинается с установки зависимостей. Нужны инструменты сборки, компилятор, система управления сборкой и библиотеки для работы с видео, которые используются в мультимодальных возможностях.

Далее клонируется репозиторий с подмодулями. Подмодули — это критически важно. Без них сборка не найдёт необходимые компоненты и завершится с ошибкой.

Затем запускается конфигурация системы сборки с указанием пути к установленной среде выполнения. Это нужно, чтобы система сборки могла найти заголовочные файлы и библиотеки.

Если конфигурация прошла успешно, запускается компиляция. На шестнадцати ядрах это занимает около трёх минут. По завершении исполняемый файл устанавливается в системный каталог.

Обход проблем с зависимостями

При сборке на дистрибутиве с самым свежим набором пакетов могут возникнуть конфликты. Библиотеки видеообработки, которые нужны для мультимодальных возможностей, конфликтуют с системными пакетами, поставляемыми дистрибутивом.

Есть два пути решения. Первый — использовать флаг разрешения конфликтов при установке зависимостей. Это удалит конфликтующие системные пакеты и заменит их на полные версии из дополнительных репозиториев.

Второй путь — собрать рантайм без поддержки видео. Если вам нужны только текстовые модели, зависимости для видео не обязательны. Система сборки выдаст предупреждение, но продолжит работу. В этом случае мультимодальные возможности будут недоступны, но текстовые модели будут работать.

Валидация и первый запуск

После установки утилита предоставляет команду диагностики, которая проверяет наличие устройства, версию прошивки, лимиты памяти и готовность среды выполнения к работе.

Если диагностика проходит успешно, можно запускать первую модель. Инструмент поддерживает несколько моделей разного размера. Для первого запуска рекомендую начать с самой маленькой модели на один миллиард параметров. Она скачивается автоматически при первом запуске, занимает около одного гигабайта на диске и генерирует ответ за несколько секунд.

При первом запуске инструмент скачивает скомпилированные ядра модели из облачного хранилища. Для этого нужен доступ в интернет. Если доступ ограничен, ядра можно скачать вручную и поместить в каталог моделей.

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


Серверный режим: интеграция с внешними приложениями

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

Порт по умолчанию — 52625. Модель, указанная при запуске сервера, загружается первой. Если клиент запрашивает другую модель, сервер переключается на неё автоматически.

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


Практический чек-лист

Вот полный список действий, которые нужно выполнить для настройки системы. Я рекомендую сохранить его и отмечать выполненные пункты.

Подготовка системы:

  • Убедиться, что установлена последняя версия дистрибутива с ядром 6.10 или новее
  • Установить компилятор и инструменты сборки
  • Установить заголовки ядра, точно соответствующие текущей версии
  • Установить библиотеки для работы с графикой и идентификаторами
  • Подключить репозиторий дополнительных пакетов, если нужны библиотеки видео

Сборка среды выполнения:

  • Клонировать репозиторий с подмодулями
  • Исправить инициализацию структуры диспетчеризации, если возникает ошибка линковки
  • Запустить сборку с флагом поддержки нейропроцессора
  • Установить сгенерированные пакеты

Установка драйвера и плагина:

  • Запустить корневой скрипт сборки
  • Установить пакет плагина
  • Проверить регистрацию модуля в системе динамической сборки
  • Перезагрузить модуль ядра

Прошивка:

  • Проверить наличие прошивки в системном каталоге
  • Обновить пакет прошивок при необходимости
  • Перезагрузить модуль ядра
  • Проверить загрузку прошивки в системном журнале

Лимиты памяти:

  • Добавить неограниченный лимит в конфигурацию системного менеджера
  • Перезагрузить систему
  • Проверить лимит командой диагностики

Рантайм:

  • Установить зависимости для сборки
  • Клонировать репозиторий рантайма с подмодулями
  • Сконфигурировать сборку с указанием пути к среде выполнения
  • Скомпилировать и установить
  • Запустить диагностику
  • Запустить первую модель

Малоизвестные факты о нейропроцессорах в операционных системах

Факт первый. Подсистема для ускорителей вычислений, через которую драйвер общается с ядром, была создана специально для нейропроцессоров. До появления нейропроцессоров все ускорители — видеокарты, сетевые адаптеры, криптомодули — использовали собственные механизмы взаимодействия с ядром. Универсального интерфейса не существовало. Появление стандартизированного интерфейса для ускорителей стало возможным только тогда, когда на рынке одновременно оказалось несколько типов устройств, нуждающихся в едином подходе.

Факт второй. Прошивка нейропроцессора содержит не только микрокод для тайлов, но и полную операционную систему реального времени. Она управляет планированием задач, переключением контекстов и обработкой прерываний внутри массива. По сути, внутри вашего процессора работает ещё один маленький компьютер, который вы не видите.

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

Факт четвёртый. Архитектура нейронных ядер позволяет выполнять вычисления с точностью до восьми бит без потери качества для большинства задач инференса. Это означает, что модель, которая на центральном процессоре требует восьми гигабайт памяти в формате с плавающей точкой, на нейропроцессоре может уместиться в два гигабайта при квантизации до восьми бит. Это одно из ключевых преимуществ для работы на ноутбуках с ограниченной памятью.

Факт пятый. Системный вызов блокировки памяти, который стал причиной ошибки в этом руководстве, исторически использовался для работы с криптографическими ключами и базами данных. Нейропроцессоры — первый тип массовых потребительских устройств, который требует блокировки памяти в таком объёме. Именно поэтому стандартные лимиты оказываются недостаточными.


Часто задаваемые вопросы

Вопрос первый. Можно ли использовать нейропроцессор одновременно с видеокартой для одной модели?

На текущем уровне развития программного обеспечения — нет. Рантаймы для нейропроцессоров и для видеокарт работают через разные механизмы и не умеют разделять одну модель между двумя устройствами. Вы можете запускать разные модели на разных устройствах, но одну и ту же модель разделить между ними нельзя.

Вопрос второй. Сколько памяти нужно для запуска модели на семь миллиардов параметров?

При квантизации до четырёх бит модель на семь миллиардов параметров занимает около четырёх гигабайт. С учётом промежуточных состояний и служебных данных потребуется около шести гигабайт оперативной памяти. Если у вас 16 гигабайт, это вполне комфортно. Если восемь — будет тесно.

Вопрос третий. Что делать, если после обновления ядра устройство перестало работать?

Система динамической сборки должна автоматически пересобрать модуль при установке нового ядра. Если этого не произошло, проверьте, установлены ли заголовки нового ядра. Если заголовки отсутствуют, модуль не сможет пересобраться. Установите пакет заголовков и запустите пересборку вручную через утилиту управления модулями.

Вопрос четвёртый. Можно ли запустить модель без доступа в интернет?

Да, но с оговорками. При первом запуске рантайм скачивает скомпилированные ядра модели из облачного хранилища. Если доступа нет, ядра нужно скачать заранее на другой машине и поместить в каталог моделей вручную. После этого рантайм будет работать полностью локально.

Вопрос пятый. Какая скорость генерации реалистична для этого процессора?

Для моделей на один миллиард параметров при квантизации до четырёх бит — около двадцати пяти токенов в секунду. Для моделей на три миллиарда — около пятнадцати. Для моделей на семь миллиардов — около двенадцати. Это данные для моего конкретного ноутбука, у других моделей процессоров той же серии цифры могут отличаться на десять-пятнадцать процентов.

Вопрос шестой. Безопасно ли ставить неограниченный лимит заблокированной памяти?

Лимит заблокированной памяти влияет на то, сколько оперативной памяти процесс может исключить из механизма подкачки. Если один процесс заблокирует всю память, система может потерять способность запускать новые процессы или завершить текущие. На практике ни один рантайм инференса не блокирует больше нескольких гигабайт, а неограниченный лимит означает лишь отсутствие искусственного ограничения, а не принудительную блокировку всей памяти.

Вопрос седьмой. Работает ли это на дистрибутивах с фиксированным релизом?

Да, но с оговорками. На дистрибутивах с фиксированным релизом ядро может быть старше, чем требуется для последних версий драйвера. В этом случае нужно либо использовать ядро из тестового репозитория, либо ждать обновления до версии, которая включает нужный драйвер. Остальные компоненты — среда выполнения, рантайм, прошивка — собираются из исходников и не зависят от модели дистрибутива.

Вопрос восьмой. Можно ли использовать нейропроцессор для обучения моделей?

Нет. Архитектура нейронных ядер оптимизирована исключительно для инференса — выполнения уже обученных моделей. Она не поддерживает операцию обратного распространения ошибки, которая нужна для обучения. Для обучения нужны другие типы ускорителей или центральные процессоры с видеокартами.

Вопрос девятый. Что произойдёт, если я подключу внешний монитор или запущу игру во время работы модели?

Нейропроцессор и видеокарта — это независимые блоки внутри одного чипа. Работа модели на нейропроцессоре не влияет на работу видеокарты, и наоборот. Вы можете спокойно играть, работать с графикой или подключать мониторы, не прерывая генерацию текста. Как раз в этом и заключается выгода данного режима, llm спокойно работает в фоне.

Вопрос десятый. Как обновить рантайм и драйвер в будущем?

Для обновления достаточно клонировать новую версию репозитория, пересобрать компоненты и установить обновлённые пакеты. Система динамической сборки автоматически адаптирует модуль ядра к текущей версии ядра. Прошивки обновляются через стандартный пакетный менеджер.


Вывод и рекомендации

Настройка нейропроцессора в операционной системе — это не та задача, которую можно выполнить за десять минут, следуя одному руководству. Это последовательность из шести-семи этапов, каждый из которых может споткнуться о несовместимость версий, конфликт пакетов или неочевидное ограничение безопасности.

Если вы читаете эту статью и планируете повторить настройку, вот мои ключевые рекомендации.

Первая. Начинайте с обновления системы до последней доступной версии. Чем новее ядро, тем больше функций драйвера доступно из коробки, и тем меньше компонентов нужно собирать вручную.

Вторая. Не пропускайте этап проверки лимитов памяти. Это самая частая причина, по которой всё установлено и настроено, но команда диагностики выдаёт ошибку. Если вы видите код ошибки минус одиннадцать при операции отображения памяти — проблема в лимитах.

Третья. Не пытайтесь смешивать версии драйвера и среды выполнения. Собирайте их из одного репозитория в одной версии. Если драйвер имеет версию 2.26, среда выполнения тоже должна быть версии 2.26. Смешение версий приводит к ошибкам, которые очень сложно диагностировать.

Четвёртая. Используйте систему динамической сборки для модуля ядра. Это избавит вас от необходимости пересобирать модуль вручную при каждом обновлении ядра.

Пятая. Если вы работаете на дистрибутиве с фиксированным релизом и не хотите собирать компоненты из исходников, рассмотрите дистрибутив на базе пакетов, где есть готовые пакеты для нейропроцессоров. Это сэкономит время, но лишит вас контроля над версиями компонентов.

Шестая. Начните с самой маленькой модели. Не пытайтесь сразу запустить модель на семь миллиардов. Начните с модели на один миллиард, убедитесь, что всё работает стабильно, а затем переходите к более крупным моделям. Это поможет быстрее выявить проблемы с конфигурацией.

Седьмая. Сохраняйте логи сборки и вывода команд. Если что-то пойдёт не так, логи помогут понять, на каком этапе возникла ошибка. Особенно важно сохранять вывод системного журнала после загрузки модуля и вывод команды диагностики после установки среды выполнения.

В итоге я получил систему, в которой языковая модель генерирует текст локально, без интернета, без облака, с минимальным энергопотреблением. Для работы, для написания текстов, для анализа документов, для генерации кода — всё это теперь работает на ноутбуке.

Это не будущее. Это уже работает. И если вы дочитали до этого места, значит, у вас тоже заработает.



Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *