qbnasasn/Google-Tensor-Chips
GitHub: qbnasasn/Google-Tensor-Chips
提供在已 root 的 Pixel 7 上直接驱动 Google Tensor G2 NPU 的逆向工具集,支持加载和运行自定义量化模型。
Stars: 4 | Forks: 1
# Google Tensor 芯片 — DarWINN NPU 访问
用于 Pixel 7 上 **Google Tensor G2 NPU** (DarWINN / Janeiro) 的直接访问工具。
## 本项目存在的原因
我当时正试图让 **LLM 在手机上运行推理**,并希望利用 Tensor G2 NPU
来加速。为了做到这一点,我不得不逆向工程 NPU 实际的驱动方式,因为它
没有公开的 API —— 只允许 Google Camera 和签名的系统服务使用它。
在这个过程中,我了解到 NPU **对 LLM 毫无帮助**:语言模型解码受限于
内存带宽,而 NPU 与 CPU 共享同一内存总线,因此最终速度并没有提升
(实测在真实的 transformer FFN block 上,NPU 耗时约 1.81 ms/block,而 CPU 约为 1.57 ms/block)。对于
我自己的使用场景来说,这是一条死胡同 —— LLM 在 CPU 上运行得更好。
但访问工具本身是有效的,而且 NPU **确实**是为其构建的
工作负载(视觉 / CNN 模型,其权重可放入片上内存)的强大加速器。它没有服务于我的项目,但
其他进行端侧视觉或 NPU 研究的人可能会觉得它有用 —— 因此我以 MIT 许可证发布它。
## 包含内容
| 文件 | 描述 |
|---|---|
| [`README_DEMO.md`](README_DEMO.md) | 在 NPU 运行 Google Camera 实时推理时,对其进行双向读写访问的演示说明。 |
| [`CUSTOM_MODEL_EXECUTION.md`](CUSTOM_MODEL_EXECUTION.md) | 如何在 NPU 上运行你 **自己** 的量化模型,以及实测的性能极限。 |
| [`resolve_offsets.js`](resolve_offsets.js) | Frida 17.x runtime 符号解析器(跨 APK 版本通用)。 |
| [`darwinn_sdk.js`](darwinn_sdk.js) / [`darwinn_sdk.md`](darwinn_sdk.md) | 封装了 NPU 读取 / 写入 / 注入 / 信息查询的小型 SDK。 |
| [`darwinn_runner.cpp`](darwinn_runner.cpp) / [`darwinn_runner.md`](darwinn_runner.md) | 独立的 C++ 运行器 —— 加载 DGC0 模型,通过 socket 提供推理服务(无需 Frida,无需 GCamera)。 |
| [`janeiro_open_test.cpp`](janeiro_open_test.cpp) | 针对 `/dev/janeiro` 的设备节点打开/探测测试。 |
## 简而言之,我的发现
- NPU 可以直接从已获取 root 权限的设备进行驱动,权限与 Camera 应用相同。
- **它上面可以运行自定义模型**:int8 权重,uint8 I/O,**per-tensor** 量化 → 可以通过
`google-edgetpu` NNAPI 加速器加载(per-channel 权重会被拒绝)。
- **它是计算加速器,而不是内存加速器。** 非常适合视觉/CNN(权重可放入 7.73 MB
的片上 SRAM)。对 LLM 解码没有帮助(受限于带宽,与 CPU 共享 LPDDR5 总线)。
## 环境
Google Pixel 7 · Tensor G2 (DarWINN/Janeiro) · Android 14 · Magisk root · Frida 17.x ·
目标进程 `com.google.android.GoogleCamera` · `/vendor/lib64/libedgetpu_util.so`。
需要 root 权限 —— 这是对你自己的硬件进行设备所有者级别的访问,仅供研究和学习之用。
## 许可证
[MIT](LICENSE)。按原样分享,不提供任何担保,希望能对他人有所帮助。
标签:云资产清单, 人工智能, 数据可视化, 用户模式Hook绕过, 硬件驱动, 移动开发, 边缘计算, 逆向工程