🛠 Exploiter le NPU 5 TOPS de l'A311D pour l'inférence embarquée
Objectifs
L'Amlogic A311D embarque un NPU annoncé à 5 TOPS — l'argument du BPI-CM4 face à un CM4 Broadcom : le vendor insiste sur l'absence d'accélérateur externe type Google Coral. Mais la pile NPU vit du côté des binaires Amlogic/BSP, pas du noyau mainline : la voie recommandée par le wiki est d'amorcer une image rootfs Khadas VIM3 (même SoC A311D) qui apporte la chaîne de démo NPU complète. Vous allez vérifier la visibilité du NPU selon l'image, amorcer le rootfs VIM3 sur microSD et lancer une inférence de classification, puis comparer CPU (6 cœurs) et NPU.
Matériel
- BPI-CM4 + carrier, alimentation 5 V / 3 A
- microSD vierge dédiée au rootfs VIM3 (l'eMMC doit être effacée pour booter la SD, cf. tuto premier boot)
- Image rootfs Khadas VIM3 (liée depuis la section tierces du wiki BPI-CM4) + écran HDMI
- Optionnel : caméra USB pour une détection en direct
Code complet
# 1) Sur l'image vendor (BSP 4.9) : vérifier la présence de la pile Amlogic
dmesg | grep -i -e npu -e mali
ls /dev/ | grep -i -e npu -e vpu
# 2) Amorcer le rootfs VIM3 sur la microSD (même famille meson-g12b)
sudo dd if=vim3-ubuntu-rootfs.img of=/dev/sdX bs=8M status=progress conv=fsync
# 3) Sur le système VIM3 booté : récupérer la suite de démo NPU Khadas
sudo apt update && sudo apt install -y git build-essential
git clone https://github.com/khadas/khadas-fptl && cd khadas-fptl
./install_dependencies.sh && make
# Exécuter une classification MobileNet sur une image
./demo/demo_classification_mobilenet ./model/mobilenet_v1/fp_np/ ./res/cat.jpg
Vérification attendue
La démo imprime les classes ImageNet avec scores et temps d'inférence par image ; refaire la même charge en TFLite sur les 6 cœurs CPU montre l'écart de latence et de consommation. Sur un noyau mainline (Armbian), aucune interface NPU exploitable n'est attendue : c'est une limite documentée, pas une panne.
Erreurs fréquentes
- Attendre un périphérique NPU sous Armbian mainline : la pile Amlogic n'y est pas ; l'alternative côté puce reste le GPU Mali-G52 (Panfrost).
- Confondre NPU et GPU : Panfrost (OpenGL ES/Vulkan) ne fait pas tourner les démos NPU Amlogic.
- Oublier que le rootfs VIM3 est prévu pour du VIM3 : certains périphériques du carrier BPI (mini-PCIe, bouton ADC) peuvent manquer de prise en charge.
- Laisser une eMMC bootable masquer le boot SD du rootfs de démo.
- Faire tourner les démos sans dissipateur : le throttling à 70 °C fausse toute mesure de latence.
Autres tutoriels pour cette carte
- Monter le module BPI-CM4 sur son carrier et réussir le premier boot
- Apprivoiser les LED et la touche ADC du carrier CM4IO
- Mesurer le stockage du BPI-CM4 : eMMC, microSD et le palier NVMe
- Activer I2C, SPI et UART sur le BPI-CM4 : env.txt ou armbianEnv.txt
- Brancher un capteur BME280 sur l'I2C1 du carrier (GPIOX_17/18)
- Déplacer le rootfs sur un SSD NVMe via le port mini-PCIe
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash