تفويض تسريع وحدة معالجة الرسومات باستخدام ميزة "الترجمة الفورية"

استخدام وحدات معالجة الرسومات (GPU) لتشغيل نماذج تعلُّم الآلة (ML) تحسين أداء إعلاناتك وتجربة المستخدم التطبيقات التي تستخدم تعلُّم الآلة. على أجهزة Android، يمكنك تفعيل تفويض وإحدى واجهات برمجة التطبيقات التالية:

  • واجهة برمجة التطبيقات للترجمة الفورية - هذا الدليل
  • واجهة برمجة التطبيقات الأصلية (C/C++ ) - الدليل

توضح هذه الصفحة كيفية تفعيل تسريع وحدة معالجة الرسومات لنماذج LiteRT في تطبيقات Android التي تستخدم واجهة برمجة التطبيقات للترجمة الفورية لمزيد من المعلومات حول استخدام وحدة معالجة الرسومات (GPU) تفويضًا لـ LiteRT، بما في ذلك أفضل الممارسات والتقنيات المتقدمة، انتقِل إلى صفحة مفوَّضي معالجة الرسومات.

استخدام وحدة معالجة الرسومات مع LiteRT مع خدمات Google Play

The LiteRT مترجم فوري API هي مجموعة من واجهات برمجة التطبيقات ذات الأغراض العامة لإنشاء تطبيقات التعلم الآلي. هذا القسم تصف كيفية استخدام تفويض مسرِّع وحدة معالجة الرسومات مع واجهات برمجة التطبيقات هذه مع LiteRT مع خدمات Google Play.

يُنصَح باستخدام LiteRT مع خدمات Google Play مسار استخدام LiteRT على Android. إذا كان تطبيقك يستهدف أجهزة إذا كان لا يعمل على Google Play، فراجع وحدة معالجة الرسومات التي تتضمن واجهة برمجة التطبيقات للترجمة والتطبيقات المستقلة LiteRT.

إضافة تبعيات المشروع (باستخدام كتالوج إصدار .toml)

  1. تعديل ملف libs.versions.toml الخاص بمشروعك
[libraries]
...
tflite-gpu = { module = "com.google.ai.edge.litert:litert-gpu", version = "2.X.Y" }
tflite-gpu-api = { module = "com.google.ai.edge.litert:litert-gpu-api", version = "2.X.Y" }
...
  1. يمكنك إضافة العناصر التابعة للمشروع في build.gradle.kts للتطبيق.
dependencies {
  ...
  implementation(libraries.tflite.gpu)
  implementation(libraries.tflite.gpu.api)
  ...
}

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

للسماح بالوصول إلى تفويض وحدة معالجة الرسومات، أضف في com.google.android.gms:play-services-tflite-gpu إلى build.gradle في تطبيقك الملف:

dependencies {
    ...
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
}

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

بعد ذلك، يمكنك إعداد LiteRT باستخدام خدمات Google Play التي تتوافق مع وحدة معالجة الرسومات:

Kotlin

val useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

val interpreterTask = useGpuTask.continueWith { useGpuTask ->
  TfLite.initialize(context,
      TfLiteInitializationOptions.builder()
      .setEnableGpuDelegateSupport(useGpuTask.result)
      .build())
  }
        

Java

Task<boolean> useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context);

Task<Options> interpreterOptionsTask = useGpuTask.continueWith({ task ->
  TfLite.initialize(context,
  TfLiteInitializationOptions.builder()
    .setEnableGpuDelegateSupport(true)
    .build());
});
        

يمكنك في النهاية إعداد ميزة الترجمة الفورية بعد اجتياز GpuDelegateFactory. من خلال InterpreterApi.Options:

Kotlin

    val options = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
      .addDelegateFactory(GpuDelegateFactory())

    val interpreter = InterpreterApi(model, options)

    // Run inference
    writeToInput(input)
    interpreter.run(input, output)
    readFromOutput(output)
      

Java

    Options options = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
      .addDelegateFactory(new GpuDelegateFactory());

    Interpreter interpreter = new InterpreterApi(model, options);

    // Run inference
    writeToInput(input);
    interpreter.run(input, output);
    readFromOutput(output);
      

يمكن أيضًا استخدام تفويض وحدة معالجة الرسومات مع ربط نموذج تعلُّم الآلة في "استوديو Android". بالنسبة لمزيد من المعلومات، راجِع إنشاء واجهات نماذج باستخدام البيانات الوصفية.

استخدام وحدة معالجة الرسومات مع الإصدار LiteRT المستقل

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

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

للسماح بالوصول إلى تفويض وحدة معالجة الرسومات، أضف في com.google.ai.edge.litert:litert-gpu-delegate-plugin إلى تطبيقك ملف build.gradle:

dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite'
    implementation 'com.google.ai.edge.litert:litert-gpu-delegate-plugin'
}

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

بعد ذلك، شغِّل LiteRT على وحدة معالجة الرسومات باستخدام "TfLiteDelegate". في Java، يمكنك تحديد من GpuDelegate إلى Interpreter.Options.

Kotlin

      import org.tensorflow.lite.Interpreter
      import org.tensorflow.lite.gpu.CompatibilityList
      import org.tensorflow.lite.gpu.GpuDelegate

      val compatList = CompatibilityList()

      val options = Interpreter.Options().apply{
          if(compatList.isDelegateSupportedOnThisDevice){
              // if the device has a supported GPU, add the GPU delegate
              val delegateOptions = compatList.bestOptionsForThisDevice
              this.addDelegate(GpuDelegate(delegateOptions))
          } else {
              // if the GPU is not supported, run on 4 threads
              this.setNumThreads(4)
          }
      }

      val interpreter = Interpreter(model, options)

      // Run inference
      writeToInput(input)
      interpreter.run(input, output)
      readFromOutput(output)
      

Java

      import org.tensorflow.lite.Interpreter;
      import org.tensorflow.lite.gpu.CompatibilityList;
      import org.tensorflow.lite.gpu.GpuDelegate;

      // Initialize interpreter with GPU delegate
      Interpreter.Options options = new Interpreter.Options();
      CompatibilityList compatList = CompatibilityList();

      if(compatList.isDelegateSupportedOnThisDevice()){
          // if the device has a supported GPU, add the GPU delegate
          GpuDelegate.Options delegateOptions = compatList.getBestOptionsForThisDevice();
          GpuDelegate gpuDelegate = new GpuDelegate(delegateOptions);
          options.addDelegate(gpuDelegate);
      } else {
          // if the GPU is not supported, run on 4 threads
          options.setNumThreads(4);
      }

      Interpreter interpreter = new Interpreter(model, options);

      // Run inference
      writeToInput(input);
      interpreter.run(input, output);
      readFromOutput(output);
      

النماذج الكَمية

تتوافق مكتبات تفويض وحدة معالجة الرسومات في Android مع النماذج الكَمية تلقائيًا. أنت لا إجراء أي تغييرات على التعليمات البرمجية لاستخدام نماذج محددة الكمية مع تفويض وحدة معالجة الرسومات. تشير رسالة الأشكال البيانية يوضح القسم التالي كيفية إيقاف الدعم الكمّي للاختبار أو لأغراض تجريبية.

إيقاف إتاحة النموذج الكمي

يوضّح الرمز التالي كيفية إيقاف إتاحة النماذج الكَمية.

Java

GpuDelegate delegate = new GpuDelegate(new GpuDelegate.Options().setQuantizedModelsAllowed(false));

Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
      

لمزيد من المعلومات عن تشغيل نماذج الكمية باستخدام تسريع وحدة معالجة الرسومات، يُرجى الاطّلاع على نظرة عامة على تفويض وحدة معالجة الرسومات.