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

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

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

توضّح هذه الصفحة كيفية تفعيل تسريع وحدة معالجة الرسومات لطُرز TensorFlow Lite في تطبيقات Android باستخدام واجهة برمجة التطبيقات "الترجمة الفورية". لمزيد من المعلومات حول استخدام تفويض GPU لـ TensorFlow Lite، بما في ذلك أفضل الممارسات والتقنيات المتقدمة، راجِع صفحة مفوَّضو وحدة معالجة الرسومات.

استخدام وحدة معالجة الرسومات مع TensorFlow Lite مع "خدمات Google Play"

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

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

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

  1. تعديل ملف libs.versions.toml الخاص بمشروعك
[libraries]
...
tflite-gpu = { module = "org.tensorflow:tensorflow-lite-gpu", version = "2.X.Y" }
tflite-gpu-api = { module = "org.tensorflow:tensorflow-lite-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'
}

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

عليك بعد ذلك إعداد TensorFlow Lite باستخدام "خدمات 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". لمزيد من المعلومات، يمكنك الاطّلاع على إنشاء واجهات نماذج باستخدام البيانات الوصفية.

استخدام وحدة معالجة الرسومات مع تطبيق TensorFlow Lite المستقل

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

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

لإتاحة الوصول إلى المفوَّض من وحدة معالجة الرسومات، أضِف org.tensorflow:tensorflow-lite-gpu-delegate-plugin إلى ملف build.gradle الخاص بتطبيقك:

dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite'
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}

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

شغِّل بعد ذلك TensorFlow Lite على وحدة معالجة الرسومات "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);
      

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