
اختراقات Google Tensor
أداة وصول مباشر إلى NPU الخاص بـ Google Tensor (DarWINN)، تمت هندستها عكسيًا عبر جيلين: Tensor G2 (Pixel 7، الاسم الرمزي Janeiro) وTensor G3 (Pixel 8، الاسم الرمزي Rio).
كنت أحاول تشغيل استدلال LLM على الهاتف وأردت استخدام NPU الخاص بـ Tensor لتسريعه. وللقيام بذلك، كان عليّ هندسة عكسية لكيفية تشغيل NPU فعليًا، إذ لا توجد واجهة برمجة تطبيقات عامة له — فقط كاميرا Google وخدمات النظام الموقَّعة يُسمح لها باستخدامه.
على طول الطريق، اكتشفت أن NPU لا يساعد في تشغيل نماذج LLM، على أيٍّ من الجيلين: فك تشفير نموذج اللغة مرتبط بعرض نطاق الذاكرة، ويتشارك NPU نفس ناقل الذاكرة مع CPU، لذا لا يكون أسرع في النهاية (~1.81 مللي ثانية/كتلة عبر NPU مقابل 1.57 مللي ثانية عبر CPU على G2؛ و2.01 مللي ثانية مقابل ~1.66 مللي ثانية على G3، لكتلة FFN حقيقية من محول). بالنسبة لحالة الاستخدام الخاصة بي، كان ذلك طريقًا مسدودًا على الشريحتين — LLM يعمل بشكل أفضل على CPU.
لكن أدوات الوصول نفسها تعمل، وNPU هو بالفعل مسرّع قوي للأعباء التي صُمم من أجلها (نماذج الرؤية / CNN، حيث تتناسب الأوزان داخل الشريحة). لم يخدم مشروعي، لكن الآخرين الذين يعملون على رؤية على الجهاز أو أبحاث NPU قد يجدونه مفيدًا — لذلك أطلقه بترخيص MIT.
| المجلد | المحتوى | هل صلاحيات الجذر مطلوبة؟ |
|---|---|---|
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/ — فهو الجزء المفيد الذي لا يتطلب صلاحيات الجذر. المجلدان g2-pixel7//g3-pixel8/ مخصصان لمن يهتمون بمعرفة لماذا لا يُستخدم NPU وكيف تم الوصول إلى العتاد المقفل على أي حال.
يعرض معالجا NPU في الشريحتين نفس سطح واجهة DarWINN API v2 (AddInput/AddOutput/Submit) لكنهما يختلفان في نقطة مهمة واحدة: G2 يعيد مؤشر موتر خام، بينما G3 يغلّف الموترات في مقبض Buffer* غير شفاف يجب الوصول إليه عبر واجهة SizeBytes/MapToHost/FlushCache الخاصة به. راجع g3-pixel8/README_DEMO.md لمعرفة ما يغيّره ذلك عمليًا.
google-edgetpu (الأوزان لكل قناة يتم رفضها).on-device-llm/ لا يحتاج سوى Termux — بدون صلاحيات الجذر. مجلدات NPU تحتاج Pixel 7 (Tensor G2) أو Pixel 8 (Tensor G3) بصلاحيات جذر Magisk · Android 14/16 · Frida 17.x · العملية الهدف com.google.android.GoogleCamera · libedgetpu_util.so — وصول بصلاحيات مالك الجهاز إلى عتادك الخاص، لأغراض البحث والتعلّم.
MIT. مُشارَك كما هو، دون أي ضمان، في حال أفاد أحدًا.