inteintegrity2026-10-22

Exécuter des modèles de vision et de langage sur Raspberry Pi 5 avec RK1820

Connectez un accélérateur RK1820 M.2 au Raspberry Pi 5 via PCIe et exécutez MobileNetV2 et Qwen2.5-0.5B localement avec RKNN3 Runtime 1.1.0.

Raspberry PiRK1820RKNN3Rockchip

Le Raspberry Pi 5 peut utiliser un Rockchip RK1820 comme accélérateur d’IA externe via PCIe. Ce projet vérifie toute la chaîne, de l’assemblage et de l’installation du pilote à l’inférence d’un modèle de vision et à la génération locale de texte, sur un Pi 5 équipé d’un module RK1820 M.2 2242.

Le Pi exécute Linux, RKNN3 Runtime et les applications de test. Le RK1820 exécute le modèle. Nous avons vérifié l’inférence MobileNetV2 et la génération de texte Qwen2.5-0.5B avec Runtime 1.1.0 et une fréquence NPU de 166 MHz.

Le guide Rockchip RK1820_RK1828 Raspberry Pi M.2 Quick Start, V1.0.0, décrit les modules RK1820 et RK1828. Le matériel testé ici est un RK1820 2242. Ces résultats ne confirment pas les performances ou la compatibilité de tous les modules RK1828, adaptateurs ou images système.

Matériel et environnement vérifié

ComposantConfiguration testée
HôteRaspberry Pi 5 Model B Rev 1.1
AccélérateurRK1820 M.2 2242 ; le périphérique indique 2560 MB de mémoire
ConnexionNappe PCIe FPC et adaptateur RK_EXT_PIHAT_RK182X
Liaison PCIe5.0 GT/s, x1
SystèmeDebian 13.7 (trixie), ARM64
Noyau6.18.50+rpt-rpi-2712
Paquet d’installationrknn3-rk182x-m2-2242_1.1.0_arm64.deb
Pilote PCIe3.3.1
Firmware du périphérique / API RKNN31.1.0 / 1.1.0
rknn-smi1.3.0
Fréquence NPU166 MHz

Prévoyez un refroidissement pour le Pi et l’accélérateur. Le guide Rockchip recommande l’alimentation USB-C officielle Raspberry Pi de 27W ou une alimentation équivalente adaptée. Vérifiez les exigences d’entrée et les indications des connecteurs de l’adaptateur ; la puissance totale d’un chargeur ne suffit pas à établir sa compatibilité.

1. Assembler et alimenter le matériel

Voir la vidéo d’installation sur YouTube

  1. Débranchez l’alimentation avant de manipuler le module ou la nappe PCIe.
  2. Insérez le RK1820 dans le connecteur M.2 de l’adaptateur et fixez-le avec la vis appropriée.
  3. Reliez le Pi 5 et l’adaptateur avec la nappe PCIe FPC. Vérifiez le sens des contacts et fermez les deux loquets.
  4. Vérifiez le refroidissement et toutes les connexions avant la mise sous tension.
  5. Pour l’adaptateur RK_EXT_PIHAT_RK182X décrit dans le guide, branchez l’alimentation sur l’entrée d’alimentation USB-C de l’adaptateur. Celui-ci alimente tout le système. Alimenter uniquement le port USB-C du Pi peut laisser l’accélérateur hors tension.

Si l’adaptateur possède plusieurs ports USB-C, identifiez l’entrée d’alimentation grâce aux indications de la carte ou à sa documentation avant de brancher la source.

2. Installer le pilote et Runtime

Obtenez auprès du fournisseur de la carte ou du SDK le paquet Debian correspondant au module. Ce projet utilise le paquet 2242 ; pour un module 2280, utilisez le paquet correspondant validé par le fournisseur.

Les commandes suivantes s’exécutent dans un shell Linux sur le Pi. Pour une connexion SSH depuis votre PC, utilisez votre propre nom d’utilisateur, adresse et méthode d’authentification ; ces instructions ne dépendent pas d’un mot de passe par défaut particulier.

bash
mkdir -p ~/rk1820_rk1828
cd ~/rk1820_rk1828

Copiez rknn3-rk182x-m2-2242_1.1.0_arm64.deb dans ce répertoire, puis installez-le :

bash
sudo apt update
sudo apt install -y ./rknn3-rk182x-m2-2242_1.1.0_arm64.deb

L’installateur compile le pilote PCIe et installe le firmware, Runtime, l’outil de gestion et les programmes de test. Vérifiez que la compilation et la configuration du paquet se terminent correctement avant de redémarrer :

bash
sudo reboot

Le Pi doit accéder aux dépôts APT configurés pour obtenir les dépendances telles que DKMS. Si leur téléchargement échoue, la présence du .deb local ne signifie pas que l’installation est terminée. Rétablissez l’accès aux dépôts et relancez l’installation. La compilation exige aussi les en-têtes correspondant au noyau en cours d’exécution ; vérifiez uname -r et /lib/modules/$(uname -r)/build en cas d’échec.

3. Vérifier le périphérique et choisir une fréquence prise en charge

Après le redémarrage et la reconnexion :

bash
lspci -nn
ls -l /dev/pcie-rkep-* 2>/dev/null
sudo rknn-smi info
sudo rknn-smi -v
sudo rknn-smi info -t npu_freq

Notre énumération PCIe comprenait :

text
0001:01:00.0 Processing accelerators [1200]: Rockchip Electronics Co., Ltd RK182x Edge AI Computing Coprocessor [1d87:182a] (rev 01)

Un nœud /dev/pcie-rkep-* doit exister et rknn-smi info doit indiquer RK1820, Online, OK. Notez les versions du pilote, du firmware et de l’API avant les tests.

Notre module 2242 indiquait les fréquences 166, 200, 250 et 300 MHz. Nous avons utilisé 166 MHz pour la validation initiale :

bash
sudo rknn-smi set -t npu_freq -d 0 -s 166
sudo rknn-smi info -t npu_freq

Choisissez une valeur affichée dans la sortie réelle Available NPU Freq de votre périphérique. N’appliquez pas l’exemple à 400 MHz d’un module 2280 à cette configuration 2242.

Si le périphérique n’apparaît pas, examinez séparément la liaison et le pilote :

bash
lsmod | grep rkep
sudo dmesg | grep -iE 'pcie|rkep|rknn' | tail -100

Lors de la première configuration, le pilote était chargé, mais la liaison PCIe externe indiquait link down, aucun endpoint RK n’apparaissait dans lspci et l’initialisation de rknn-smi échouait. Les contrôles suivants ont montré link up, 5.0 GT/s PCIe x1 et l’endpoint RK. Le chargement du pilote ne suffit donc pas à prouver que la liaison matérielle fonctionne. Vérifiez l’alimentation de l’adaptateur et la nappe FPC avant de réinstaller le logiciel à répétition. Les observations disponibles ne permettent pas d’identifier précisément la modification physique ayant rétabli la liaison.

4. Exécuter MobileNetV2

Placez les fichiers correspondants du modèle et des poids dans :

text
~/rk1820_rk1828/MobileNetV2/
├── mobilenetv2-12.rknn
└── mobilenetv2-12.weight

Ce test réutilise la paire MobileNetV2 d’un paquet RKNN3 existant, dans rknn3_models/v1.0.0/cnn/MobilenetV2. Cette paire a terminé l’inférence avec Runtime 1.1.0 ; cela n’établit pas la compatibilité de tous les anciens modèles. Obtenez des modèles préconvertis compatibles auprès du fournisseur du SDK ou utilisez le téléchargement des modèles RKNN3 (code d’accès : rknn) et vérifiez les noms et instructions fournis.

Exécutez sur le Pi :

bash
cd ~/rk1820_rk1828/MobileNetV2
sudo rknn3_model_test \
  mobilenetv2-12.rknn \
  mobilenetv2-12.weight \
  0x1 '' '' 0 1

L’outil 1.1.0 installé attend core_mask juste après le chemin des poids. Les arguments vides omettent les fichiers d’entrée et de sortie de référence ; 0 choisit la forme et 1 exécute une boucle. Consultez rknn3_model_test --help si votre version diffère de ce projet ou de l’ancien guide.

Une exécution réussie affiche l’initialisation du modèle, All 1 loops completed successfully et le temps moyen d’exécution. Lors d’une mesure à 166 MHz, le modèle a pris 11.343 ms, pour un total de 12.249 ms par boucle avec la synchronisation des entrées et sorties.

Cette commande utilise une entrée aléatoire et ignore la comparaison avec des sorties de référence. Elle vérifie le chemin d’inférence, pas la précision de classification. Ces mesures ponctuelles ne constituent pas un benchmark de débit soutenu.

5. Générer du texte avec Qwen2.5-0.5B

Dans le téléchargement des modèles RKNN3, saisissez le code rknn et ouvrez :

text
RKNN3_SDK/rknn3_models/v1.1.0/llm/Qwen2.5-0.5B

Copiez les quatre fichiers de cette même version dans le répertoire de travail du Pi. Conservez les noms officiels, sans le suffixe -Instruct utilisé dans l’ancien guide :

text
~/rk1820_rk1828/Qwen2.5-0.5B/
├── Qwen2.5-0.5B.rknn
├── Qwen2.5-0.5B.weight
├── Qwen2.5-0.5B.tokenizer.gguf
└── Qwen2.5-0.5B.embed.bin

Les quatre fichiers représentent environ 632 MB (603 MiB). Vérifiez la taille téléchargée et l’intégrité du transfert ; ne mélangez pas un ancien modèle avec le fichier embedding d’un autre modèle.

Exécutez :

bash
cd ~/rk1820_rk1828/Qwen2.5-0.5B
sudo rknn3_session_test \
  Qwen2.5-0.5B.rknn \
  Qwen2.5-0.5B.weight \
  Qwen2.5-0.5B.tokenizer.gguf \
  Qwen2.5-0.5B.embed.bin \
  2048 256 0xff

Ce modèle fournit une configuration de contexte de 2048 tokens ; nous utilisons donc 2048 plutôt que 1024 dans l’ancien guide. L’argument suivant limite la génération à 256 nouveaux tokens, puis vient le masque des cœurs.

Le programme du fournisseur exécute automatiquement des questions intégrées ; la commande n’accepte pas de question comme argument positionnel. Les tests d’origine comprennent des questions sur la relativité en chinois et en anglais. Pour la vidéo destinée à la communauté anglophone, nous avons uniquement remplacé la question chinoise du programme local par Explain the basic concepts of relativity. et conservé une sauvegarde. Cette adaptation de présentation n’est pas nécessaire à l’exécution du modèle ; une installation non modifiée peut toujours afficher le test chinois en premier.

Vérifiez la présence d’un texte lisible, des statistiques et de END TEST. Atteindre la limite de nouveaux tokens est normal si la réponse dépasse 256 tokens.

ObservationRésultat enregistré
Fréquence NPU166 MHz
Contexte / nouveaux tokens maximum2048 / 256
Génération du test anglais 1255 tokens décodés en 3820.02 ms ; 66.75 tokens/s
Génération du test anglais 2255 tokens décodés en 3821.18 ms ; 66.73 tokens/s
Code de sortie0
Périphérique après le testOnline / OK

Les vitesses correspondent aux statistiques Generate de l’outil. Elles excluent le prefill et l’initialisation du modèle et varient selon les questions, les paramètres, la fréquence et la version du modèle. L’outil indique 256 tokens de sortie, mais compte 255 tokens dans la phase Generate chronométrée ; le tableau préserve cette distinction.

Ce que démontre ce projet

La configuration Pi 5 + RK1820 vérifiée permet un test d’inférence CNN et une génération locale de texte via RKNN3 Runtime. Elle peut servir de base à une application où le Pi gère les entrées, l’orchestration et l’interface utilisateur, tandis que le RK1820 exécute l’inférence. Les tests de stabilité prolongés et les vérifications de précision propres à l’application restent distincts de cette validation initiale.