
Google Tensor Craque
Outils d'accès direct pour le NPU Google Tensor (DarWINN), rétro-conçus sur deux générations : Tensor G2 (Pixel 7, nom de code Janeiro) et Tensor G3 (Pixel 8, nom de code Rio).
J'essayais de faire tourner l'inférence LLM sur le téléphone et je voulais utiliser le NPU Tensor pour l'accélérer. Pour cela, j'ai dû rétro-concevoir comment le NPU est réellement piloté, car il n'a pas d'API publique — seuls Google Camera et les services système signés sont autorisés à l'utiliser.
En chemin, j'ai appris que le NPU n'aide pas avec les LLM, sur aucune des deux générations : le décodage des modèles de langage est limité par la bande passante mémoire, et le NPU partage le même bus mémoire que le CPU, donc il ne va pas plus vite (~1,81 ms/bloc NPU contre ~1,57 ms CPU sur G2 ; ~2,01 ms contre ~1,66 ms sur G3, pour un bloc FFN réel de transformer). Pour mon cas d'usage, c'était une impasse sur les deux puces — le LLM fonctionne mieux sur le CPU.
Mais les outils d'accès fonctionnent, et le NPU est un accélérateur performant pour les charges de travail pour lesquelles il a été conçu (modèles vision / CNN, où les poids tiennent sur la puce). Cela n'a pas servi mon projet, mais d'autres personnes faisant de la vision embarquée ou de la recherche sur le NPU pourraient le trouver utile — je le publie donc sous licence MIT.
| Dossier | Contenu | Root requis ? |
|---|---|---|
on-device-llm/ | La configuration réelle de service LLM (llama.cpp + Qwen2.5-1.5B) que le travail sur le NPU ci-dessous essayait d'accélérer. Tokens/sec mesurés sur les deux téléphones. | Non |
g2-pixel7/ | Accès NPU Tensor G2 (Pixel 7, Janeiro) — SDK complet, exécuteur C++ autonome, exécution de modèle personnalisé, preuve bidirectionnelle. Le travail de rétro-conception original. | Oui |
g3-pixel8/ | Accès NPU Tensor G3 (Pixel 8, Rio) — preuve bidirectionnelle portée sur l'API Buffer différente (basée sur des handles) du G3, plus le verdict de bande passante FFN re-mesuré. | Oui |
Si vous voulez simplement un LLM local sur votre téléphone, commencez par on-device-llm/ — c'est la partie utile, sans root. Les dossiers g2-pixel7//g3-pixel8/ sont pour les curieux de pourquoi le NPU n'est pas utilisé et comment le matériel verrouillé a été accédé malgré tout.
Les NPU des deux puces exposent la même surface d'API DarWINN v2 (AddInput/AddOutput/Submit) mais diffèrent sur un point important : G2 renvoie un pointeur brut de tenseur, tandis que G3 encapsule les tenseurs dans un handle Buffer* opaque qui doit être accédé via sa propre API SizeBytes/MapToHost/FlushCache. Voir g3-pixel8/README_DEMO.md pour ce que cela change en pratique.
google-edgetpu (les poids par canal sont rejetés).on-device-llm/ ne nécessite que Termux — pas de root. Les dossiers NPU nécessitent un Pixel 7 (Tensor G2) ou Pixel 8 (Tensor G3) rooté avec Magisk · Android 14/16 · Frida 17.x · processus cible com.google.android.GoogleCamera · libedgetpu_util.so — accès propriétaire à votre propre matériel, pour la recherche et l'apprentissage.
MIT. Partagé tel quel, sans garantie, au cas où cela aiderait quelqu'un.