Qizhi01 · Ascend AI Full-Stack
—— OpenHarmony sur Ascend 310B, et une app de radios propulsée par NPU
Porté OpenHarmony 5.0.3 sur le kit développeur Huawei Ascend 310B, puis créé Ascend X-Ray Expert — une application HarmonyOS qui utilise YOLOv5s sur le NPU pour analyser des radiographies pulmonaires. De l'adaptation des patches noyau jusqu'à ArkUI, ce projet couvre toute la pile des systèmes embarqués.
Contexte
Notre laboratoire possède un kit développeur Qizhi01 équipé d'un NPU Huawei Ascend 310B. D'origine, il ne disposait que d'un SDK Linux — j'ai voulu y faire tourner OpenHarmony et utiliser ce NPU pour des tâches concrètes. Le projet s'est naturellement articulé en deux couches : en bas, le portage système d'OpenHarmony 5.0.3, et en haut, Ascend X-Ray Expert — une application HarmonyOS en ArkTS qui utilise l'inférence YOLOv5s pour détecter des pathologies comme la pneumonie et la tuberculose sur des radiographies thoraciques. Deux chemins d'inférence ont été implémentés : MindSpore Lite sur CPU et CANN ACL sur NPU, tous deux vérifiés et fonctionnels.
Portage Système OpenHarmony
Le chipset Ascend 310B diffère de toutes les cartes officiellement supportées par OpenHarmony, nécessitant une adaptation depuis la base
Éléments adaptés
Utilisation du pilote open-source Panfrost du GPU Mali, implémentation HAL selon l'interface Display Composer VDI d'OpenHarmony
Sortie HDMI avec double affichage, impliquant la gestion de framebuffer et la synchronisation VSync
Pilotes V4L2 pour caméras USB et MIPI CSI, audio ALSA et sortie audio HDMI
Mise en place de CANN, validation des modèles YOLOv5, et exécution réussie du LLM MindIE Qwen3-0.6B sur l'appareil
Détails techniques
- Application de 43 patches sur le tronc OpenHarmony, couvrant le système de build, le framework HDF, GPU 2D/3D, SELinux, Caméra V4L2, Audio ALSA, multi-écran, débogage HDC, gestion d'énergie, etc.
- Compilation/portage de 20+ modules noyau : panfrost.ko (GPU), svm.ko (NPU), Bluetooth/WiFi, divers pilotes V4L2
- Le toybox intégré d'OpenHarmony ne supportant pas awk, tr, etc. requis par Ascend HDK, j'ai également porté bash-5.1 et busybox-1.36.1
build.shpour la compilation en un clic : récupération des sources OpenHarmony → application des 43 patches → compilation complèteformatSD310B.sh, outil de flashage SD pour Linux ou génération d'image pour BalenaEtcher sous Windows
Ascend X-Ray Expert
HarmonyOS 5.0.3 (API15) · ArkTS + ArkUI · Double moteur d'inférence
Détection en cinq classes
Détection d'objets YOLOv5s sur radiographies thoraciques, classifiant en cinq catégories. L'imagerie médicale est un cas d'usage naturel pour l'inférence NPU en périphérie — les hôpitaux ne peuvent pas envoyer les données des patients vers le cloud pour des raisons de confidentialité et de latence.
Double moteur d'inférence
Les deux chemins d'inférence, CPU et NPU, ont été implémentés dans le cadre de l'exercice full-stack :
Utilise le kit MindSpore Lite intégré d'HarmonyOS pour charger les modèles .ms, inférence CPU 2 threads.
Prétraitement (RGBA → float, normalisation) et post-traitement (NMS, IoU) entièrement implémentés en ArkTS.
Côté C++ : dlopen charge libacl_runtime.so, puis aclInit → aclrtSetDevice → aclrtCreateContext → aclrtCreateStream, avec aclmdlLoadFromFile chargeant le modèle .om.
Expose initYoloEngine et runYoloInference à ArkTS via NAPI.
Pipeline d'inférence
Sélection d'image
PhotoViewPicker → redimensionner à 640×640 avec letterbox padding
Prétraitement
RGBA → float32 → normalisation → alimenter le moteur d'inférence
Inférence
NPU via CANN ACL, CPU via MindSpore Lite
Post-traitement
NMS + IoU → filtrer les détections superposées à faible confiance
Affichage
Canvas dessine les boîtes de détection, disposition trois colonnes — image, statistiques, historique
Aperçu de l'Architecture
Pile complète à quatre couches, du matériel à l'application
Matériel
Ascend 310B
CPU ARM + GPU Mali
Accélérateur NPU
Pilotes Noyau
Linux 5.10
panfrost + svm
20+ modules .ko
Couche HAL
OpenHarmony 5.0.3
Display Composer VDI
Gralloc / Audio / V4L2
Application
ArkUI + ArkTS
Ascend X-Ray Expert
CANN NPU + MindSpore Lite
Points Clés
Des patches noyau et l'adaptation HAL au développement d'application ArkUI — la chaîne complète des systèmes embarqués.
MindSpore Lite (CPU) et CANN ACL (NPU) tous deux vérifiés, le NPU offrant une latence d'inférence nettement inférieure.
L'analyse de radiographies exige confidentialité et faible latence — l'inférence NPU en périphérie répond naturellement à ces deux exigences.
Exécution réussie de Qwen3-0.6B via MindIE sur l'Ascend 310B, validant la viabilité des petits LLM sur NPU embarqués.
build.sh automatise la récupération des sources, l'application des patches et la compilation complète pour une reproductibilité simplifiée.
Moteur d'inférence C++ CANN intégré de manière transparente dans la couche applicative ArkTS via NAPI.