خدمة التسريع لنظام التشغيل Android (إصدار تجريبي)

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

Acceleration Service for Android عبارة عن واجهة برمجة تطبيقات (API) تساعدك على اختيار التكوين الأمثل لتسريع الأجهزة لجهاز مستخدم معين ونموذج .tflite الخاص بك، مع تقليل مخاطر حدوث خطأ في وقت التشغيل أو مشكلات الدقة.

تقوم خدمة التسريع بتقييم تكوينات التسريع المختلفة على أجهزة المستخدم عن طريق تشغيل معايير الاستدلال الداخلي باستخدام نموذج 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"

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

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

لاستخدام خدمة التسريع، ابدأ بإنشاء تكوين التسريع الذي تريد تقييمه لنموذجك (على سبيل المثال وحدة معالجة الرسومات مع OpenGL). ثم قم بإنشاء تكوين التحقق من الصحة باستخدام النموذج الخاص بك وبعض نماذج البيانات ومخرجات النموذج المتوقعة. أخيرًا، اتصل بـ validateConfig() لتمرير كل من تكوين التسريع وتكوين التحقق من الصحة.

صورة

إنشاء تكوينات التسارع

تكوينات التسريع هي تمثيلات لتكوينات الأجهزة التي يتم ترجمتها إلى المفوضين أثناء وقت التنفيذ. ستقوم خدمة التسريع بعد ذلك باستخدام هذه التكوينات داخليًا لإجراء استنتاجات الاختبار.

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

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

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

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

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

تطبيق عينة

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

القيود

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

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

المحاذير

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

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

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

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

شروط الخدمة

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

خصوصية

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

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

الدعم وردود الفعل

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