Backend personalizado de llama.cpp descarga la multiplicación de matrices de LLM a la NPU AMD XDNA2 en Ryzen AI MAX 385

Backend Personalizado para Descarga en NPU AMD XDNA2
Un desarrollador ha creado un backend personalizado de llama.cpp que envía operaciones GEMM directamente al NPU AMD XDNA2 en Ryzen AI MAX 385 (Strix Halo). Este enfoque evita el uso de la iGPU y la contención de memoria compartida.
Configuración de Hardware y Software
Modelo: Meta-Llama-3.1-8B-Instruct Q4_K_M
Hardware: Ryzen AI MAX 385, CachyOS 6.19, controlador amdxdna, XRT 2.21.75
Resultados de Rendimiento
- Prefill Vulkan + decodificación NPU: 930 t/s prefill (pp512), 43.7 t/s decodificación (tg64), 41.5W potencia promedio, 0.947 J/tok
- Solo Vulkan: 833 t/s prefill, 41.6 t/s decodificación, 52.2W potencia promedio, 1.3 J/tok
- Solo CPU: 4.6 t/s prefill, 3.76 t/s decodificación
La ruta de decodificación del NPU ahorra aproximadamente 10W en comparación con solo Vulkan, manteniendo (y superando ligeramente) el rendimiento de decodificación, ya que la iGPU permanece libre para otras tareas.
Pila Técnica
- Kernels: mlir-aie xclbins (Xilinx/mlir-aie, Apache 2.0)
- Envío en tiempo de ejecución: XRT 2.21.75
- Base: Fork de ggml-org/llama.cpp (MIT)
- Enrutamiento de kernels: 4 ranuras xclbin que cubren diferentes mosaicos de dimensión K con enrutamiento MIN_N/MAX_N para seleccionar el kernel apropiado en tiempo de ejecución
Investigación del Límite de Rendimiento
El desarrollador intentó superar los 43.7 t/s de decodificación con varios enfoques:
- Barrido por lotes N=1..64: Sin mejora (rendimiento plano)
- Int4 doble cuantización: Destruyó SNR (44.8 → 19.7 dB) - callejón sin salida
- Descarga en cascada: Descartada por la documentación de AMD
- Decodificación especulativa con borrador Llama-3.2-1B: 44% tasa de aceptación, 212 t/s borrador, pero ganancia efectiva cero
La falta de mejora con la decodificación especulativa (que normalmente proporciona ganancias con una tasa de aceptación del 44%) indica que el cuello de botella es el ancho de banda de LPDDR5, no el cómputo. El NPU ya está alcanzando el límite de memoria, haciendo que 43.7 t/s sea el máximo para este modelo en este hardware.
Enlaces del Proyecto
- GitHub: https://github.com/BrandedTamarasu-glitch/OllamaAMDNPU
- Registro de cambios: https://brandedtamarasu-glitch.github.io/OllamaAMDNPU/xdna-npu/
El proyecto fue construido con Claude Sonnet 4.6 / Claude Code, divulgado con fines de reproducibilidad. El desarrollador busca comentarios de otros que ejecuten Strix Halo o Phoenix con el controlador amdxdna para comparar el rendimiento de decodificación en cuantizaciones comparables y determinar si otras configuraciones XDNA2 encuentran el mismo límite de rendimiento.
📖 Read the full source: r/LocalLLaMA
👀 Ver también

Port de Go de código abierto de Claude Code CLI lanzado como claw-code-go
El desarrollador dolm09 ha lanzado claw-code-go, un port completo en Go de la CLI de Claude Code con un binario autónomo de menos de 10K líneas de código. El proyecto incluye una TUI con bubbletea, soporte multi-proveedor, cliente MCP y motor de ejecución de herramientas.

Lore: Una herramienta que extrae contexto estructurado de conversaciones de programación con IA.
Lore es una herramienta basada en navegador creada con Claude Code que extrae contexto estructurado de conversaciones de IA, capturando decisiones, pendientes, bloqueos y listas de verificación para retomar. Es una PWA de React + TypeScript con una extensión de Chrome para capturar conversaciones directamente e inyectar contexto.

Claude Code: Cómo conectar tu frontend creado con IA a un backend real
Claude Code construye frontends pulidos pero a menudo usa datos hardcodeados. Aquí hay cuatro formas de conectarlo a backends reales: APIs puras, SDKs, CLIs y MCP.

Autoencoders de Lenguaje Natural: Convirtiendo Representaciones Internas de Claude en Texto
Transformer Circuits Thread publica Natural Language Autoencoders que decodifican las activaciones internas de Claude en texto legible. Repositorio de GitHub y demo interactiva disponibles.