TensorFlow Lite Hexagon temsilcisi,TensorFlow Lite Hexagon temsilcisi

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

Desteklenen cihazlar:

Şu anda aşağıdakiler dahil ancak bunlarla sınırlı olmamak üzere aşağıdaki 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ı nicemleme kullanılarak oluşturulanlar da dahil olmak üzere, 8 bitlik simetrik niceleme spesifikasyonumuza uyan tüm modelleri destekler. Eski kuantizasyona duyarlı eğitim yoluyla eğitilen UInt8 modelleri de desteklenir; örneğin Barındırılan Modeller sayfamızdaki 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

1. Adım. Gecelik 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. Hexagon kitaplıklarını Android uygulamanıza 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.

3. Adım. Bir temsilci oluşturun ve 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

1. Adım. Gecelik 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. Hexagon kitaplıklarını Android uygulamanıza 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.

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

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

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

  • Kodunuzda yerel Hexagon kitaplığının yüklü olduğundan emin olun. Bu System.loadLibrary("tensorflowlite_hexagon_jni"); çağrılarak yapılabilir.
    Faaliyet 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 your use case requires resizing the input or anything that can trigger
// re-applying delegates then 'delegate_ptr' must 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ünü 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 telefon modeli ve kullanılan kart da dahil olmak üzere gerekli tüm repro ayrıntılarını içeren bir GitHub sorunu oluşturun ( adb shell getprop ro.product.device ve adb shell getprop ro.board.platform ).

SSS

  • Temsilci tarafından hangi işlemler destekleniyor?
  • Temsilciyi etkinleştirdiğimde modelin DSP'yi kullandığını nasıl anlayabilirim?
    • Temsilciyi etkinleştirdiğinizde iki günlük mesajı yazdırılacaktır; biri temsilcinin oluşturulup oluşturulmadığını belirtmek için, diğeri ise temsilciyi kullanarak 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 göre alt grafiklere bölünecektir. Desteklenmeyen tüm işlemler CPU üzerinde çalışacaktır.
  • Hexagon temsilcisi AAR'ı kaynaktan nasıl oluşturabilirim?
    • bazel build -c opt --config=android_arm64 tensorflow/lite/delegates/hexagon/java:tensorflow-lite-hexagon kullanın.
  • 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 çalıştırın. adb shell cat /proc/cpuinfo | grep Hardware ve "Hardware: 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 değil yalnızca bazılarında çalışabilir.
    • Bazı telefon üreticileri, Hexagon DSP'nin sistem dışı Android uygulamalarında kullanımını kasıtlı olarak kısıtlayarak Hexagon temsilcisinin çalışamamasına neden olur.
  • Telefonum DSP erişimini kilitledi. Telefonu rootladım ama hala temsilciyi çalıştıramıyorum, ne yapmalıyım?
    • adb shell setenforce 0 komutunu çalıştırarak SELinux zorlamasını devre dışı bıraktığınızdan emin olun.