خدمة التسارع لنظام Android (بيتا)

يمكن أن يؤدي استخدام المعالجات المتخصصة مثل GPU أو NPUs أو DSPs لتسريع الأجهزة إلى تحسين أداء الاستدلال بشكل كبير (ما يصل إلى 10x استنتاج أسرع في بعض الحالات) وتجربة المستخدم لتطبيق Android الذي يدعم ML. ومع ذلك ، بالنظر إلى مجموعة متنوعة من الأجهزة والسائقين قد يكون لدى المستخدمين ، فإن اختيار تكوين تسريع الأجهزة الأمثل لجهاز كل مستخدم قد يكون تحديًا. علاوة على ذلك ، يمكن أن يؤدي تمكين التكوين الخاطئ على الجهاز إلى إنشاء تجربة سيئة للمستخدم بسبب زمن الوصول العالي أو ، في بعض الحالات النادرة ، أخطاء وقت التشغيل أو مشكلات الدقة الناجمة عن عدم توافق الأجهزة.

خدمة التسارع لـ Android هي واجهة برمجة تطبيقات تساعدك على اختيار تكوين تسريع الأجهزة الأمثل لجهاز مستخدم معين ونموذج .tflite الخاص بك ، مع تقليل مخاطر خطأ وقت التشغيل أو مشكلات الدقة.

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

توفير النموذج الخاص بك وعينات البيانات والنتائج المتوقعة (المدخلات والمخرجات "الذهبية") وستقوم خدمة التسارع بتشغيل معيار استنتاج Tflite داخلي لتزويدك بتوصيات الأجهزة.

صورة

تعد خدمة التسارع جزءًا من مكدس ML المخصص لـ Android وتعمل مع TensorFlow Lite في Google Play Services .

أضف التبعيات إلى مشروعك

أضف التبعيات التالية إلى ملف Build.gradle الخاص بالتطبيق:

implementation  "com.google.android.gms:play-services-tflite-
acceleration-service:16.0.0-beta01"

تعمل API لخدمة التسارع مع TensorFlow Lite في Google Play Services . إذا كنت لا تستخدم وقت تشغيل TensorFlow Lite المتوفر عبر خدمات اللعب حتى الآن ، فستحتاج إلى تحديث تبعياتك .

كيفية استخدام واجهة برمجة تطبيقات خدمة التسارع

لاستخدام خدمة التسارع ، ابدأ بإنشاء تكوين التسارع الذي تريد تقييمه لنموذجك (مثل 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 مع خدمات اللعب بشكل صحيح وأن مندوب 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 التي تتيح المهام غير المتزامنة.
للحصول على النتيجة من استدعاء التحقق من الصحة ، أضف رد اتصال addOnSuccessListener() .

استخدم التكوين الذي تم التحقق من صحته في مترجمك

بعد مراجعة ما إذا كان ValidatedAccelerationConfigResult الذي تم إرجاعه في رد الاتصال صالحًا ، يمكنك تعيين التكوين الذي تم التحقق منه كتكوين تسريع لمترجم الاتصال interpreterOptions.setAccelerationConfig() .

تكوين التخزين المؤقت

من غير المرجح أن يتغير تكوين التسارع الأمثل لنموذجك على الجهاز. لذلك بمجرد تلقي تكوين تسريع مرضي ، يجب عليك تخزينه على الجهاز والسماح للتطبيق الخاص بك إلى استرداده واستخدامه لإنشاء InterpreterOptions الخاص بك أثناء الجلسات التالية بدلاً من تشغيل التحقق الآخر. إن أساليب serialize() و deserialize() في ValidatedAccelerationConfigResult تجعل عملية التخزين واسترجاعها أسهل.

عينة التطبيق

لمراجعة تكامل في الموقع لخدمة التسارع ، ألق نظرة على تطبيق العينة .

محددات

تتمتع خدمة التسارع بالقيود التالية:

  • يتم دعم تكوينات تسريع وحدة المعالجة المركزية و GPU فقط في الوقت الحالي ،
  • إنه يدعم فقط TensorFlow Lite في Google Play Services ولا يمكنك استخدامه إذا كنت تستخدم النسخة المجمعة من TensorFlow Lite ،
  • لا يدعم مكتبة TensorFlow Lite Task حيث لا يمكنك تهيئة BaseOptions مباشرة باستخدام كائن ValidatedAccelerationConfigResult .
  • خدمة التسارع SDK تدعم فقط API المستوى 22 وما فوق.

تحفظات

يرجى مراجعة التحذيرات التالية بعناية ، خاصة إذا كنت تخطط لاستخدام هذا SDK في الإنتاج:

  • قبل الخروج من بيتا وإصدار الإصدار المستقر في واجهة برمجة تطبيقات خدمة التسارع ، سنقوم بنشر SDK جديد قد يكون لديه بعض الاختلافات من Beta One الحالي. لمواصلة استخدام خدمة التسارع ، ستحتاج إلى الترحيل إلى هذا SDK الجديد ودفع تحديث إلى تطبيقك في الوقت المناسب. قد لا يتسبب عدم القيام بذلك في كسر لأن Beta SDK قد لا يكون متوافقًا مع خدمات Google Play بعد بعض الوقت.

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

الشروط والخصوصية

شروط الخدمة

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

خصوصية

عند استخدام واجهات برمجة تطبيقات خدمة التسارع ، يحدث معالجة بيانات الإدخال (على سبيل المثال الصور والفيديو والنص) بالكامل على الجهاز ، ولا ترسل خدمة التسارع تلك البيانات إلى خوادم Google . نتيجة لذلك ، يمكنك استخدام واجهات برمجة التطبيقات الخاصة بنا لمعالجة بيانات الإدخال التي يجب ألا تترك الجهاز.
قد تتصل واجهات برمجة تطبيقات خدمة التسارع من خوادم Google من وقت لآخر لتلقي أشياء مثل إصلاحات الأخطاء والموديلات المحدثة ومعلومات توافق مسرع الأجهزة. ترسل واجهات برمجة تطبيقات خدمة التسارع أيضًا مقاييس حول أداء واستخدام واجهات برمجة التطبيقات في تطبيقك إلى Google. تستخدم Google بيانات المقاييس هذه لقياس الأداء وتصحيح وصيانة واجهات برمجة التطبيقات وتحسينها ، والاكتشاف سوء الاستخدام أو الإساءة ، كما هو موضح في سياسة الخصوصية الخاصة بنا.
أنت مسؤول عن إبلاغ المستخدمين بتطبيقك حول معالجة Google لبيانات مقاييس خدمة التسارع كما هو مطلوب بموجب القانون المعمول به.
تتضمن البيانات التي نجمعها ما يلي:

  • معلومات الجهاز (مثل الشركة المصنعة ، النموذج ، إصدار نظام التشغيل والبناء) ومسرعات أجهزة ML المتاحة (GPU و DSP). تستخدم للتشخيصات وتحليلات الاستخدام.
  • معلومات التطبيق (اسم الحزمة / معرف الحزمة ، إصدار التطبيق). تستخدم للتشخيصات وتحليلات الاستخدام.
  • تكوين API (مثل تنسيق الصورة والدقة). تستخدم للتشخيصات وتحليلات الاستخدام.
  • نوع الحدث (مثل التهيئة ، تنزيل النموذج ، التحديث ، التشغيل ، الكشف). تستخدم للتشخيصات وتحليلات الاستخدام.
  • رموز الخطأ. تستخدم للتشخيص.
  • مقاييس الأداء. تستخدم للتشخيص.
  • معرفات التثبيت التي لا تحدد مستخدمًا أو جهازًا فعليًا بشكل فريد. تستخدم لتشغيل التكوين عن بُعد وتحليلات الاستخدام.
  • طلب الشبكة عناوين IP المرسل. تستخدم لتشخيصات التكوين عن بُعد. يتم الاحتفاظ بعناوين IP التي تم جمعها مؤقتًا.

الدعم والتعليقات

يمكنك تقديم ملاحظات والحصول على الدعم من خلال TensorFlow Tracker. يرجى الإبلاغ عن المشكلات وطلبات الدعم باستخدام قالب الإصدار لـ TensorFlow Lite في Google Play Services.