مندوب تسريع GPU مع Interpreter API

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

المفوض وأحد واجهات برمجة التطبيقات التالية:

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

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

استخدم GPU مع TensorFlow Lite مع خدمات Google Play

توفر TensorFlow Lite Interpreter API مجموعة من واجهات برمجة التطبيقات للأغراض العامة لبناء تطبيقات التعلم الآلي. يصف هذا القسم كيفية استخدام مندوب تسريع GPU مع واجهات برمجة التطبيقات هذه مع TensorFlow Lite مع خدمات Google Play.

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

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

لتمكين الوصول إلى مندوب GPU، أضف 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'
}

تمكين تسريع GPU

ثم قم بتهيئة TensorFlow Lite مع خدمات Google Play بدعم GPU:

كوتلين

    val useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

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

جافا

    Task useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context);

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

يمكنك أخيرًا تهيئة المترجم من خلال تمرير GpuDelegateFactory عبر InterpreterApi.Options :

كوتلين


    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)
      

جافا


    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);
      

يمكن أيضًا استخدام مندوب GPU مع ربط نموذج ML في Android Studio. لمزيد من المعلومات، راجع إنشاء واجهات نموذجية باستخدام بيانات التعريف .

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

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

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

لتمكين الوصول إلى مندوب GPU، قم بإضافة org.tensorflow:tensorflow-lite-gpu-delegate-plugin إلى ملف build.gradle الخاص بتطبيقك:

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

تمكين تسريع GPU

ثم قم بتشغيل TensorFlow Lite على وحدة معالجة الرسومات باستخدام TfLiteDelegate . في Java، يمكنك تحديد GpuDelegate من خلال Interpreter.Options .

كوتلين

      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)
      

جافا

      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 GPU النماذج الكمية بشكل افتراضي. ليس عليك إجراء أي تغييرات في التعليمات البرمجية لاستخدام النماذج الكمية مع مندوب GPU. يشرح القسم التالي كيفية تعطيل الدعم الكمي لأغراض الاختبار أو الاختبار.

تعطيل دعم النموذج الكمي

يوضح التعليمة البرمجية التالية كيفية تعطيل دعم النماذج الكمية.

جافا

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

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

لمزيد من المعلومات حول تشغيل النماذج الكمية مع تسريع GPU، راجع نظرة عامة على مندوب GPU .