Google I/O'yu ayarladığınız için teşekkür ederiz. İsteğe bağlı olarak tüm oturumları görüntüleyin İsteğe bağlı olarak izleyin

TensorFlow Lite Hexagon temsilcisi

Bu belge, Java ve/veya C API kullanarak uygulamanızda TensorFlow Lite Hexagon Delegesinin nasıl kullanılacağını açıklar. Temsilci, DSP'de nicelenmiş çekirdekleri yürütmek için Qualcomm Hexagon kitaplığından yararlanır. Temsilcinin, özellikle NNAPI DSP hızlandırmasının kullanılamadığı cihazlar için (örneğin, daha eski cihazlarda veya henüz bir DSP NNAPI sürücüsü olmayan cihazlarda) NNAPI işlevselliğini tamamlamayı amaçladığını unutmayın.

Desteklenen cihazlar:

Şu anda aşağıdakiler dahil ancak bunlarla sınırlı olmayan Hexagon mimarisi desteklenmektedir:

  • altıgen 680
    • SoC örnekleri: Snapdragon 821, 820, 660
  • altıgen 682
    • SoC örnekleri: Snapdragon 835
  • altıgen 685
    • SoC örnekleri: Snapdragon 845, Snapdragon 710, QCS410, QCS610, QCS605, QCS603
  • altıgen 690
    • SoC örnekleri: Snapdragon 855, RB5

Desteklenen modeller:

Hexagon temsilcisi, eğitim sonrası tamsayı niceleme kullanılarak oluşturulanlar da dahil olmak üzere, 8 bitlik simetrik nicemleme spesifikasyonumuza uyan tüm modelleri destekler. Eski niceleme duyarlı eğitim yolu ile eğitilmiş UInt8 modelleri de desteklenir, örneğin Barındırılan Modeller sayfamızda bu nicelenmiş sürümler .

Altıgen temsilci Java API'si

public class HexagonDelegate implements Delegate, Closeable {

  /*
   * Creates a new HexagonDelegate object given the current 'context'.
   * Throws UnsupportedOperationException if Hexagon DSP delegation is not
   * available on this device.
   */
  public HexagonDelegate(Context context) throws UnsupportedOperationException


  /**
   * Frees TFLite resources in C runtime.
   *
   * User is expected to call this method explicitly.
   */
  @Override
  public void close();
}

Örnek kullanım

Adım 1. Her gece Hexagon temsilcisi AAR'yi kullanmak için app/build.gradle dosyasını düzenleyin

dependencies {
  ...
  implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
  implementation 'org.tensorflow:tensorflow-lite-hexagon:0.0.0-nightly-SNAPSHOT'
}

2. Adım. Android uygulamanıza Hexagon kitaplıkları ekleyin

  • hexagon_nn_skel.run'u indirin ve çalıştırın. “libhexagon_nn_skel.so”, “libhexagon_nn_skel_v65.so”, “libhexagon_nn_skel_v66.so” olmak üzere 3 farklı paylaşımlı kütüphane sağlamalıdır.

Adım 3. Bir temsilci oluşturun ve bir TensorFlow Lite Yorumlayıcısını başlatın

import org.tensorflow.lite.HexagonDelegate;

// Create the Delegate instance.
try {
  hexagonDelegate = new HexagonDelegate(activity);
  tfliteOptions.addDelegate(hexagonDelegate);
} catch (UnsupportedOperationException e) {
  // Hexagon delegate is not supported on this device.
}

tfliteInterpreter = new Interpreter(tfliteModel, tfliteOptions);

// Dispose after finished with inference.
tfliteInterpreter.close();
if (hexagonDelegate != null) {
  hexagonDelegate.close();
}

Altıgen temsilci C API'si

struct TfLiteHexagonDelegateOptions {
  // This corresponds to the debug level in the Hexagon SDK. 0 (default)
  // means no debug.
  int debug_level;
  // This corresponds to powersave_level in the Hexagon SDK.
  // where 0 (default) means high performance which means more power
  // consumption.
  int powersave_level;
  // If set to true, performance information about the graph will be dumped
  // to Standard output, this includes cpu cycles.
  // WARNING: Experimental and subject to change anytime.
  bool print_graph_profile;
  // If set to true, graph structure will be dumped to Standard output.
  // This is usually beneficial to see what actual nodes executed on
  // the DSP. Combining with 'debug_level' more information will be printed.
  // WARNING: Experimental and subject to change anytime.
  bool print_graph_debug;
};

// Return a delegate that uses Hexagon SDK for ops execution.
// Must outlive the interpreter.
TfLiteDelegate*
TfLiteHexagonDelegateCreate(const TfLiteHexagonDelegateOptions* options);

// Do any needed cleanup and delete 'delegate'.
void TfLiteHexagonDelegateDelete(TfLiteDelegate* delegate);

// Initializes the DSP connection.
// This should be called before doing any usage of the delegate.
// "lib_directory_path": Path to the directory which holds the
// shared libraries for the Hexagon NN libraries on the device.
void TfLiteHexagonInitWithPath(const char* lib_directory_path);

// Same as above method but doesn't accept the path params.
// Assumes the environment setup is already done. Only initialize Hexagon.
Void TfLiteHexagonInit();

// Clean up and switch off the DSP connection.
// This should be called after all processing is done and delegate is deleted.
Void TfLiteHexagonTearDown();

Örnek kullanım

Adım 1. Her gece Hexagon temsilcisi AAR'yi kullanmak için app/build.gradle dosyasını düzenleyin

dependencies {
  ...
  implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
  implementation 'org.tensorflow:tensorflow-lite-hexagon:0.0.0-nightly-SNAPSHOT'
}

2. Adım. Android uygulamanıza Hexagon kitaplıkları ekleyin

  • hexagon_nn_skel.run'u indirin ve çalıştırın. “libhexagon_nn_skel.so”, “libhexagon_nn_skel_v65.so”, “libhexagon_nn_skel_v66.so” olmak üzere 3 farklı paylaşımlı kütüphane sağlamalıdır.

Adım 3. C başlığını ekleyin

  • "hexagon_delegate.h" başlık dosyası GitHub'dan indirilebilir veya Hexagon temsilcisi AAR'dan çıkarılabilir.

Adım 4. Bir temsilci oluşturun ve bir TensorFlow Lite Yorumlayıcısını başlatın

  • Kodunuzda yerel Hexagon kitaplığının yüklendiğinden emin olun. Bu, System.loadLibrary("tensorflowlite_hexagon_jni"); çağrılarak yapılabilir.
    Aktivite veya Java giriş noktanızda.

  • Bir temsilci oluşturun, örnek:

#include "tensorflow/lite/delegates/hexagon/hexagon_delegate.h"

// Assuming shared libraries are under "/data/local/tmp/"
// If files are packaged with native lib in android App then it
// will typically be equivalent to the path provided by
// "getContext().getApplicationInfo().nativeLibraryDir"
const char[] library_directory_path = "/data/local/tmp/";
TfLiteHexagonInitWithPath(library_directory_path);  // Needed once at startup.
::tflite::TfLiteHexagonDelegateOptions params = {0};
// 'delegate_ptr' Need to outlive the interpreter. For example,
// If use case will need to resize input or anything that can trigger
// re-applying delegates then 'delegate_ptr' need to outlive the interpreter.
auto* delegate_ptr = ::tflite::TfLiteHexagonDelegateCreate(&params);
Interpreter::TfLiteDelegatePtr delegate(delegate_ptr,
  [](TfLiteDelegate* delegate) {
    ::tflite::TfLiteHexagonDelegateDelete(delegate);
  });
interpreter->ModifyGraphWithDelegate(delegate.get());
// After usage of delegate.
TfLiteHexagonTearDown();  // Needed once at end of app/DSP usage.

Paylaşılan kitaplığı uygulamanıza ekleyin

  • “app/src/main/jniLibs” klasörü oluşturun ve her hedef mimari için bir dizin oluşturun. Örneğin,
    • ARM 64-bit: app/src/main/jniLibs/arm64-v8a
    • ARM 32 bit: app/src/main/jniLibs/armeabi-v7a
  • .so dosyanızı mimariyle eşleşen dizine koyun.

Geri bildirim

Sorunlar için, lütfen kullanılan telefon modeli ve kart da dahil olmak üzere gerekli tüm repro ayrıntılarıyla bir GitHub sorunu oluşturun ( adb shell getprop ro.product.device ve adb shell getprop ro.board.platform ).

SSS

  • Temsilci hangi operasyonları destekliyor?
  • Temsilciyi etkinleştirdiğimde modelin DSP'yi kullandığını nasıl anlarım?
    • Temsilciyi etkinleştirdiğinizde iki günlük mesajı yazdırılır - biri temsilcinin oluşturulup oluşturulmadığını ve diğeri temsilci kullanılarak kaç düğümün çalıştığını belirtmek için.
      Created TensorFlow Lite delegate for Hexagon.
      Hexagon delegate: X nodes delegated out of Y nodes.
  • Temsilciyi çalıştırmak için modeldeki tüm Operasyonların desteklenmesine ihtiyacım var mı?
    • Hayır, Model desteklenen işlemlere dayalı olarak alt grafiklere bölünecektir. Desteklenmeyen tüm işlemler CPU üzerinde çalışır.
  • Hexagon temsilcisi AAR'ı kaynaktan nasıl oluşturabilirim?
    • bazel build -c opt --config=android_arm64 tensorflow/lite/delegates/hexagon/java:tensorflow-lite-hexagon .
  • Android cihazımda desteklenen bir SoC olmasına rağmen Hexagon temsilcisi neden başlatılamıyor?
    • Cihazınızın gerçekten desteklenen bir SoC'ye sahip olup olmadığını doğrulayın. adb shell cat /proc/cpuinfo | grep Hardware ve "Donanım: Qualcomm Technologies, Inc MSMXXXX" gibi bir şey döndürüp döndürmediğine bakın.
    • Bazı telefon üreticileri aynı telefon modeli için farklı SoC'ler kullanır. Bu nedenle, Hexagon temsilcisi aynı telefon modelinin tüm cihazlarında olmasa da yalnızca bazılarında çalışabilir.
    • Bazı telefon üreticileri, sistem dışı Android uygulamalarından Hexagon DSP kullanımını kasıtlı olarak kısıtlayarak Hexagon temsilcisini çalışamaz hale getirir.
  • Telefonum DSP erişimini kilitledi. Telefonu rootladım ve hala temsilciyi çalıştıramıyorum, ne yapmalı?
    • adb shell setenforce 0 çalıştırarak SELinux zorlamasını devre dışı bıraktığınızdan emin olun.