
Google Tensor Cracks
Direktzugriffs-Tooling für die Google Tensor NPU (DarWINN), reverse-engineert über zwei Generationen: Tensor G2 (Pixel 7, Codename Janeiro) und Tensor G3 (Pixel 8, Codename Rio).
Ich wollte LLM-Inferenz auf dem Telefon zum Laufen bringen und die Tensor-NPU nutzen, um sie zu beschleunigen. Dazu musste ich reverse-engineeren, wie die NPU tatsächlich angesteuert wird, da sie keine öffentliche API hat — nur Google Camera und signierte Systemdienste dürfen sie verwenden.
Dabei habe ich gelernt, dass die NPU bei LLMs nicht hilft, auf keiner der beiden Generationen: Sprachmodell-Dekodierung ist durch die Speicherbandbreite begrenzt, und die NPU teilt sich denselben Speicherbus mit der CPU, sodass sie am Ende nicht schneller ist (~1.81 ms/block NPU vs ~1.57 ms CPU auf G2; ~2.01 ms vs ~1.66 ms auf G3, für einen echten Transformer-FFN-Block). Für meinen eigenen Anwendungsfall war das auf beiden Chips eine Sackgasse — das LLM läuft auf der CPU besser.
| Ordner | Was darin ist | Root erforderlich? |
|---|---|---|
on-device-llm/ | Das eigentliche LLM-Serving-Setup (llama.cpp + Qwen2.5-1.5B), das durch die weiter unten beschriebene NPU-Arbeit beschleunigt werden sollte. Gemessene tokens/sec auf beiden Telefonen. | Nein |
g2-pixel7/ | Tensor G2 (Pixel 7, Janeiro) NPU-Zugriff — vollständiges SDK, eigenständiger C++-Runner, Ausführung benutzerdefinierter Modelle, bidirektionaler Nachweis. Die ursprüngliche Reverse-Engineering-Arbeit. | Ja |
g3-pixel8/ | Tensor G3 (Pixel 8, Rio) NPU-Zugriff — bidirektionaler Nachweis, portiert auf die andere (handle-basierte) Buffer-API des G3, plus das neu gemessene FFN-Bandbreiten-Ergebnis. | Ja |
Wenn du einfach nur ein lokales LLM auf deinem Telefon betreiben möchtest, starte mit
on-device-llm/ — das ist der nützliche Teil ohne Root. Die Ordner g2-pixel7//g3-pixel8/
sind für Leute, die wissen wollen, warum die NPU nicht verwendet wird und wie auf die gesperrte
Hardware trotzdem zugegriffen wurde.
Die NPUs der beiden Chips bieten dieselbe DarWINN-API-v2-Oberfläche (AddInput/AddOutput/Submit),
unterscheiden sich aber in einem wichtigen Punkt: G2 gibt einen rohen Tensor-Zeiger zurück, während G3
Tensoren in einem undurchsichtigen Buffer*-Handle kapselt, das über seine eigene
SizeBytes/MapToHost/FlushCache-API angesprochen werden muss. Siehe
g3-pixel8/README_DEMO.md für die praktischen Auswirkungen.
google-edgetpu-NNAPI-Beschleuniger
(Per-Channel-Gewichte werden abgelehnt).on-device-llm/ benötigt nichts außer Termux — kein Root. Die NPU-Ordner benötigen ein
Magisk-gerootetes Pixel 7 (Tensor G2) oder Pixel 8 (Tensor G3) · Android 14/16 · Frida 17.x ·
Zielprozess com.google.android.GoogleCamera · libedgetpu_util.so — Zugriff als Gerätebesitzer
auf deine eigene Hardware, für Forschung und Lernen.
MIT. So wie es ist weitergegeben, ohne Gewährleistung, falls es jemandem hilft.