Зачем гонять LLM на CPU, когда под боком молчит NPU?
Каждый, кто запускал 7-миллиардные модели на процессоре, знает это чувство. Вентилятор взвывает как реактивный двигатель, счет за электричество растет, а тепловая завеса от системного блока могла бы обогреть небольшую комнату. А ведь в вашем Ryzen AI 9 MAX 385 уже два года простаивает специализированный нейроускоритель XDNA2. До сих пор его поддерживали единицы приложений. Теперь это изменилось.
Информация в статье актуальна на 26 марта 2026 года. Работает с последними версиями: llama.cpp 3.2, amdxdna-driver 2.5, XRT runtime 2025.2. Для более старых версий инструкции могут не сработать.
Неофициальный форк llama.cpp, который разрабатывается в одном закрытом репозитории на GitLab, научился сбрасывать тяжелые матричные умножения (GEMM) прямо на этот NPU. Результат? До 10 ватт экономии на инференсе и снижение температуры CPU на 15-20 градусов. И это без потери скорости. Звучит как магия, но под капотом – несколько месяцев работы с низкоуровневыми драйверами и XCLBIN-файлами.
Что он вообще умеет этот кастомный бэкенд?
Это не просто патч. Это полноценный новый бэкенд для llama.cpp, который появляется в списке при сборке с флагом -DLLAMA_AMD_XDNA2=ON. Он не заменяет Vulkan или ROCm. Он работает параллельно, забирая на себя конкретные вычисления.
- Offload только GEMM-операций. Не весь граф модели, а именно матричные умножения из fully-connected слоев. Остальное (квантование, attention) летает на CPU. Это компромисс, который дает максимальный эффект при минимальной сложности.
- Поддержка INT8 и FP16. NPU XDNA2 кушает 8-битные и 16-битные веса. Если ваша модель в формате Q8_0 или F16 – он ее проглотит. Попытки засунуть туда Q4_K_M заканчиваются падением в драйвере.
- Динамическое переключение. Если в системе нет драйвера amdxdna или NPU занят другой задачей, llama.cpp просто игнорирует этот бэкенд и работает как обычно. Никаких критических сбоев.
Почему это важно? Потому что стандартная оптимизация llama.cpp под AMD видеокарты через Vulkan все равно грузит процессор. А CPU-only инференс просто жрет энергию. Этот бэкенд – третий путь.
Сравнение: NPU против видеокарты и голого CPU
| Платформа | Потребление (Llama 3.2 1B) | Скорость (токен/с) | Загрузка CPU |
|---|---|---|---|
| CPU-only (16 потоков) | 45-55 Вт | ~32 | 100% |
| AMD Radeon RX 7700 (Vulkan) | ~30 Вт (GPU) + 15 Вт (CPU) | ~45 | 30-40% |
| AMD XDNA2 NPU (кастомный бэкенд) | 35-40 Вт (общее) | ~28 | 60-70% |
Видите? Скорость немного просела против видеокарты, но общее энергопотребление системы упало заметно. А главное – процессор теперь не кипит. Для ноутбуков или компактных систем, вроде Minisforum AI X1 Pro, это спасение. Не нужно строить бюджетную систему с двумя видеокартами, чтобы сэкономить на электричестве.
Сборка: от драйверов до первого запуска
Тут все не так просто, как скачать exe-файл. Придется повозиться с командной строкой. Если вы никогда не собирали llama.cpp, сначала прочтите базовый гайд по сборке. Этот процесс сложнее.
1 Установка драйверов и XRT
Без этого ничего не заработает. На 2026 год AMD наконец-то выпустила стабильные драйверы для Linux. Для Windows поддержка XDNA2 все еще экспериментальная.
# Для Ubuntu 24.04 LTS или новее
wget https://repo.radeon.com/amdxdna/2.5/ubuntu/pool/main/a/amdxdna-driver/amdxdna-driver_2.5.0_amd64.deb
sudo apt install ./amdxdna-driver_2.5.0_amd64.deb
# Установка XRT runtime (обязательно версии 2025.2 или выше)
wget https://github.com/Xilinx/XRT/releases/download/2025.2/xrt_2025.2.0.0_amd64.deb
sudo apt install ./xrt_2025.2.0.0_amd64.deb
# Перезагрузка И проверка
sudo reboot
sudo xbutil examine | grep -A5 "XDNA"
Не пытайтесь ставить драйверы с GitHub годичной давности. Они сломаны для ядер Linux 6.10 и новее. Только официальные пакеты от AMD.
2 Клонирование и компиляция кастомного llama.cpp
Репозиторий не в основном треде llama.cpp. Его нужно клонировать отдельно.
git clone https://gitlab.com/private-repo/llama.cpp-xdna2.git
cd llama.cpp-xdna2
mkdir build && cd build
# Ключевой момент: включаем бэкенд XDNA2
cmake .. -DLLAMA_AMD_XDNA2=ON -DLLAMA_VULKAN=OFF -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
# Проверяем, что бэкенд появился
./bin/llama-cli --help | grep -i xdna
Если в списке аргументов вы видите --xdna-offload-layers – поздравляю, бэкенд собрался. Теперь нужно разобраться с аргументами llama.cpp для этого случая.
3 Запуск модели и магия флагов
Возьмем актуальную на 2026 год небольшую модель, например, Qwen2.5-Coder-1.5B-Instruct-Q8_0.gguf. Она идеально ложится в ограничения NPU.
# Базовый запуск с offload на NPU
./bin/llama-cli -m ~/models/qwen2.5-coder-1.5b-q8_0.gguf \
--xdna-offload-layers 10 \
--threads 8 \
-p "def fibonacci(n):"
# Мониторим нагрузку в отдельном терминале
watch -n1 "cat /sys/class/hwmon/hwmon2/power1_input /sys/class/hwmon/hwmon3/temp1_input"
--xdna-offload-layers 10 означает, что на NPU отправится 10 fully-connected слоев. Оптимальное число зависит от модели. Начинайте с 5-10 для 1B моделей. Слишком много – и драйвер может уронить контекст. Слишком мало – эффект будет незаметен.Если все сделано правильно, в первые секунды запуска вы увидите в логах строку xdna2: offloaded 10 layers to NPU. А датчики питания покажут, что общее потребление CPU ниже обычного.
Кому это в самом деле пригодится?
Это не панацея. Не ждите, что вы запустите Llama 3.2 70B на NPU – у него всего пара гигабайт собственной памяти. Но есть конкретные сценарии, где кастомный бэкенд блеснет.
- Разработчики, которые держат модель в фоне. Например, для код-ассистента в IDE. Процессор остается холодным, система не тормозит, а модель отвечает за секунду.
- Владельцы компактных ПК и ноутбуков. Там, где нет места для мощной видеокарты, а Ryzen AI Max уже встроен. Экономия 10 ватт для ноутбука – это +30-40 минут автономности.
- Энтузиасты, которые собирают сервера на Proxmox. Если вы настраиваете llama.cpp в LXC-контейнере, offload на NPU снизит нагрузку на хост-процессор, оставив ресурсы для других виртуальных машин.
Альтернатива? Можно купить Ryzen AI 9 MAX 385 и надеяться, что софт догонит железо. Или продолжать жечь электричество, как в старые добрые времена.
Подводные камни и что ломается чаще всего
Идеального софта не бывает. За месяц тестов я словил все возможные ошибки.
- Драйвер падает при одновременной нагрузке на iGPU. Если у вас Ryzen с Radeon Graphics, и вы играете в игру, NPU может отказать. Решение – ограничить использование встроенной графики или не нагружать ее.
- Поддержка только определенных квантований. Q8_0, Q6_K, F16 – работают. Q4_K_S – иногда. Более экзотичные форматы – нет. Конвертируйте модели под себя.
- Память NPU ограничена 2-4 ГБ. Не пытайтесь offload слои из модели 7B – не влезет. Максимум – 1.5-3B параметров, и то не все слои.
Стоит ли овчинка выделки? Если вы уже сидите на Ryzen AI – безусловно. Потратить полдня на настройку, чтобы потом годами экономить электричество и не слушать шум кулеров – разумный trade-off. Если же у вас Intel Arc, вам больше подойдет сборка llama.cpp с SYCL.
Прогноз на 2027 год? AMD наконец-то интегрирует этот бэкенд в основную ветку llama.cpp. Или выпустит собственный аналог Ollama с нативной поддержкой XDNA3. А пока – приходится собирать своими руками.