Backend personnalisé llama.cpp décharge la multiplication matricielle des LLM vers le NPU AMD XDNA2 sur Ryzen AI MAX 385

Backend Personnalisé pour le Délestage vers le NPU AMD XDNA2
Un développeur a créé un backend personnalisé pour llama.cpp qui envoie directement les opérations GEMM vers le NPU AMD XDNA2 sur le Ryzen AI MAX 385 (Strix Halo). Cette approche évite l'utilisation de l'iGPU et les conflits de mémoire partagée.
Configuration Matérielle et Logicielle
Modèle : Meta-Llama-3.1-8B-Instruct Q4_K_M
Matériel : Ryzen AI MAX 385, CachyOS 6.19, pilote amdxdna, XRT 2.21.75
Résultats de Performance
- Préremplissage Vulkan + décodage NPU : 930 t/s préremplissage (pp512), 43,7 t/s décodage (tg64), 41,5W puissance moyenne, 0,947 J/tok
- Vulkan uniquement : 833 t/s préremplissage, 41,6 t/s décodage, 52,2W puissance moyenne, 1,3 J/tok
- CPU uniquement : 4,6 t/s préremplissage, 3,76 t/s décodage
Le chemin de décodage via le NPU économise environ 10W par rapport au Vulkan seul tout en maintenant (et en dépassant légèrement) le débit de décodage, car l'iGPU reste libre pour d'autres tâches.
Pile Technique
- Noyaux : mlir-aie xclbins (Xilinx/mlir-aie, Apache 2.0)
- Distribution d'exécution : XRT 2.21.75
- Base : Fork de ggml-org/llama.cpp (MIT)
- Routage des noyaux : 4 emplacements xclbin couvrant différentes tuiles de dimension K avec routage MIN_N/MAX_N pour sélectionner le noyau approprié à l'exécution
Investigation sur le Plafond de Performance
Le développeur a tenté de dépasser 43,7 t/s en décodage avec plusieurs approches :
- Balayage par lots N=1..64 : Aucune amélioration (performance plate)
- Double quantification Int4 : A détruit le SNR (44,8 → 19,7 dB) - impasse
- Délestage en cascade : Exclu par la documentation AMD
- Décodage spéculatif avec le brouillon Llama-3.2-1B : Taux d'acceptation de 44 %, 212 t/s pour le brouillon, mais gain effectif nul
L'absence d'amélioration avec le décodage spéculatif (qui apporte normalement des gains avec un taux d'acceptation de 44 %) indique que le goulot d'étranglement est la bande passante LPDDR5, et non le calcul. Le NPU atteint déjà le mur mémoire, faisant de 43,7 t/s le plafond pour ce modèle sur ce matériel.
Liens du Projet
- GitHub : https://github.com/BrandedTamarasu-glitch/OllamaAMDNPU
- Journal des modifications : https://brandedtamarasu-glitch.github.io/OllamaAMDNPU/xdna-npu/
Le projet a été construit avec Claude Sonnet 4.6 / Claude Code, divulgué à des fins de reproductibilité. Le développeur sollicite les retours d'autres utilisateurs exécutant Strix Halo ou Phoenix avec le pilote amdxdna pour comparer le débit de décodage sur des quantifications comparables et déterminer si d'autres configurations XDNA2 rencontrent le même plafond de performance.
📖 Lire la source complète : r/LocalLLaMA
👀 See Also

Développeur Construit un Serveur MCP pour l'Intégration WhatsApp de Claude, Partage les Défis
Un développeur a créé un serveur MCP pour donner à Claude l'accès à de vraies conversations WhatsApp, découvrant que la gestion du contexte des conversations était plus délicate que prévu et nécessitait une base de données pour suivre les conversations.

ATLAS : Pipeline de calcul en temps de test open-source pour Qwen3-14B atteint des performances de codage de niveau frontière
Un étudiant universitaire a développé ATLAS, un pipeline de calcul en temps de test open-source construit autour de Qwen3-14B qui atteint 74,6 % de réussite au premier essai (pass@1) sur les problèmes LiveCodeBench v5 pour environ 0,004 $ par tâche en coûts d'électricité. Le système est lent pour les problèmes complexes mais offre des performances comparables aux modèles de pointe comme GPT-5 (84,6 %) et Claude 4.5 Sonnet (71,4 %).

Steelman R5 : Le modèle 14B affiné surpasse Claude Opus pour la génération de code Ada
Un développeur a affiné Qwen2.5-Coder-14B-Instruct en utilisant QLoRA sur un ensemble de données vérifié par un compilateur contenant 3 430 paires d'instructions Ada/SPARK, obtenant un taux de compilation de 68,6 % sur un benchmark personnalisé contre 42,1 % pour Claude Opus 4.6. Le modèle est disponible via Ollama et tient dans 12 Go de VRAM.

Débogage de la logique de vérification de build de Claude Code : pourquoi la recherche par nom échoue et comment la recherche par empreinte structurelle la corrige
Claude Code a dit à un utilisateur « fonctionnalité non construite » quatre fois en une session — à chaque fois, c'était faux. La solution : remplacer la recherche par nom par une recherche par empreinte structurelle (routes, schémas, outils enregistrés). Astuce pratique partagée.