يمكن أن يؤدي استخدام المعالجات المتخصصة مثل وحدات معالجة الرسومات (GPU) أو وحدات المعالجة العصبية (NPU) أو DSPs لتسريع الأجهزة إلى تحسين أداء الاستدلال بشكل كبير (ما يصل إلى 10 أضعاف الاستدلال الأسرع في بعض الحالات) وتجربة المستخدم لتطبيق Android الذي يدعم ML. ومع ذلك ، نظرًا لتنوع الأجهزة وبرامج التشغيل التي قد يمتلكها المستخدمون لديك ، فقد يكون اختيار التكوين الأمثل لتسريع الأجهزة لكل جهاز مستخدم أمرًا صعبًا. علاوة على ذلك ، يمكن أن يؤدي تمكين التكوين الخاطئ على الجهاز إلى إنشاء تجربة سيئة للمستخدم بسبب زمن الوصول العالي أو ، في بعض الحالات النادرة ، أخطاء وقت التشغيل أو مشكلات الدقة الناتجة عن عدم توافق الأجهزة.
Acceleration Service for Android هي واجهة برمجة تطبيقات تساعدك على اختيار التكوين الأمثل لتسريع الأجهزة لجهاز مستخدم معين ونموذج .tflite
الخاص بك ، مع تقليل مخاطر أخطاء وقت التشغيل أو مشكلات الدقة.
تقوم خدمة Acceleration Service بتقييم تكوينات التسريع المختلفة على أجهزة المستخدم عن طريق تشغيل معايير الاستدلال الداخلية باستخدام طراز TensorFlow Lite الخاص بك. عادةً ما تكتمل عمليات التشغيل التجريبية هذه في بضع ثوانٍ ، اعتمادًا على طرازك. يمكنك تشغيل المعايير مرة واحدة على كل جهاز مستخدم قبل وقت الاستدلال ، وتخزين النتيجة مؤقتًا واستخدامها أثناء الاستدلال. هذه المعايير نفدت من العملية ؛ مما يقلل من مخاطر تعطل تطبيقك.
قدم نموذجك وعينات البيانات والنتائج المتوقعة (المدخلات والمخرجات "الذهبية") وستقوم خدمة التسريع بتشغيل معيار استدلال TFLite داخلي لتزويدك بتوصيات الأجهزة.
تعد خدمة التسريع جزءًا من حزمة ML المخصصة لنظام Android وتعمل مع TensorFlow Lite في خدمات Google Play .
أضف التبعيات إلى مشروعك
أضف التبعيات التالية إلى ملف build.gradle الخاص بتطبيقك:
implementation "com.google.android.gms:play-services-tflite-
acceleration-service:16.0.0-beta01"
تعمل واجهة برمجة تطبيقات Acceleration Service مع TensorFlow Lite في خدمات Google Play . إذا كنت لا تستخدم وقت تشغيل TensorFlow Lite المقدم عبر Play Services حتى الآن ، فستحتاج إلى تحديث تبعياتك .
كيفية استخدام واجهة برمجة تطبيقات خدمة التسريع
لاستخدام Acceleration Service ، ابدأ بإنشاء تكوين التسريع الذي تريد تقييمه لطرازك (مثل GPU مع OpenGL). ثم قم بإنشاء تكوين التحقق من صحة النموذج الخاص بك ، وبعض البيانات النموذجية وإخراج النموذج المتوقع. أخيرًا ، قم باستدعاء validateConfig()
لتمرير كل من تكوين التسريع وتكوين التحقق من الصحة.
إنشاء تكوينات التسارع
تكوينات التسريع هي تمثيلات لتكوينات الأجهزة التي يتم ترجمتها إلى مفوضين أثناء وقت التنفيذ. ستستخدم خدمة التسريع بعد ذلك هذه التكوينات داخليًا لإجراء اختبار الاستدلالات.
في الوقت الحالي ، تتيح لك خدمة التسريع تقييم تكوينات GPU (تم تحويلها إلى مفوض GPU أثناء وقت التنفيذ) باستخدام GpuAccelerationConfig واستدلال وحدة المعالجة المركزية (باستخدام CpuAccelerationConfig ). نحن نعمل على دعم المزيد من المندوبين للوصول إلى أجهزة أخرى في المستقبل.
تكوين تسريع GPU
قم بإنشاء تكوين تسريع GPU على النحو التالي:
AccelerationConfig accelerationConfig = new GpuAccelerationConfig.Builder()
.setEnableQuantizedInference(false)
.build();
يجب عليك تحديد ما إذا كان نموذجك يستخدم التكميم أم لا باستخدام setEnableQuantizedInference()
.
تكوين تسريع وحدة المعالجة المركزية
قم بإنشاء تسريع وحدة المعالجة المركزية على النحو التالي:
AccelerationConfig accelerationConfig = new CpuAccelerationConfig.Builder()
.setNumThreads(2)
.build();
استخدم طريقة setNumThreads()
لتحديد عدد الخيوط التي تريد استخدامها لتقييم استنتاج وحدة المعالجة المركزية.
إنشاء تكوينات التحقق من الصحة
تتيح لك تكوينات التحقق من الصحة تحديد الطريقة التي تريد أن تقوم بها خدمة التسريع بتقييم الاستنتاجات. سوف تستخدمها لتمرير:
- عينات الإدخال ،
- المخرجات المتوقعة ،
- منطق التحقق من الدقة.
تأكد من تقديم عينات الإدخال التي تتوقع أداءً جيدًا لنموذجك لها (المعروف أيضًا باسم العينات "الذهبية").
قم بإنشاء ValidationConfig
باستخدام CustomValidationConfig.Builder
على النحو التالي:
ValidationConfig validationConfig = new CustomValidationConfig.Builder()
.setBatchSize(5)
.setGoldenInputs(inputs)
.setGoldenOutputs(outputBuffer)
.setAccuracyValidator(new MyCustomAccuracyValidator())
.build();
حدد عدد العينات الذهبية باستخدام setBatchSize()
. قم بتمرير مدخلات العينات الذهبية الخاصة بك باستخدام setGoldenInputs()
. قم بتوفير الإخراج المتوقع للإدخال الذي تم تمريره باستخدام setGoldenOutputs()
.
يمكنك تحديد أقصى وقت للاستدلال باستخدام setInferenceTimeoutMillis()
(5000 مللي ثانية افتراضيًا). إذا استغرق الاستنتاج وقتًا أطول من الوقت الذي حددته ، فسيتم رفض التكوين.
اختياريًا ، يمكنك أيضًا إنشاء AccuracyValidator
مخصص على النحو التالي:
class MyCustomAccuracyValidator implements AccuracyValidator {
boolean validate(
BenchmarkResult benchmarkResult,
ByteBuffer[] goldenOutput) {
for (int i = 0; i < benchmarkResult.actualOutput().size(); i++) {
if (!goldenOutputs[i]
.equals(benchmarkResult.actualOutput().get(i).getValue())) {
return false;
}
}
return true;
}
}
تأكد من تحديد منطق التحقق الذي يعمل لحالة الاستخدام الخاصة بك.
لاحظ أنه إذا كانت بيانات التحقق مضمنة بالفعل في نموذجك ، فيمكنك استخدام EmbeddedValidationConfig
.
توليد مخرجات التحقق من الصحة
المخرجات الذهبية اختيارية وطالما أنك تقدم مدخلات ذهبية ، يمكن لخدمة التسريع أن تولد المخرجات الذهبية داخليًا. يمكنك أيضًا تحديد تكوين التسريع المستخدم لإنشاء هذه المخرجات الذهبية عن طريق استدعاء setGoldenConfig()
:
ValidationConfig validationConfig = new CustomValidationConfig.Builder()
.setBatchSize(5)
.setGoldenInputs(inputs)
.setGoldenConfig(customCpuAccelerationConfig)
[...]
.build();
تحقق من صحة تكوين التسريع
بمجرد إنشاء تكوين تسريع وتكوين التحقق من الصحة ، يمكنك تقييمهما لنموذجك.
تأكد من أن TensorFlow Lite مع وقت تشغيل Play Services قد تمت تهيئته بشكل صحيح وأن مفوض GPU متاح للجهاز عن طريق تشغيل:
TfLiteGpu.isGpuDelegateAvailable(context)
.onSuccessTask(gpuAvailable -> TfLite.initialize(context,
TfLiteInitializationOptions.builder()
.setEnableGpuDelegateSupport(gpuAvailable)
.build()
)
);
إنشاء مثيل AccelerationService
عن طريق استدعاء AccelerationService.create()
.
يمكنك بعد ذلك التحقق من صحة تكوين التسريع للنموذج الخاص بك عن طريق استدعاء validateConfig()
:
InterpreterApi interpreter;
InterpreterOptions interpreterOptions = InterpreterApi.Options();
AccelerationService.create(context)
.validateConfig(model, accelerationConfig, validationConfig)
.addOnSuccessListener(validatedConfig -> {
if (validatedConfig.isValid() && validatedConfig.benchmarkResult().hasPassedAccuracyTest()) {
interpreterOptions.setAccelerationConfig(validatedConfig);
interpreter = InterpreterApi.create(model, interpreterOptions);
});
يمكنك أيضًا التحقق من صحة تكوينات متعددة عن طريق استدعاء validateConfigs()
وتمرير كائن Iterable<AccelerationConfig>
كمعامل.
>
validateConfig()
سيعيد Task<
ValidatedAccelerationConfigResult
Google Play services Task Api التي تمكن المهام غير المتزامنة.
للحصول على النتيجة من استدعاء التحقق ، أضف رد اتصال addOnSuccessListener()
.
استخدم التكوين الذي تم التحقق من صحته في المترجم الفوري الخاص بك
بعد التحقق مما إذا كانت ValidatedAccelerationConfigResult
التي تم إرجاعها في رد الاتصال صالحة ، يمكنك تعيين التكوين الذي تم التحقق من صحته كتكوين تسريع للمترجم الذي يستدعي interpreterOptions.setAccelerationConfig()
.
تكوين التخزين المؤقت
من غير المحتمل أن يتغير تكوين التسريع الأمثل لطرازك على الجهاز. لذلك بمجرد حصولك على تكوين تسريع مُرضٍ ، يجب عليك تخزينه على الجهاز والسماح لتطبيقك باسترداده واستخدامه لإنشاء InterpreterOptions
أثناء الجلسات التالية بدلاً من تشغيل عملية تحقق أخرى. تعمل طريقتا serialize()
وإلغاء deserialize()
في ValidatedAccelerationConfigResult
على تسهيل عملية التخزين والاسترجاع.
تطبيق العينة
لمراجعة التكامل في الموقع لخدمة Acceleration Service ، ألق نظرة على نموذج التطبيق .
محددات
تخضع خدمة التسريع للقيود الحالية التالية:
- يتم دعم تكوينات تسريع وحدة المعالجة المركزية ووحدة معالجة الرسومات فقط في الوقت الحالي ،
- إنه يدعم TensorFlow Lite فقط في خدمات Google Play ولا يمكنك استخدامه إذا كنت تستخدم الإصدار المجمع من TensorFlow Lite ،
- لا يدعم مكتبة مهام TensorFlow Lite حيث لا يمكنك تهيئة
BaseOptions
مباشرةً باستخدام كائنValidatedAccelerationConfigResult
. - يدعم Acceleration Service SDK فقط مستوى API 22 وما فوق.
تحفظات
يرجى مراجعة التحذيرات التالية بعناية ، خاصة إذا كنت تخطط لاستخدام SDK هذا في الإنتاج:
قبل الخروج من بيتا وإصدار الإصدار الثابت لـ Acceleration Service API ، سننشر SDK جديدًا قد يكون له بعض الاختلافات عن الإصدار التجريبي الحالي. للاستمرار في استخدام خدمة Acceleration Service ، ستحتاج إلى الترحيل إلى SDK الجديد هذا ودفع تحديث لتطبيقك في الوقت المناسب. قد يؤدي عدم القيام بذلك إلى حدوث أعطال لأن Beta SDK قد لا تكون متوافقة مع خدمات Google Play بعد مرور بعض الوقت.
ليس هناك ما يضمن أن ميزة معينة ضمن واجهة برمجة تطبيقات Acceleration Service API أو واجهة برمجة التطبيقات (API) ككل ستصبح متاحة بشكل عام. قد تظل في الإصدار التجريبي إلى أجل غير مسمى ، أو يتم إغلاقها ، أو دمجها مع ميزات أخرى في حزم مصممة لجماهير معينة من المطورين. قد تصبح بعض الميزات مع واجهة برمجة تطبيقات Acceleration Service أو واجهة برمجة التطبيقات بالكامل نفسها متاحة بشكل عام في النهاية ، ولكن لا يوجد جدول زمني محدد لذلك.
الشروط والخصوصية
شروط الخدمة
يخضع استخدام واجهات برمجة تطبيقات خدمة التسريع لشروط خدمة Google APIs .
بالإضافة إلى ذلك ، فإن واجهات برمجة تطبيقات Acceleration Service هي حاليًا في مرحلة تجريبية ، وعلى هذا النحو ، باستخدامها ، فإنك تقر بالمشكلات المحتملة الموضحة في قسم التحذيرات أعلاه وتقر بأن خدمة Acceleration Service قد لا تعمل دائمًا على النحو المحدد.
خصوصية
عند استخدام واجهات برمجة تطبيقات خدمة التسريع ، تتم معالجة بيانات الإدخال (مثل الصور والفيديو والنص) بشكل كامل على الجهاز ، ولا ترسل خدمة التسريع هذه البيانات إلى خوادم Google . نتيجة لذلك ، يمكنك استخدام واجهات برمجة التطبيقات الخاصة بنا لمعالجة بيانات الإدخال التي يجب ألا تغادر الجهاز.
قد تتصل واجهات برمجة تطبيقات خدمة التسريع بخوادم Google من وقت لآخر لتلقي أشياء مثل إصلاحات الأخطاء والنماذج المحدثة ومعلومات توافق مسرع الأجهزة. ترسل واجهات برمجة تطبيقات خدمة التسريع أيضًا مقاييس حول أداء واستخدام واجهات برمجة التطبيقات في تطبيقك إلى Google. تستخدم Google بيانات المقاييس هذه لقياس الأداء ، وتصحيح الأخطاء ، والحفاظ على واجهات برمجة التطبيقات وتحسينها ، واكتشاف إساءة الاستخدام أو إساءة الاستخدام ، كما هو موضح بمزيد من التفصيل في سياسة الخصوصية الخاصة بنا.
أنت مسؤول عن إعلام مستخدمي تطبيقك بمعالجة Google لبيانات مقاييس خدمة التسريع وفقًا لما يقتضيه القانون المعمول به.
تشمل البيانات التي نجمعها ما يلي:
- معلومات الجهاز (مثل الشركة المصنعة والطراز وإصدار نظام التشغيل والإنشاء) ومسرعات أجهزة ML المتاحة (GPU و DSP). تستخدم للتشخيصات وتحليلات الاستخدام.
- معلومات التطبيق (اسم الحزمة / معرّف الحزمة ، إصدار التطبيق). تستخدم للتشخيصات وتحليلات الاستخدام.
- تكوين API (مثل تنسيق الصورة ودقة الوضوح). تستخدم للتشخيصات وتحليلات الاستخدام.
- نوع الحدث (مثل التهيئة ، تنزيل النموذج ، التحديث ، التشغيل ، الكشف). تستخدم للتشخيصات وتحليلات الاستخدام.
- رموز الخطأ. تستخدم للتشخيص.
- مقاييس الأداء. تستخدم للتشخيص.
- معرّفات لكل تثبيت لا تعرّف بشكل فريد مستخدمًا أو جهازًا ماديًا. تستخدم لتشغيل التكوين عن بعد وتحليلات الاستخدام.
- عناوين IP لمرسل طلب الشبكة. تستخدم لتشخيص التكوين عن بعد. يتم الاحتفاظ بعناوين IP المجمعة مؤقتًا.
الدعم وردود الفعل
يمكنك تقديم الملاحظات والحصول على الدعم من خلال TensorFlow Issue Tracker. يرجى الإبلاغ عن المشكلات وطلبات الدعم باستخدام نموذج المشكلة لـ TensorFlow Lite في خدمات Google Play.