Benchmark du NPU Qualcomm
Introduction
- Microsoft propose des tablettes Surface équipées de Windows fonctionnant sur des SoC Qualcomm basés sur Arm.
- Ces tablettes sont présentées comme des AI PC et sont censées exécuter des modèles de machine learning plus rapidement et plus efficacement que d'autres systèmes.
- L'auteur s'intéresse beaucoup au matériel de Qualcomm, en particulier au NPU, et a investi beaucoup de temps et de ressources pour porter des applications tierces sur cette plateforme.
- Cependant, il existe très peu d'exemples de code ou de benchmarks permettant aux développeurs externes d'obtenir rapidement des résultats, d'où la mise en place d'un projet indépendant pour démontrer les performances.
- Les performances se sont révélées inférieures aux attentes, et ce benchmark est publié afin de trouver des idées pour réduire la latence.
Installation
Python
- Python est utilisé pour exécuter les scripts de test.
- La version Python du Microsoft Store ne prend pas en charge l'architecture Arm ; il est donc recommandé d'utiliser l'installateur officiel de Python.org.
- Les résultats rapportés ont été obtenus avec Python 3.11.9.
Cmake
- L'outil de build cmake est nécessaire pour compiler Onnx.
- Exécuter la commande
winget install cmake dans Powershell.
Visual Studio
- Visual Studio est nécessaire pour le compilateur.
- Lors du téléchargement et de l'installation de Visual Studio Community Edition, sélectionner la charge de travail
Desktop C++ Development.
Paquets Pip
- Les paquets Python nécessaires peuvent être installés avec la commande
py -m pip install -r requirements.txt.
- La version 1.16 d'Onnx est utilisée pour être compatible avec Qualcomm Onnx Runtime.
Benchmark
Exécution
- Lancer le benchmark :
py benchmark_matmul.py
Comprendre la sortie
- Le runtime Onnx génère d'abord beaucoup de logs.
- Les résultats du benchmark confirment que les résultats numériques du CPU et du NPU correspondent.
- Le CPU atteint 821 Gigaops, la première approche NPU 225 Gigaops, et la seconde 573 Gigaops.
Mesure du benchmark
- Le benchmark exécute 6 grandes multiplications de matrices, similaires aux couches les plus coûteuses en temps dans les modèles de transformeurs tels que Whisper d'OpenAI.
- Le NPU exécute principalement efficacement des modèles quantifiés, et les modèles utilisant des entrées et sorties sur 8 bits sont plus rapides.
Facteurs pouvant prêter à confusion
Limites de calcul
- Les modèles de transformeurs modernes reposent sur de grandes multiplications de matrices, qui peuvent être limitées par la mémoire.
- Les matrices d'entrée sont rendues plus carrées afin de permettre le tuilage et la réutilisation.
Réglages d'alimentation
- Régler les paramètres d'énergie de Windows sur "Performances optimales" et brancher la tablette sur secteur pour exécuter le benchmark.
Topologie du modèle
- Le graphe est généré de manière à refléter les modèles d'IA modernes, tout en étant simplifié pour faciliter l'interprétation.
Erreurs de configuration
- La façon dont le modèle est construit et exécuté peut faire sortir le pilote ou l'implémentation de l'accélérateur des chemins rapides.
Framework Onnx
- Il existe plusieurs moyens d'accéder à l'accélération IA sur Windows, et Onnx semble être le framework le plus adapté.
Interprétation des résultats
- Sur un Snapdragon X 12-core X1E80100, le résultat du NPU est plus lent que celui du CPU.
- Les performances ne représentent que 1,3 % des 45 billions d'ops/s promis dans les supports marketing.
- Sur un GPU Nvidia Geforce RTX 4080 Laptop, l'exécution prend 3,2 ms, soit 2 160 Gigaops.
Résumé de GN⁺
- Les performances du NPU de Qualcomm sont en deçà des attentes et donnent des résultats plus lents que le CPU.
- Il existe un espoir d'améliorations logicielles pour optimiser les performances du NPU.
- Le framework Onnx semble être le meilleur choix pour obtenir des performances d'accélération sur le NPU de Qualcomm.
- Comparé au GPU Nvidia, le NPU Qualcomm affiche des performances nettement inférieures.
2 commentaires
Je pensais que le NPU des Ryzen était un peu plus rapide que le CPU, mais ça m’a complètement coupé l’envie du Snapdragon.
Avis Hacker News
L’écart de performances entre le CPU et le GPU est faible. Il est possible que le problème vienne d’onnxruntime. Le NPU met davantage l’accent sur la faible consommation électrique que sur la vitesse
L’Apple Neural Engine est bien plus rapide que le CPU ou le GPU
Le but du NPU est d’exécuter de petits modèles avec une faible consommation
Déployer un modèle sur un NPU nécessite une optimisation fondée sur le profilage
L’explication sur GitHub est plus utile que le billet de blog
Qualcomm n’autorise pas l’accès direct au NPU
Il pourrait être possible d’utiliser le SDK Qualcomm SNPE
Cet article porte sur un NPU précis, un benchmark précis, ainsi qu’une bibliothèque, un framework précis