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.
- 3'ünü de uygulamanıza diğer paylaşılan kitaplıklarla ekleyin. Uygulamanıza paylaşılan kitaplık nasıl eklenir konusuna bakın. Temsilci, cihaza bağlı olarak en iyi performansa sahip olanı otomatik olarak seçecektir.
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.
- 3'ünü de uygulamanıza diğer paylaşılan kitaplıklarla ekleyin. Uygulamanıza paylaşılan kitaplık nasıl eklenir konusuna bakın. Temsilci, cihaza bağlı olarak en iyi performansa sahip olanı otomatik olarak seçecektir.
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(¶ms);
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
- ARM 64-bit:
- .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?
- Desteklenen operasyonların ve kısıtlamaların mevcut listesine bakın
- 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 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.
- 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.
- Cihazınızın gerçekten desteklenen bir SoC'ye sahip olup olmadığını doğrulayın.
- 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.
-