
Google Tensor Cracks
Herramientas de acceso directo para la NPU Google Tensor (DarWINN), con ingeniería inversa en dos generaciones: Tensor G2 (Pixel 7, nombre en clave Janeiro) y Tensor G3 (Pixel 8, nombre en clave Rio).
Estaba intentando ejecutar inferencia de LLM en el teléfono y quería usar la NPU Tensor para acelerarlo. Para ello tuve que realizar ingeniería inversa de cómo se maneja realmente la NPU, ya que no tiene una API pública — solo la Cámara de Google y los servicios del sistema firmados pueden usarla.
En el proceso aprendí que la NPU no ayuda con los LLM, en ninguna de las dos generaciones: la decodificación del modelo de lenguaje está limitada por el ancho de banda de memoria, y la NPU comparte el mismo bus de memoria que la CPU, por lo que resulta no ser más rápida (~1.81 ms/bloque NPU frente a ~1.57 ms CPU en G2; ~2.01 ms frente a ~1.66 ms en G3, para un bloque FFN de transformer real). Para mi caso de uso, eso fue un callejón sin salida en ambos chips — el LLM funciona mejor en la CPU.
Pero las herramientas de acceso en sí funcionan, y la NPU sí es un acelerador potente para las cargas de trabajo para las que fue construida (modelos de visión / CNN, donde los pesos caben en el chip). No sirvió para mi proyecto, pero otros que trabajen en visión en el dispositivo o investigación de NPU podrían encontrarlo útil — por eso lo publico bajo MIT.
| Carpeta | Qué hay | ¿Requiere root? |
|---|---|---|
on-device-llm/ | La configuración real del servicio LLM (llama.cpp + Qwen2.5-1.5B) que el trabajo de NPU a continuación intentaba acelerar. Tokens/seg medidos en ambos teléfonos. | No |
g2-pixel7/ | Acceso a la NPU Tensor G2 (Pixel 7, Janeiro) — SDK completo, ejecutor independiente en C++, ejecución de modelos personalizados, prueba bidireccional. El trabajo original de ingeniería inversa. | Yes |
g3-pixel8/ | Acceso a la NPU Tensor G3 (Pixel 8, Rio) — prueba bidireccional adaptada a la diferente API de Buffer (basada en manejadores) del G3, más el veredicto de ancho de banda FFN re-medido. | Yes |
Si solo quieres un LLM local funcionando en tu teléfono, comienza con on-device-llm/ — es la parte útil y sin root. Las carpetas g2-pixel7//g3-pixel8/ son para personas curiosas sobre por qué no se usa la NPU y cómo se accedió al hardware bloqueado de todos modos.
Las NPU de los dos chips exponen la misma superficie de API DarWINN v2 (AddInput/AddOutput/Submit) pero difieren en un aspecto importante: G2 devuelve un puntero de tensor sin procesar, mientras que G3 envuelve los tensores en un manejador Buffer* opaco al que se debe acceder a través de su propia API SizeBytes/MapToHost/FlushCache. Consulta g3-pixel8/README_DEMO.md para ver qué cambia eso en la práctica.
google-edgetpu (los pesos por canal son rechazados).on-device-llm/ no necesita nada más que Termux — sin root. Las carpetas de NPU necesitan un Pixel 7 (Tensor G2) o Pixel 8 (Tensor G3) rooteado con Magisk · Android 14/16 · Frida 17.x · proceso objetivo com.google.android.GoogleCamera · libedgetpu_util.so — acceso como propietario del dispositivo a tu propio hardware, para investigación y aprendizaje.
MIT. Compartido tal cual, sin garantía, por si ayuda a alguien.