🛠 Exploiter le NPU 5 TOPS de l'A311D pour l'inférence embarquée
Objetivos
El Amlogic A311D incorpora una NPU anunciada con 5 TOPS — el argumento del BPI-CM4 frente a un CM4 de Broadcom: el fabricante insiste en la ausencia de un acelerador externo tipo Google Coral. Pero la pila de la NPU reside en los binarios de Amlogic/BSP, no en el kernel mainline: la vía recomendada por la wiki es arrancar una imagen rootfs de Khadas VIM3 (mismo SoC A311D) que aporta la cadena completa de demostración de la NPU. Verificarás la visibilidad de la NPU según la imagen, arrancarás el rootfs VIM3 desde una microSD y lanzarás una inferencia de clasificación, para luego comparar la CPU (6 núcleos) y la NPU.
Hardware
- BPI-CM4 + placa base, fuente de alimentación de 5 V / 3 A
- microSD virgen dedicada al rootfs VIM3 (el eMMC debe estar borrado para arrancar desde la SD, cf. tutorial de primer arranque)
- Imagen rootfs de Khadas VIM3 (enlazada desde la sección de terceros de la wiki BPI-CM4) + pantalla HDMI
- Opcional: cámara USB para detección en directo
Código completo
# 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
Verificación esperada
La demo imprime las clases de ImageNet con puntuaciones y tiempos de inferencia por imagen; repetir la misma carga con TFLite en los 6 núcleos de la CPU muestra la diferencia de latencia y consumo. En un kernel mainline (Armbian), no se espera ninguna interfaz de NPU utilizable: es una limitación documentada, no un fallo.
Errores frecuentes
- Esperar un dispositivo NPU bajo Armbian mainline: la pila de Amlogic no está disponible ahí; la alternativa a nivel de chip sigue siendo la GPU Mali-G52 (Panfrost).
- Confundir la NPU y la GPU: Panfrost (OpenGL ES/Vulkan) no ejecuta las demos de la NPU de Amlogic.
- Olvidar que el rootfs de VIM3 está previsto para el VIM3: algunos periféricos de la placa base BPI (mini-PCIe, botón ADC) pueden carecer de soporte.
- Dejar un eMMC arrancable que oculte el arranque desde SD del rootfs de demostración.
- Ejecutar las demos sin disipador: el throttling a 70 °C falsea cualquier medición de latencia.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash