
Google Tensor Cracks
Инструментарий прямого доступа к NPU Google Tensor (DarWINN), созданный в результате обратной разработки двух поколений чипов: Tensor G2 (Pixel 7, кодовое имя Janeiro) и Tensor G3 (Pixel 8, кодовое имя Rio).
Я пытался запустить инференс LLM на телефоне и хотел использовать NPU Tensor для ускорения. Для этого мне пришлось методом обратной разработки выяснить, как на самом деле управляется NPU, поскольку у него нет публичного API — использовать его разрешено только Google Camera и подписанным системным сервисам.
Попутно я выяснил, что NPU не помогает с LLM ни в одном из поколений: декодирование языковой модели ограничено пропускной способностью памяти, а NPU использует ту же шину памяти, что и CPU, поэтому в итоге он не быстрее (~1,81 мс/блок на NPU против ~1,57 мс на CPU на G2; ~2,01 мс против ~1,66 мс на G3 — для реального блока FFN трансформера). Для моего сценария это оказалось тупиком на обоих чипах — LLM лучше работает на CPU.
Но сам инструментарий доступа работает, и NPU действительно является мощным ускорителем для задач, под которые он создавался (модели vision / CNN, где веса помещаются в чип). Мне это не пригодилось, но тем, кто занимается on-device vision или исследованием NPU, может оказаться полезным — поэтому я публикую его под лицензией MIT.
| Папка | Что внутри | Нужен root? |
|---|---|---|
on-device-llm/ | Собственно настройка запуска LLM (llama.cpp + Qwen2.5-1.5B), которую описанная ниже работа с NPU пыталась ускорить. Измеренная скорость в токенах/сек на обоих телефонах. | Нет |
g2-pixel7/ | Доступ к NPU Tensor G2 (Pixel 7, Janeiro) — полный SDK, автономный раннер на C++, запуск кастомных моделей, двунаправленное подтверждение. Оригинальная работа по обратной разработке. | Да |
g3-pixel8/ | Доступ к NPU Tensor G3 (Pixel 8, Rio) — двунаправленное подтверждение, портированное на иной Buffer API G3 (на основе хендлов), плюс повторно измеренный вердикт по пропускной способности FFN. | Да |
Если вам просто нужна локальная LLM на телефоне, начните с on-device-llm/ — это полезная часть, не требующая root. Папки g2-pixel7//g3-pixel8/ — для тех, кому интересно, почему NPU не используется и как вообще удалось получить доступ к заблокированному железу.
NPU обоих чипов предоставляют одинаковый API DarWINN v2 (AddInput/AddOutput/Submit), но различаются одним важным аспектом: G2 возвращает сырой указатель на тензор, а G3 оборачивает тензоры в непрозрачный хендл Buffer*, к которому нужно обращаться через собственный API SizeBytes/MapToHost/FlushCache. О том, что это меняет на практике, см. g3-pixel8/README_DEMO.md.
google-edgetpu (веса с per-channel квантизацией отклоняются).on-device-llm/ не требует ничего, кроме Termux, — root не нужен. Папки с NPU требуют Pixel 7 (Tensor G2) или Pixel 8 (Tensor G3) с root через Magisk · Android 14/16 · Frida 17.x · целевой процесс com.google.android.GoogleCamera · libedgetpu_util.so — доступ владельца устройства к собственному железу для исследований и обучения.
MIT. Распространяется как есть, без гарантий, — вдруг кому-то пригодится.