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

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

تُعد خدمة Acceleration Service لنظام التشغيل Android واجهة برمجة تطبيقات تساعدك في اختيار هو التكوين الأمثل لتسريع الأجهزة على جهاز مستخدم معيّن .tflite، مع تقليل مخاطر حدوث أخطاء في وقت التشغيل أو مشاكل في الدقة

تقيّم خدمة Acceleration Service إعدادات التسريع المختلفة للمستخدم. الأجهزة من خلال تنفيذ مقاييس استنتاج داخلية باستخدام LiteRT الأمثل. وتكتمل عمليات الاختبار هذه عادةً خلال بضع ثوانٍ، وذلك حسب الأمثل. يمكنك تنفيذ مقاييس الأداء مرة واحدة على كل جهاز مستخدِم قبل الاستنتاج الوقت، نخزّن النتيجة مؤقتًا واستخدمها أثناء الاستنتاج. يتم تنفيذ هذه المقاييس خارج المعالجة ما يقلّل من مخاطر حدوث أعطال في تطبيقك.

قدم النموذج وعينات البيانات والنتائج المتوقعة (المدخلات "الذهبية" المخرجات) وستعمل خدمة Acceleration Service على تشغيل استنتاج TFLite داخليًا حقًا لتزويدك بتوصيات الأجهزة.

الصورة

تُعد Acceleration Service جزءًا من حزمة تعلُّم الآلة المخصَّصة في Android وتعمل مع LiteRT في "خدمات Google Play":

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

أضِف التبعيات التالية إلى ملف Builder.gradle لتطبيقك:

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

واجهة برمجة التطبيقات Acceleration Service API متوافقة مع LiteRT في Google Play الخدمات: إذا كنت لا تستخدم بعد بيئة تشغيل LiteRT التي توفّرها "خدمات Play" إلى تعديل dependencies.

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

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

الصورة

إنشاء إعدادات التسريع

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

تتيح لك خدمة التسريع في الوقت الحالي تقييم وحدة معالجة الرسومات. الإعدادات (التي تم تحويلها إلى تفويض باستخدام وحدة معالجة الرسومات أثناء وقت التنفيذ) مع GpuAccelerationConfig واستنتاج وحدة المعالجة المركزية (CPU) CpuAccelerationConfig). ونعمل على إتاحة وصول المزيد من المفوَّضين إلى الأجهزة الأخرى في المستقبلية.

إعداد تسريع وحدة معالجة الرسومات

أنشئ إعدادات تسريع وحدة معالجة الرسومات على النحو التالي:

AccelerationConfig accelerationConfig = new GpuAccelerationConfig.Builder()
  .setEnableQuantizedInference(false)
  .build();

يجب عليك تحديد ما إذا كان نموذجك يستخدم التحليل الكمي مع setEnableQuantizedInference()

إعداد تسريع وحدة المعالجة المركزية (CPU)

أنشئ تسريع وحدة المعالجة المركزية (CPU) على النحو التالي:

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

إنشاء نتائج تحقُّق

تعد المخرجات الذهبية اختيارية، وطالما أنك تقدم مدخلات ذهبية، يمكن لخدمة Acceleration Service إنتاج نتائج مذهلة داخليًا. يمكنك أيضًا وتحدد إعدادات التسريع المستخدمة لإنشاء هذه المخرجات الذهبية عن طريق جارٍ الاتصال بالرقم setGoldenConfig():

ValidationConfig validationConfig = new CustomValidationConfig.Builder()
   .setBatchSize(5)
   .setGoldenInputs(inputs)
   .setGoldenConfig(customCpuAccelerationConfig)
   [...]
   .build();

التحقّق من إعدادات التسريع

بعد إنشاء إعدادات التسريع وإعداد التحقّق من الصحة يمكنك تقييمها بالنسبة لنموذجك.

تأكَّد من أنّ وقت تشغيل LiteRT مع "خدمات Play" يعمل بشكل صحيح. وأن يكون تفويض وحدة معالجة الرسومات متاحًا للجهاز من خلال تشغيل:

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

استخدِم الإعدادات التي تم التحقّق من صحتها في الترجمة الفورية.

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

التخزين المؤقت للإعدادات

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

نموذج تطبيق

لمراجعة عملية الدمج في الموقع الخاصة بخدمة Acceleration Service، يُرجى الاطّلاع على نموذج تطبيق.

القيود

تخضع "خدمة التسريع" للقيود التالية حاليًا:

  • لا تتوفّر في الوقت الحالي سوى عمليات ضبط التسريع لوحدة المعالجة المركزية (CPU) ووحدة معالجة الرسومات.
  • فهو يتوافق فقط مع LiteRT في خدمات Google Play، ولا يمكنك استخدمه إذا كنت تستخدم الإصدار المجمّع من LiteRT.
  • لا تتوافق حزمة تطوير البرامج لخدمة Acceleration Service إلا مع المستوى 22 من واجهة برمجة التطبيقات والمستويات الأعلى.

المحاذير

يُرجى مراجعة المحاذير التالية بعناية، خاصةً إذا كنت تخطط لاستخدام حزمة تطوير البرامج (SDK) هذه في قناة الإصدار العلني:

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

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

بنود الخدمة وسياسة الخصوصية

بنود الخدمة

يخضع استخدام واجهات برمجة تطبيقات Acceleration Service API لبنود خدمة Google APIs الخدمة:
بالإضافة إلى ذلك، تتوفّر واجهات برمجة التطبيقات Acceleration Service API حاليًا كإصدار تجريبي. ومن هذا المنطلق، يعني استخدامك له إقرارك بالمشاكل المحتملة الموضّحة في تنبيهات قسم "تنبيهات" أعلاه والإقرار بأنّ "خدمة التسريع" لا يجوز دائمًا كما هو محدد.

الخصوصية

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

  • معلومات الجهاز (مثل الشركة المصنّعة والطراز وإصدار نظام التشغيل والإصدار) مسرِّعات أجهزة تعلُّم الآلة المتاحة (وحدة معالجة الرسومات ووحدة معالجة البيانات). يتم استخدامه لأغراض التشخيص إحصاءات الاستخدام.
  • معلومات التطبيق (اسم الحزمة / رقم تعريف الحزمة وإصدار التطبيق) يتم الاستخدام مع والتشخيص وإحصاءات الاستخدام.
  • إعدادات واجهة برمجة التطبيقات (مثل تنسيق الصورة ودرجة دقتها) يتم الاستخدام مع والتشخيص وإحصاءات الاستخدام.
  • نوع الحدث (مثل الإعداد أو تنزيل النموذج أو التحديث أو التشغيل أو الرصد) يتم استخدام البيانات لبيانات التشخيص وإحصاءات الاستخدام.
  • رموز الخطأ يتم استخدامه لأغراض التشخيص.
  • مقاييس الأداء يتم استخدامه لأغراض التشخيص.
  • المعرّفات لكل تثبيت والتي لا تحدِّد هوية مستخدم أو جهاز فعلي. يُستخدم لتشغيل الإعداد والاستخدام عن بُعد. "إحصاءات YouTube".
  • عناوين IP لمرسلي طلب الشبكة. تُستخدَم للإعدادات عن بُعد التشخيص. يتم مؤقتًا الاحتفاظ بعناوين IP التي تم جمعها.

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

يمكنك تقديم ملاحظاتك والحصول على الدعم من خلال أداة "تتبُّع المشاكل" TensorFlow. يُرجى الإبلاغ عن المشاكل وطلبات الدعم باستخدام نموذج المشكلة LiteRT في خدمات Google Play.