أصدرت جوجل ليرت جي إس، ربط جافا سكريبت لـ LiteRT. LiteRT هي مكتبة الاستدلال الموجودة على الجهاز من Google، والتي كانت تسمى سابقًا TensorFlow Lite.

يتم تشغيل LiteRT.js .tflite النماذج مباشرة داخل المتصفح. نظرًا لأن الاستدلال يظل محليًا، تشير Google إلى خصوصية المستخدم المحسنة، وتكاليف الخادم الصفرية، وزمن الاستجابة المنخفض للغاية.

ما هو LiteRT.js؟

إنه ليس تنسيق نموذج جديد. بدلاً من ذلك، قامت Google بتجميع وقت التشغيل الأصلي الحالي الخاص بها إلى WebAssembly وعرضه على JavaScript.

اعتمدت حلول الويب السابقة للذكاء الاصطناعي، بما في ذلك TensorFlow.js، على النواة المستندة إلى JavaScript. تصف جوجل تلك الأجهزة بأنها أقل أداءً. بدلاً من ذلك، يقوم LiteRT.js بشحن وقت التشغيل الأصلي عبر الأنظمة الأساسية مع تحسيناته سليمة.

وبالتالي، ترث تطبيقات الويب العمل المنجز في مكان آخر. تصل ترقيات الأداء وتحسينات القياس وتحسينات الأجهزة المصممة لنظام التشغيل Android وiOS وسطح المكتب إلى الويب أيضًا.

كيف يعمل: وقت تشغيل واحد، وثلاث واجهات خلفية

في ظل وقت التشغيل هذا، يستهدف LiteRT.js ثلاث واجهات خلفية:

  • وحدة المعالجة المركزية الاستخدامات XNNPACK، مكتبة وحدة المعالجة المركزية المحسنة من Google، مع دعم متعدد الخيوط وبنية SIMD مريحة.
  • GPU الاستخدامات مل الانجراف، حل وحدة معالجة الرسومات على الجهاز من Google، قيد التشغيل WebGPU.
  • NPU يستخدم واجهة برمجة تطبيقات ويب إن، تجريبي حاليًا في Chrome وEdge.

هناك قاعدتان مرتبطتان تحكمان الإرسال. أولاً، لا يدعم LiteRT.js التفويض الجزئي. لا يمكن تقسيم الرسم البياني عبر وحدة المعالجة المركزية ووحدة معالجة الرسومات.

ثانيًا، التفويض هو كل شيء أو لا شيء لكل نموذج. إذا لم يكن من الممكن تفويض النموذج بالكامل إلى المسرع المختار، فسيتم الرجوع إلى LiteRT wasm تنفيذ. يتمتع مسار وحدة المعالجة المركزية بأكبر تغطية للمشغل.

أداء

وبالنظر إلى تلك الواجهات الخلفية، أبلغ فريق Google عن نتيجتين مختلفتين.

مقارنة بأوقات تشغيل الويب الأخرى، فإن LiteRT.js قادر على تحقيق ذلك أسرع 3 مرات عبر استنتاج وحدة المعالجة المركزية ووحدة معالجة الرسومات. يغطي هذا الرقم رؤية الكمبيوتر الكلاسيكية ونماذج معالجة الصوت.

مقابل تنفيذ وحدة المعالجة المركزية (CPU) الخاصة بها، توفر وحدة معالجة الرسومات (GPU) أو وحدة المعالجة العصبية (NPU) أ تسريع 5-60x. ينطبق ذلك على العمل المطلوب في الوقت الفعلي مثل تتبع الكائنات والنسخ الصوتي.

تم تشغيل كلا المعيارين في بيئة متصفح خاضعة للرقابة على جهاز MacBook Pro موديل 2024 مزود بـ M4 Apple Silicon. تختلف نتائج ملاحظات Google باختلاف وحدة معالجة الرسومات المحلية والاختناق الحراري وتحسين برنامج التشغيل. لا يظهر الرقم “10x” الذي يتم تداوله بجانب الإطلاق في الإعلان.

الحصول على نموذج PyTorch في

لايت آر تي الشعلة يحول نماذج PyTorch إلى .tflite في خطوة واحدة.

ومع ذلك، فإن الشروط المسبقة صارمة. يجب أن يكون النموذج الخاص بك قابلاً للتصدير باستخدام torch.export.export، وهذا يعني أن TorchDynamo قابل للتصدير. لا يمكن أن تحتوي على فروع بايثون الشرطية التي تعتمد على قيم موتر وقت التشغيل. كما لا يمكن أن تحتوي على أبعاد إدخال أو إخراج ديناميكية، بما في ذلك بُعد الدُفعة.

بالنسبة للحجم، الذكاء الاصطناعي حافة الكمي تكوين مخططات التكميم عبر طبقات النموذج المختلفة. مُدرب مسبقًا .tflite النماذج متاحة أيضًا على Kaggle وLiteRT Hugging Face Community.

الحد الأدنى من خط الأنابيب

بمجرد التحويل، يصبح رمز وقت التشغيل قصيرًا. هذا هو مسار WebGPU، الذي تم التحقق منه @litertjs/core الإصدار 2.5.2:

import {loadLiteRt, loadAndCompile, Tensor} from '@litertjs/core';

// Wasm files live in node_modules/@litertjs/core/wasm/ or on a CDN.
await loadLiteRt('path/to/wasm/directory/');

const model = await loadAndCompile('path/to/model.tflite', {
  accelerator: 'webgpu', // 'wasm' | 'webgpu' | 'webnn'
});

const input = new Tensor(new Float32Array(1 * 3 * 224 * 224), [1, 3, 224, 224]);
const results = await model.run(input);

// Accelerator results live off-heap. Move to CPU, then convert.
const cpuTensor = await results[0].moveTo('wasm');
const output = cpuTensor.toTypedArray();

// LiteRT.js uses manual memory management. Delete every tensor.
input.delete();
for (const t of results) t.delete();
cpuTensor.delete();

هذه الكتلة الأخيرة تستحق الاهتمام. يفعل LiteRT.js ذلك لا الموترات جمع القمامة. كل Tensor يجب حذفه بشكل صريح، وإلا فإن التطبيق يسرب ذاكرة الجهاز. يحذف المقتطف الموجود في منشور إعلان Google هذه الخطوة.

يحتاج WebNN إلى علامة إضافية واحدة. يتطلب LiteRT.js JSPI، الذي يربط بين جدولة kernel المتزامنة واستقصاء الأجهزة غير المتزامنة:

await loadLiteRt('path/to/wasm/', {jspi: true});

const model = await loadAndCompile('model.tflite', {
  accelerator: 'webnn',
  webNNOptions: {devicePreference: 'npu'}, // 'cpu' | 'gpu' | 'npu'
});

قبل كتابة المعالجة المسبقة، قم بالاختبار باستخدام مدخلات وهمية. يجري npm i @litertjs/model-tester، ثم npx model-tester. يقوم بتشغيل النموذج الخاص بك على WebNN وWebGPU ووحدة المعالجة المركزية باستخدام مدخلات عشوائية. يستخدم model.getInputDetails() لقراءة أسماء الإدخال والأشكال.

استخدام الحالات مع الأمثلة

تدعم واجهات برمجة التطبيقات هذه أربعة عروض توضيحية تم شحنها بواسطة Google عند الإطلاق:

حالة الاستخدام مثال ما يوفره LiteRT.js
الكشف عن الكائنات في الوقت الحقيقي Ultralytics YOLO26، عبر تصدير LiteRT الرسمي في حزمة Ultralytics Python مسار تصدير واحد إلى الهاتف المحمول والحافة والمتصفح
العمق من كاميرا الويب Depth-Anything-V2، تعيين وحدات بكسل الفيديو إلى سحابة نقطية ثلاثية الأبعاد مباشرة تنفيذ WebGPU بمعدلات تفاعلية
رفع مستوى الصورة Real-ESRGAN، ترقية 128×128 تصحيحًا إلى 512×512، وإعادة تجميعها في صورة 4x المعالجة المحلية، لا يوجد تحميل
البحث الدلالي يتم تشغيل البحث المتجه EmbeddingGemma داخل الصفحة التضمينات المحسوبة من جانب العميل

LiteRT.js مقابل TensorFlow.js

تثير هذه العروض التوضيحية سؤالًا واضحًا لفرق تعلم الآلة على الويب الحالية.

البعد LiteRT.js TensorFlow.js
حبات تم تجميع وقت التشغيل الأصلي إلى WebAssembly النواة المستندة إلى جافا سكريبت
تنسيق النموذج .tflite نماذج الرسم البياني والطبقات TF.js
مسار وحدة المعالجة المركزية XNNPACK، SIMD متعدد الخيوط، مريح الواجهات الخلفية لـ JS وWasm
مسار GPU ML الانجراف عبر WebGPU واجهات WebGL وWebGPU الخلفية
مسار NPU WebNN، تجريبي لا أحد
ذاكرة يدوي؛ يتصل .delete() تلقائي، بالإضافة إلى tf.tidy و tf.dispose
إعادة الاستخدام عبر الأنظمة الأساسية نفس قطعة أثرية مثل Android وiOS وسطح المكتب الويب فقط

والأهم من ذلك أن الاثنين لا يستبعد أحدهما الآخر. تضع Google LiteRT.js كبديل لـ TF.js نماذج الرسم البياني على وجه التحديد، وليس المكتبة بأكملها.

يبقى TensorFlow.js الأداة الموصى بها للمعالجة المسبقة واللاحقة. ال @litertjs/tfjs-interop تمر الحزمة الموترات بينهما عبر runWithTfjsTensors. يتجنب tensor.dataSync، والذي يحمل عقوبة كبيرة على الواجهة الخلفية لـ WebGPU.

الشرح التفاعلي

يعمل التضمين أدناه على تنشيط مراحل خط الأنابيب الست عبر كل واجهة خلفية.

الوجبات السريعة الرئيسية

  • يتم تشغيل LiteRT.js .tflite النماذج في المتصفح باستخدام وقت التشغيل الأصلي لـ Google والتي تم تجميعها إلى WebAssembly.
  • المكاسب المُبلغ عنها: ما يصل إلى 3 أضعاف أوقات تشغيل الويب الأخرى؛ 5–60x لوحدة معالجة الرسومات/وحدة NPU عبر مسار وحدة المعالجة المركزية الخاصة بها.
  • ثلاث واجهات خلفية: XNNPACK على وحدة المعالجة المركزية، وML Drift عبر WebGPU، وWebNN لوحدات NPU. لا يوجد تفويض جزئي؛ يعود الى wasm.
  • تتم إدارة Tensors يدويا. يتصل .delete() أو تسرب ذاكرة الجهاز.
  • تظل WebNN تجريبية. WebGPU هو هدف التسريع العملي اليوم.

مصادر


ميشال سوتر متخصص في علوم البيانات وحاصل على درجة الماجستير في علوم البيانات من جامعة بادوفا. بفضل أساس متين في التحليل الإحصائي والتعلم الآلي وهندسة البيانات، تتفوق ميشال في تحويل مجموعات البيانات المعقدة إلى رؤى قابلة للتنفيذ.


اكتشاف المزيد من كحيل | أخبار التقنية

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

شاركها.
اترك تعليقاً

اكتشاف المزيد من كحيل | أخبار التقنية

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

متابعة القراءة