Ascend AI Full-Stack

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

GPU Graphique

Utilisation du pilote open-source Panfrost du GPU Mali, implémentation HAL selon l'interface Display Composer VDI d'OpenHarmony

HDMI & Double Écran

Sortie HDMI avec double affichage, impliquant la gestion de framebuffer et la synchronisation VSync

Caméra & Audio

Pilotes V4L2 pour caméras USB et MIPI CSI, audio ALSA et sortie audio HDMI

Environnement NPU

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.sh pour la compilation en un clic : récupération des sources OpenHarmony → application des 43 patches → compilation complète
  • formatSD310B.sh, outil de flashage SD pour Linux ou génération d'image pour BalenaEtcher sous Windows
Linux 5.10 GPU Panfrost GBM Gralloc DRM/KMS OpenHarmony 5.0.3 Pilotes HDF GN + Ninja 43 Patches Caméra V4L2 Audio ALSA Affichage HDMI SELinux

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.

Pneumonie Bactérienne
Pneumonie Virale
Malade (Autre)
Sain
Tuberculose

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 :

MindSpore Lite (CPU)

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.

CANN ACL (NPU)

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

HarmonyOS 5.0.3 API15 ArkTS ArkUI Modèle Stage YOLOv5s CANN ACL MindSpore Lite NMS NAPI C++ CMake

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

Full-stack de bout en bout

Des patches noyau et l'adaptation HAL au développement d'application ArkUI — la chaîne complète des systèmes embarqués.

Double moteur d'inférence

MindSpore Lite (CPU) et CANN ACL (NPU) tous deux vérifiés, le NPU offrant une latence d'inférence nettement inférieure.

Cas d'usage médical

L'analyse de radiographies exige confidentialité et faible latence — l'inférence NPU en périphérie répond naturellement à ces deux exigences.

LLM sur NPU embarqué

Exécution réussie de Qwen3-0.6B via MindIE sur l'Ascend 310B, validant la viabilité des petits LLM sur NPU embarqués.

Compilation en un clic

build.sh automatise la récupération des sources, l'application des patches et la compilation complète pour une reproductibilité simplifiée.

Pont NAPI

Moteur d'inférence C++ CANN intégré de manière transparente dans la couche applicative ArkTS via NAPI.