
Crack di Google Tensor
Strumenti di accesso diretto per la NPU Google Tensor (DarWINN), reverse-engineered su due generazioni: Tensor G2 (Pixel 7, nome in codice Janeiro) e Tensor G3 (Pixel 8, nome in codice Rio).
Stavo cercando di far eseguire l'inferenza LLM sul telefono e volevo usare la NPU Tensor per accelerarla. Per farlo ho dovuto reverse-engineer come viene effettivamente guidata la NPU, dato che non ha un'API pubblica — solo Google Camera e servizi di sistema firmati possono usarla.
Nel frattempo ho imparato che la NPU non aiuta con gli LLM, su nessuna delle due generazioni: la decodifica del modello linguistico è limitata dalla larghezza di banda della memoria, e la NPU condivide lo stesso bus di memoria della CPU, quindi risulta non più veloce (~1.81 ms/blocco NPU vs ~1.57 ms CPU su G2; ~2.01 ms vs ~1.66 ms su G3, per un blocco FFN reale di un trasformatore). Per il mio caso d'uso è stato un vicolo cieco su entrambi i chip — l'LLM funziona meglio sulla CPU.
Ma gli strumenti di accesso stessi funzionano, e la NPU è un forte acceleratore per i carichi di lavoro per cui è stata costruita (modelli di visione/CNN, dove i pesi stanno nel chip). Non è stato utile per il mio progetto, ma altri che fanno visione su dispositivo o ricerca sulla NPU potrebbero trovarlo utile — quindi lo rilascio sotto licenza MIT.
| Cartella | Cosa contiene | Richiede root? |
|---|---|---|
on-device-llm/ | La configurazione effettiva di servizio LLM (llama.cpp + Qwen2.5-1.5B) che il lavoro sulla NPU qui sotto stava cercando di accelerare. Token/secondo misurati su entrambi i telefoni. | No |
g2-pixel7/ | Accesso NPU Tensor G2 (Pixel 7, Janeiro) — SDK completo, esecutore C++ autonomo, esecuzione di modelli personalizzati, prova bidirezionale. Il lavoro di reverse-engineering originale. | Yes |
g3-pixel8/ | Accesso NPU Tensor G3 (Pixel 8, Rio) — prova bidirezionale portata sulla diversa API Buffer (basata su handle) del G3, più il verdetto ricalcolato sulla larghezza di banda FFN. | Yes |
Se vuoi solo un LLM locale che funzioni sul telefono, inizia con on-device-llm/ — è la parte utile e senza root. Le cartelle g2-pixel7//g3-pixel8/ sono per le persone curiose del perché la NPU non viene utilizzata e di come sia stato comunque possibile accedere all'hardware bloccato.
Le NPU dei due chip espongono la stessa superficie API DarWINN v2 (AddInput/AddOutput/Submit) ma differiscono in un aspetto importante: G2 restituisce un puntatore tensor grezzo, mentre G3 avvolge i tensor in un handle opaco Buffer* a cui si deve accedere tramite la propria API SizeBytes/MapToHost/FlushCache. Vedi g3-pixel8/README_DEMO.md per cosa cambia in pratica.
google-edgetpu (i pesi per-canale vengono rifiutati).on-device-llm/ non necessita di nulla oltre a Termux — senza root. Le cartelle NPU necessitano di un Pixel 7 (Tensor G2) o Pixel 8 (Tensor G3) con root Magisk · Android 14/16 · Frida 17.x · processo target com.google.android.GoogleCamera · libedgetpu_util.so — accesso proprietario al proprio hardware, per ricerca e apprendimento.
MIT. Condiviso così com'è, senza garanzia, nel caso possa aiutare qualcuno.