Interpreter API ile GPU hızlandırma temsilcisi

Makine öğrenimi (ML) modellerinizi çalıştırmak için grafik işlem birimlerini (GPU'lar) kullanmak, ML özellikli uygulamalarınızın performansını ve kullanıcı deneyimini önemli ölçüde artırabilir. Android cihazlarda etkinleştirebilirsiniz

temsilci ve aşağıdaki API'lerden biri:

  • Tercüman API'si - bu kılavuz
  • Görev kitaplığı API'si - kılavuz
  • Yerel (C/C++) API - kılavuz

Bu sayfada, Interpreter API kullanılarak Android uygulamalarında TensorFlow Lite modelleri için GPU hızlandırmanın nasıl etkinleştirileceği açıklanmaktadır. En iyi uygulamalar ve gelişmiş teknikler de dahil olmak üzere TensorFlow Lite için GPU temsilcisini kullanma hakkında daha fazla bilgi için GPU temsilcileri sayfasına bakın.

GPU'yu TensorFlow Lite ile Google Play hizmetleriyle kullanın

TensorFlow Lite Interpreter API, makine öğrenimi uygulamaları oluşturmak için bir dizi genel amaçlı API sağlar. Bu bölümde, GPU hızlandırıcı temsilcisinin Google Play hizmetleriyle TensorFlow Lite ile bu API'lerle nasıl kullanılacağı açıklanmaktadır.

Google Play hizmetleriyle birlikte TensorFlow Lite, TensorFlow Lite'ı Android'de kullanmanın önerilen yoludur. Uygulamanız Google Play'i çalıştırmayan cihazları hedefliyorsa Interpreter API'li GPU ve bağımsız TensorFlow Lite bölümüne bakın.

Proje bağımlılıkları ekleyin

GPU temsilcisine erişimi etkinleştirmek için uygulamanızın build.gradle dosyasına com.google.android.gms:play-services-tflite-gpu ekleyin:

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 hızlandırmayı etkinleştir

Ardından TensorFlow Lite'ı GPU desteğiyle Google Play hizmetleriyle başlatın:

Kotlin

    val useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

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

Java

    Task useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context);

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

Sonunda yorumlayıcıyı InterpreterApi.Options aracılığıyla bir GpuDelegateFactory ileterek başlatabilirsiniz:

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

GPU temsilcisi, Android Studio'da ML modeli bağlamayla da kullanılabilir. Daha fazla bilgi için bkz. Meta verileri kullanarak model arayüzleri oluşturma .

GPU'yu bağımsız TensorFlow Lite ile kullanın

Uygulamanız Google Play çalıştırmayan cihazları hedefliyorsa GPU temsilcisini uygulamanıza paketleyip bunu TensorFlow Lite'ın bağımsız sürümüyle kullanmak mümkündür.

Proje bağımlılıkları ekleyin

GPU temsilcisine erişimi etkinleştirmek için uygulamanızın build.gradle dosyasına org.tensorflow:tensorflow-lite-gpu-delegate-plugin ekleyin:

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

GPU hızlandırmayı etkinleştir

Ardından TensorFlow Lite'ı GPU'da TfLiteDelegate ile çalıştırın. Java'da, GpuDelegate Interpreter.Options aracılığıyla belirtebilirsiniz.

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

Nicelenmiş modeller

Android GPU temsilci kitaplıkları varsayılan olarak nicelenmiş modelleri destekler. GPU temsilcisiyle nicelenmiş modelleri kullanmak için herhangi bir kod değişikliği yapmanız gerekmez. Aşağıdaki bölümde, test veya deneysel amaçlarla nicelenmiş desteğin nasıl devre dışı bırakılacağı açıklanmaktadır.

Nicelenmiş model desteğini devre dışı bırakın

Aşağıdaki kod, nicelenmiş modeller için desteğin nasıl devre dışı bırakılacağını gösterir.

Java

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

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

Nicelenmiş modelleri GPU hızlandırmayla çalıştırma hakkında daha fazla bilgi için bkz. GPU temsilcisine genel bakış.