NPU для LLM: что AMD XDNA2 даёт на практике — цифры, методология, выводы
Разработчик собрал кастомный бэкенд llama.cpp для AMD XDNA2 NPU и получил 43.7 t/s декода Llama 3.1 8B при 0.947 J/tok — на 27% энергоэффективнее Vulkan. Разбираю методологию, стек и почему 43.7 — это потолок.
Контекст: NPU в ноутбуках — маркетинг или реальность?
NPU продают как будущее AI на устройствах. AMD XDNA2 в Ryzen AI MAX, Intel Lunar Lake NPU, Apple Neural Engine — у каждого вендора своя версия. Маркетинговые TOPS впечатляют. Реальные бенчмарки на LLM-задачах практически отсутствуют.
Разработчик собрал кастомный бэкенд llama.cpp, который диспатчит GEMM-операции (ядро вычислений в трансформерах) напрямую на XDNA2 NPU в Ryzen AI MAX 385 (Strix Halo). Не через iGPU, не через общую память — напрямую на нейропроцессор. И получил конкретные цифры.
Железо и стек
Процессор: AMD Ryzen AI MAX 385 (Strix Halo) — гибридный чип с CPU, iGPU (Radeon 8060S) и XDNA2 NPU.
Модель: Meta-Llama-3.1-8B-Instruct, квантизация Q4_K_M — 4-битные веса с группировкой, хороший баланс качества и скорости.
ОС: CachyOS (Linux) с ядром 6.19, драйвер amdxdna, рантайм XRT 2.21.75.
Стек: ядра mlir-aie xclbin (Xilinx/mlir-aie, Apache 2.0), рантайм XRT 2.21.75, форк llama.cpp (MIT), 4 xclbin-слота для разных тайлов K-размерности с маршрутизацией по MIN_N/MAX_N.
Результаты: три бэкенда, одна модель
Vulkan prefill + NPU decode: Prefill 930 t/s (pp512), Decode 43.7 t/s (tg64), мощность 41.5 W, 0.947 J/tok.
Vulkan only: Prefill 833 t/s, Decode 41.6 t/s, мощность 52.2 W, 1.3 J/tok.
CPU only: Prefill 4.6 t/s, Decode 3.76 t/s.
Главное здесь — не абсолютная скорость. 43.7 t/s и 41.6 t/s — разница 5%. Главное — энергоэффективность.
NPU-путь потребляет 41.5 Вт против 52.2 Вт на Vulkan: минус 10.7 Вт (−20%). В пересчёте на джоули на токен: 0.947 J/tok против 1.3 J/tok — экономия 27%. При NPU-декоде iGPU свободен для другой работы — рендеринга UI, батарея живёт дольше.
Исследование потолка: почему 43.7 — это предел
Самая ценная часть работы — систематический поиск потолка производительности.
Пакетная обработка (batch sweep N=1..64). Результат: плоская линия. Никакого улучшения при увеличении батча — NPU не упирается в латентность запуска ядер.
Int4 double-quant. Попытка ещё агрессивнее квантизировать: SNR рухнул с 44.8 до 19.7 дБ. Качество деградирует неприемлемо. Тупик.
Каскадный offload. Идея распределить вычисления между несколькими блоками NPU отвергнута на уровне документации AMD — архитектура не поддерживает.
Спекулятивное декодирование. Llama-3.2-1B как draft-модель, 44% acceptance rate, 212 t/s скорость драфта. По теории должен быть выигрыш. На практике — ноль. Эффективный throughput не вырос.
Это ключевой вывод. Спекулятивное декодирование не помогает, потому что bottleneck — не в compute, а в bandwidth. NPU уже упирается в пропускную способность LPDDR5. Модель читает веса из памяти быстрее, чем память может их отдавать. Даже если NPU будет в десять раз быстрее — скорость не вырастет.
43.7 t/s — это потолок для данной модели на данном железе, определяемый памятью, а не процессором.
Что это значит для индустрии
NPU реально работают для LLM. Не маркетинг. Кастомный бэкенд, конкретные GEMM-ядра, измеримый результат. 43.7 t/s для 8B модели — комфортная скорость генерации.
Энергоэффективность — главное преимущество. Не скорость. NPU выигрывает у iGPU в ваттах на токен. Для ноутбуков и edge-устройств это критично.
Memory wall — фундаментальное ограничение. LPDDR5 задаёт потолок. Улучшения придут от: более быстрой памяти (LPDDR5X), более агрессивной квантизации без потери качества, моделей оптимизированных под низкий memory bandwidth.
Путь к mainstream. Сейчас это форк llama.cpp с кастомными ядрами. Но архитектура показывает жизнеспособность подхода. Если AMD или сообщество интегрируют NPU-бэкенд в основной llama.cpp — каждый владелец Ryzen AI получит энергоэффективный инференс из коробки.
Сравнение с другими NPU
Прямых сравнений с Intel Lunar Lake NPU или Apple Neural Engine на тех же моделях пока нет. Контекст: Apple M4 Neural Engine — 38 TOPS, но Apple не открывает прямой доступ для произвольных LLM-ядер. Intel Lunar Lake NPU — 48 TOPS заявленных, LLM-бенчмарки фрагментарны. AMD XDNA2 — 50 TOPS заявленных, теперь есть реальные LLM-бенчмарки.
Академическая работа AMD (arxiv 2512.13282) показывает до 14.71 TOPS для bf16 GEMM на XDNA2. Реальный LLM-инференс — первый публичный результат с конкретными цифрами.
Итог
AMD XDNA2 NPU реально ускоряет LLM-инференс и экономит энергию. 43.7 t/s декода при 0.947 J/tok — конкретный результат, подтверждённый систематическим исследованием потолка. Узкое место — память, а не вычисления. И это определяет направление: не больше TOPS, а быстрее память и умнее квантизация.
Для тех, кто запускает LLM локально на AMD-железе — это первая точка отсчёта с реальными цифрами.