Support du NPU Rockchip RK3576 : Progrès du pilote Rocket sur Radxa ROCK 4D

Rockchip RK3576 open source NPU driver

Selon cnx-software, depuis 2024, le pilote open source du NPU RK3588 développé par Tomeu Vizoso a démontré des performances satisfaisantes en matière de détection d’objets. Avec le passage du temps, ce projet a pris de l’ampleur et est désormais désigné sous le nom de pilote Rocket au sein du noyau Linux principal. Néanmoins, le SoC Rockchip RK3576, bien que similaire en matière de NPU, n’est pas encore soutenu par ce pilote au sein de la branche principale.

Support du NPU RK3576 et mise à jour sur le Radxa ROCK 4D à 7.1-rc5

La situation présente, toutefois, de bonnes nouvelles : Ga Hing Woo, un développeur engagé, a entrepris des travaux pour intégrer le NPU Rockchip RK3576 dans le noyau principal de Linux en exploitant la pile de pilotes Rocket. Lors de ses essais sur le Radxa ROCK 4D avec la version Linux 7.1-rc5, il a dû recourir à des techniques de rétro-ingénierie en raison de certains registres non documentés présents dans le TRM.

Pilote NPU open source Rockchip RK3576

Ingénierie inverse et défis techniques : résultats exacts obtenus à 8 bits

Dans un échange d’e-mails, Ga Hing Woo, également connu sous le nom de Jiaxing Hu, a abordé de nombreux défis rencontrés. Notamment, une seule convolution en int8 correspond exactement aux valeurs en octets comparées à une référence CPU sur la stack ouverte. Pour réaliser cela, un processus d’ingénierie inverse des registres de calcul a été nécessaire, car le TRM ne fournit aucune information à cet égard. Une recherche sur des termes comme « CNA », « CMAC » ou « convolution » dans le document de 4 381 pages n’a donné aucun résultat pertinent.

Les couches de traitement enchaînées continuent de rencontrer des problèmes, et plutôt que de faire des suppositions, il a fallu du temps pour analyser ces obstacles. Par exemple, le bit 16 de l’exécuteur CNA/CORE/DPU ne s’active jamais lors des tâches liées, indiquant un état de séquenceur sous-MMIO inaperçu par le pilote. Cela a conduit à des résultats défavorables, sans que cela ne soit considéré comme une solution à revendiquer.

Un autre développeur, connu sous le nom de MidG971, a fait face à des difficultés similaires concernant le RK3568, en venant d’une autre puce. Ce constat a motivé Ga Hing Woo à partager ses découvertes au lieu de les garder pour lui.

Le document technique produit, intitulé « Bringing Up the RK3576 NPU on Mainline Linux: A Byte-Exact Single-Task Path and a Falsification-First Negative Result on Chained-Task Compute », fournit des chiffres précis, mesurant des éléments techniques plutôt que des projections théoriques. Son contenu est probablement destiné à un public déjà familiarisé avec ce genre de NPU.

Le code source ainsi que les indications pour l’installation du noyau principal du NPU RK3576 sur le Radxa ROCK 4D sont accessibles sur GitHub. De plus, il a été possible d’intégrer le runtime RKNPU/RKLLM pour exécuter des modèles de langage localement et des applications de vision, tout cela sur un noyau principal (Kiln). Cela démontre que les correctifs écrits permettent au pilote du fournisseur de fonctionner, même si le pilote Rocket open source n’est pas encore totalement opérationnel pour le RK3576. Sur le SBC ROCK 4D, les performances enregistrées sont notables : Llama-3.2-1B atteint environ 13 tok/s, Qwen2.5-1.5B atteint environ 9 tok/s et MobileNet fonctionne à environ 169 fps.