
Google Tensor Cracks
Ferramentas de acesso direto para a NPU Google Tensor (DarWINN), com engenharia reversa em duas gerações: Tensor G2 (Pixel 7, codinome Janeiro) e Tensor G3 (Pixel 8, codinome Rio).
Eu estava tentando executar inferência de LLM no telefone e queria usar a NPU Tensor para acelerá-la. Para isso, tive que fazer engenharia reversa de como a NPU é realmente acionada, já que não possui API pública — apenas o Google Camera e serviços de sistema assinados podem usá-la.
No caminho, aprendi que a NPU não ajuda com LLMs, em nenhuma das gerações: a decodificação de modelos de linguagem é limitada pela largura de banda da memória, e a NPU compartilha o mesmo barramento de memória que a CPU, então acaba não sendo mais rápida (~1,81 ms/bloco NPU vs ~1,57 ms CPU no G2; ~2,01 ms vs ~1,66 ms no G3, para um bloco FFN real de transformer). Para meu próprio caso de uso, foi um beco sem saída em ambos os chips — o LLM roda melhor na CPU.
Mas as ferramentas de acesso em si funcionam, e a NPU é um acelerador forte para as cargas de trabalho para as quais foi construída (modelos de visão / CNN, onde os pesos cabem no chip). Não serviu ao meu projeto, mas outros que fazem pesquisa de visão no dispositivo ou de NPU podem achá-la útil — então estou lançando sob MIT.
| Pasta | O que contém | Requer root? |
|---|---|---|
on-device-llm/ | A configuração real de serviço de LLM (llama.cpp + Qwen2.5-1.5B) que o trabalho da NPU abaixo tentava acelerar. Tokens/seg medidos em ambos os telefones. | Não |
g2-pixel7/ | Acesso à NPU do Tensor G2 (Pixel 7, Janeiro) — SDK completo, executor C++ autônomo, execução de modelo personalizado, prova bidirecional. O trabalho original de engenharia reversa. | Sim |
g3-pixel8/ | Acesso à NPU do Tensor G3 (Pixel 8, Rio) — prova bidirecional portada para a API de Buffer diferente (baseada em identificadores) do G3, mais o veredito de largura de banda do FFN remedido. | Sim |
Se você só quer um LLM local rodando no seu telefone, comece com on-device-llm/ — é a parte
útil e sem root. As pastas g2-pixel7//g3-pixel8/ são para pessoas curiosas sobre por que
a NPU não é usada e como o hardware bloqueado foi acessado de qualquer forma.
As NPUs dos dois chips expõem a mesma superfície da API DarWINN v2 (AddInput/AddOutput/Submit)
mas diferem em um aspecto importante: o G2 retorna um ponteiro bruto de tensor, enquanto o G3 envolve tensores em um
identificador opaco Buffer* que deve ser acessado por meio de sua própria API SizeBytes/MapToHost/FlushCache
. Veja g3-pixel8/README_DEMO.md para o que isso muda na prática.
google-edgetpu (pesos por canal são rejeitados).on-device-llm/ precisa apenas do Termux — sem root. As pastas da NPU precisam de um
Pixel 7 (Tensor G2) ou Pixel 8 (Tensor G3) com root via Magisk · Android 14/16 · Frida 17.x · processo alvo
com.google.android.GoogleCamera · libedgetpu_util.so — acesso de proprietário do dispositivo ao seu próprio
hardware, para pesquisa e aprendizado.
MIT. Compartilhado como está, sem garantia, caso ajude alguém.