Karşılaştırma araçları
TensorFlow Lite kıyaslama araçları şu anda aşağıdaki önemli performans ölçümlerine ilişkin istatistikleri ölçmekte ve hesaplamaktadır:
- Başlatma süresi
- Isınma durumunun çıkarım süresi
- Kararlı durumun çıkarım süresi
- Başlatma süresi boyunca bellek kullanımı
- Genel bellek kullanımı
Karşılaştırma araçları, Android ve iOS için karşılaştırma uygulamaları ve yerel komut satırı ikili dosyaları olarak mevcuttur ve hepsi aynı temel performans ölçüm mantığını paylaşır. Çalışma zamanı ortamındaki farklılıklar nedeniyle mevcut seçeneklerin ve çıktı formatlarının biraz farklı olduğunu unutmayın.
Android kıyaslama uygulaması
Karşılaştırma aracını Android ile kullanmanın iki seçeneği vardır. Biri yerel bir kıyaslama ikili programı , diğeri ise modelin uygulamada nasıl performans göstereceğinin daha iyi bir göstergesi olan bir Android kıyaslama uygulamasıdır. Her iki durumda da, karşılaştırma aracındaki sayılar, gerçek uygulamadaki modelle çıkarım çalıştırıldığında elde edilenlerden biraz farklı olacaktır.
Bu Android kıyaslama uygulamasının kullanıcı arayüzü yok. adb
komutunu kullanarak kurun ve çalıştırın ve adb logcat
komutunu kullanarak sonuçları alın.
Uygulamayı indirin veya oluşturun
Aşağıdaki bağlantıları kullanarak her gece önceden oluşturulmuş Android kıyaslama uygulamalarını indirin:
Flex temsilcisi aracılığıyla TF operasyonlarını destekleyen Android kıyaslama uygulamaları için aşağıdaki bağlantıları kullanın:
Bu talimatları izleyerek uygulamayı kaynaktan da oluşturabilirsiniz.
Karşılaştırmayı hazırlayın
Benchmark uygulamasını çalıştırmadan önce uygulamayı yükleyin ve model dosyasını aşağıdaki şekilde cihaza gönderin:
adb install -r -d -g android_aarch64_benchmark_model.apk
adb push your_model.tflite /data/local/tmp
Karşılaştırmayı çalıştır
adb shell am start -S \
-n org.tensorflow.lite.benchmark/.BenchmarkModelActivity \
--es args '"--graph=/data/local/tmp/your_model.tflite \
--num_threads=4"'
graph
gerekli bir parametredir.
-
graph
:string
TFLite model dosyasının yolu.
Karşılaştırmayı çalıştırmak için daha fazla isteğe bağlı parametre belirleyebilirsiniz.
-
num_threads
:int
(varsayılan=1)
TFLite yorumlayıcısını çalıştırmak için kullanılacak iş parçacığı sayısı. -
use_gpu
:bool
(varsayılan=yanlış)
GPU temsilcisini kullan. -
use_nnapi
:bool
(varsayılan=yanlış)
NNAPI temsilcisini kullanın. -
use_xnnpack
:bool
(varsayılan=false
)
XNNPACK temsilcisini kullanın. -
use_hexagon
:bool
(varsayılan=false
)
Hexagon temsilcisini kullanın.
Kullandığınız cihaza bağlı olarak bu seçeneklerden bazıları kullanılamayabilir veya hiçbir etkisi olmayabilir. Karşılaştırma uygulamasıyla çalıştırabileceğiniz daha fazla performans parametresi için parametrelere bakın.
logcat
komutunu kullanarak sonuçları görüntüleyin:
adb logcat | grep "Inference timings"
Karşılaştırma sonuçları şu şekilde rapor edilir:
... tflite : Inference timings in us: Init: 5685, First inference: 18535, Warmup (avg): 14462.3, Inference (avg): 14575.2
Yerel kıyaslama ikili programı
Karşılaştırma aracı aynı zamanda yerel bir ikili benchmark_model
olarak da sağlanır. Bu aracı Linux, Mac, gömülü cihazlar ve Android cihazlarda kabuk komut satırından çalıştırabilirsiniz.
İkili dosyayı indirin veya oluşturun
Aşağıdaki bağlantıları takip ederek her gece önceden oluşturulmuş yerel komut satırı ikili dosyalarını indirin:
Flex delege aracılığıyla TF operasyonlarını destekleyen, gecelik önceden oluşturulmuş ikili dosyalar için aşağıdaki bağlantıları kullanın:
TensorFlow Lite Hexagon temsilcisiyle kıyaslama yapmak için gerekli libhexagon_interface.so
dosyalarını da önceden oluşturduk (bu dosyayla ilgili ayrıntılar için buraya bakın). İlgili platformun dosyasını aşağıdaki bağlantılardan indirdikten sonra lütfen dosyayı libhexagon_interface.so
olarak yeniden adlandırın.
Ayrıca yerel kıyaslama ikili dosyasını bilgisayarınızdaki kaynaktan da oluşturabilirsiniz.
bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model
Android NDK araç zinciriyle derlemek için öncelikle bu kılavuzu izleyerek derleme ortamını kurmanız veya bu kılavuzda açıklandığı gibi docker görüntüsünü kullanmanız gerekir.
bazel build -c opt --config=android_arm64 \
//tensorflow/lite/tools/benchmark:benchmark_model
Karşılaştırmayı çalıştır
Karşılaştırmaları bilgisayarınızda çalıştırmak için ikili dosyayı kabuktan yürütün.
path/to/downloaded_or_built/benchmark_model \
--graph=your_model.tflite \
--num_threads=4
Yerel komut satırı ikili dosyasıyla yukarıda belirtilen aynı parametre kümesini kullanabilirsiniz.
Model işlemlerinin profilini oluşturma
Karşılaştırma modeli ikili programı ayrıca model operasyonlarının profilini çıkarmanıza ve her operatörün yürütme sürelerini almanıza olanak tanır. Bunu yapmak için, çağırma sırasında --enable_op_profiling=true
işaretini benchmark_model
iletin. Ayrıntılar burada açıklanmaktadır.
Tek bir çalıştırmada birden fazla performans seçeneği için yerel kıyaslama ikili programı
Tek bir çalıştırmada birden fazla performans seçeneğini kıyaslamak için kullanışlı ve basit bir C++ ikili programı da sağlanmıştır. Bu ikili program, aynı anda yalnızca tek bir performans seçeneğini kıyaslayabilen, yukarıda bahsedilen kıyaslama aracı temel alınarak oluşturulmuştur. Aynı derleme/kurma/çalıştırma sürecini paylaşırlar, ancak bu ikili programın BUILD hedef adı benchmark_model_performance_options
ve bazı ek parametreler alır. Bu ikili için önemli bir parametre şudur:
perf_options_list
: string
(varsayılan='tümü')
Karşılaştırma yapılacak TFLite performans seçeneklerinin virgülle ayrılmış listesi.
Bu araç için her gece önceden oluşturulmuş ikili dosyaları aşağıda listelendiği şekilde alabilirsiniz:
iOS kıyaslama uygulaması
Karşılaştırmaları iOS cihazında çalıştırmak için uygulamayı kaynaktan oluşturmanız gerekir. TensorFlow Lite model dosyasını kaynak ağacın kıyaslama_data dizinine yerleştirin ve benchmark_params.json
dosyasını değiştirin. Bu dosyalar uygulamaya paketlenir ve uygulama, dizindeki verileri okur. Ayrıntılı talimatlar için iOS kıyaslama uygulamasını ziyaret edin.
Tanınmış modeller için performans kıyaslamaları
Bu bölümde, iyi bilinen modelleri bazı Android ve iOS cihazlarda çalıştırırken TensorFlow Lite performans kıyaslamaları listelenmektedir.
Android performans kıyaslamaları
Bu performans kıyaslama numaraları, yerel kıyaslama ikili dosyasıyla oluşturuldu.
Android kıyaslamaları için CPU benzeşimi, farklılığı azaltmak amacıyla cihazdaki büyük çekirdekleri kullanacak şekilde ayarlanmıştır ( ayrıntılara bakın).
Modellerin indirildiğini ve /data/local/tmp/tflite_models
dizinine açıldığını varsayar. Karşılaştırma ikili dosyası bu talimatlar kullanılarak oluşturulur ve /data/local/tmp
dizininde olduğu varsayılır.
Karşılaştırmayı çalıştırmak için:
adb shell /data/local/tmp/benchmark_model \
--num_threads=4 \
--graph=/data/local/tmp/tflite_models/${GRAPH} \
--warmup_runs=1 \
--num_runs=50
Nnapi temsilcisiyle çalıştırmak için --use_nnapi=true
ayarlayın. GPU temsilcisiyle çalıştırmak için --use_gpu=true
ayarlayın.
Aşağıdaki performans değerleri Android 10'da ölçülmüştür.
Model adı | Cihaz | CPU, 4 iş parçacığı | GPU | NNAPI |
---|---|---|---|---|
Mobilenet_1.0_224(float) | Piksel 3 | 23,9 ms | 6,45 ms | 13,8 ms |
Piksel 4 | 14,0 ms | 9,0 ms | 14,8 ms | |
Mobilenet_1.0_224 (nicel) | Piksel 3 | 13,4 ms | --- | 6,0 ms |
Piksel 4 | 5,0 ms | --- | 3,2 ms | |
NASNet mobil | Piksel 3 | 56 ms | --- | 102 ms |
Piksel 4 | 34,5 ms | --- | 99,0 ms | |
SıkmaNet | Piksel 3 | 35,8 ms | 9,5 ms | 18,5 ms |
Piksel 4 | 23,9 ms | 11,1 ms | 19,0 ms | |
Inception_ResNet_V2 | Piksel 3 | 422 ms | 99,8 ms | 201 ms |
Piksel 4 | 272,6 ms | 87,2 ms | 171,1 ms | |
Başlangıç_V4 | Piksel 3 | 486 ms | 93 ms | 292 ms |
Piksel 4 | 324,1 ms | 97,6 ms | 186,9 ms |
iOS performans kıyaslamaları
Bu performans kıyaslama sayıları, iOS kıyaslama uygulamasıyla oluşturuldu.
İOS kıyaslamalarını çalıştırmak için kıyaslama uygulaması uygun modeli içerecek şekilde değiştirildi ve benchmark_params.json
, num_threads
2'ye ayarlayacak şekilde değiştirildi. GPU temsilcisini kullanmak için "use_gpu" : "1"
ve "gpu_wait_type" : "aggressive"
seçenekleri kullanıldı benchmark_params.json
dosyasına da eklendi.
Model adı | Cihaz | CPU, 2 iş parçacığı | GPU |
---|---|---|---|
Mobilenet_1.0_224(float) | iPhone XS | 14,8 ms | 3,4 ms |
Mobilenet_1.0_224 (nicel) | iPhone XS | 11 ms | --- |
NASNet mobil | iPhone XS | 30,4 ms | --- |
SıkmaNet | iPhone XS | 21,1 ms | 15,5 ms |
Inception_ResNet_V2 | iPhone XS | 261,1 ms | 45,7 ms |
Başlangıç_V4 | iPhone XS | 309 ms | 54,4 ms |
TensorFlow Lite'ın dahili bileşenlerini izleyin
Android'de TensorFlow Lite dahili bileşenlerini izleme
Bir Android uygulamasının TensorFlow Lite yorumlayıcısından gelen dahili olaylar , Android izleme araçları tarafından yakalanabilir. Bunlar Android Trace API ile aynı olaylardır, dolayısıyla Java/Kotlin kodundan yakalanan olaylar TensorFlow Lite dahili olaylarıyla birlikte görülür.
Olaylardan bazı örnekler şunlardır:
- Operatör çağırma
- Temsilci tarafından grafik değişikliği
- Tensör tahsisi
İzleri yakalamaya yönelik farklı seçenekler arasında bu kılavuz, Android Studio CPU Profiler'ı ve Sistem İzleme uygulamasını kapsar. Diğer seçenekler için Perfetto komut satırı aracına veya Systrace komut satırı aracına bakın.
Java koduna izleme olayları ekleme
Bu, Görüntü Sınıflandırması örnek uygulamasından bir kod pasajıdır. TensorFlow Lite yorumlayıcısı, recognizeImage/runInference
bölümünde çalışır. Bu adım isteğe bağlıdır ancak çıkarım çağrısının nerede yapıldığının fark edilmesine yardımcı olması açısından faydalıdır.
Trace.beginSection("recognizeImage");
...
// Runs the inference call.
Trace.beginSection("runInference");
tflite.run(inputImageBuffer.getBuffer(), outputProbabilityBuffer.getBuffer().rewind());
Trace.endSection();
...
Trace.endSection();
TensorFlow Lite izlemeyi etkinleştir
TensorFlow Lite izlemeyi etkinleştirmek için Android uygulamasını başlatmadan önce Android sistem özelliği debug.tflite.trace
1'e ayarlayın.
adb shell setprop debug.tflite.trace 1
Bu özellik TensorFlow Lite yorumlayıcısı başlatıldığında ayarlanmışsa, yorumlayıcıdan gelen önemli olaylar (örneğin, operatör çağrısı) izlenecektir.
Tüm izleri yakaladıktan sonra özellik değerini 0 olarak ayarlayarak izlemeyi devre dışı bırakın.
adb shell setprop debug.tflite.trace 0
Android Studio CPU Profilcisi
Aşağıdaki adımları izleyerek Android Studio CPU Profiler ile izleri yakalayın:
Üst menülerden Çalıştır > Profil 'uygulaması'nı seçin.
Profil Oluşturucu penceresi göründüğünde CPU zaman çizelgesinde herhangi bir yere tıklayın.
CPU Profil Oluşturma modları arasından 'Sistem Çağrılarını İzle' seçeneğini seçin.
'Kayıt' düğmesine basın.
'Durdur' düğmesine basın.
İzleme sonucunu inceleyin.
Bu örnekte, bir iş parçacığında olayların hiyerarşisini ve her operatör zamanına ilişkin istatistikleri görebilir, ayrıca tüm uygulamanın iş parçacıkları arasındaki veri akışını da görebilirsiniz.
Sistem İzleme uygulaması
Sistem İzleme uygulamasında ayrıntılı olarak açıklanan adımları izleyerek Android Studio olmadan izleri yakalayın.
Bu örnekte, aynı TFLite olayları yakalanmış ve Android cihazın sürümüne bağlı olarak Perfetto veya Systrace formatında kaydedilmiştir. Yakalanan izleme dosyaları Perfetto kullanıcı arayüzünde açılabilir.
İOS'ta TensorFlow Lite dahili bileşenlerini izleme
Bir iOS uygulamasının TensorFlow Lite yorumlayıcısındaki dahili olaylar, Xcode'a dahil olan Instruments aracı tarafından yakalanabilir. Bunlar iOS tabela olaylarıdır, dolayısıyla Swift/Objective-C kodundan yakalanan olaylar TensorFlow Lite dahili olaylarıyla birlikte görülür.
Olaylardan bazı örnekler şunlardır:
- Operatör çağırma
- Temsilci tarafından grafik değişikliği
- Tensör tahsisi
TensorFlow Lite izlemeyi etkinleştir
Aşağıdaki adımları izleyerek debug.tflite.trace
ortam değişkenini ayarlayın:
Xcode'un üst menülerinden Ürün > Şema > Şemayı Düzenle... seçeneğini seçin.
Sol bölmedeki 'Profil'i tıklayın.
'Çalıştır eyleminin bağımsız değişkenlerini ve ortam değişkenlerini kullan' onay kutusunun seçimini kaldırın.
'Ortam Değişkenleri' bölümünün altına
debug.tflite.trace
ekleyin.
iOS uygulamasının profilini oluştururken TensorFlow Lite olaylarını hariç tutmak istiyorsanız ortam değişkenini kaldırarak izlemeyi devre dışı bırakın.
XCode Aletleri
Aşağıdaki adımları izleyerek izleri yakalayın:
Xcode'un üst menülerinden Ürün > Profil'i seçin.
Araçlar aracı başlatıldığında profil oluşturma şablonları arasında günlüğe kaydetme'ye tıklayın.
'Başlat' düğmesine basın.
'Durdur' düğmesine basın.
İşletim Sistemi Günlüğü alt sistemi öğelerini genişletmek için 'os_signpost'a tıklayın.
'org.tensorflow.lite' İşletim Sistemi Günlüğü alt sistemine tıklayın.
İzleme sonucunu inceleyin.
Bu örnekte, her operatör zamanına ilişkin olayların ve istatistiklerin hiyerarşisini görebilirsiniz.
İzleme verilerini kullanma
İzleme verileri performans darboğazlarını tanımlamanıza olanak tanır.
Profil oluşturucudan alabileceğiniz bazı içgörü örnekleri ve performansı artırmaya yönelik potansiyel çözümler şunlardır:
- Kullanılabilir CPU çekirdeği sayısı çıkarım iş parçacığı sayısından küçükse, CPU zamanlama ek yükü ortalamanın altında performansa yol açabilir. Model çıkarımınızla çakışmayı önlemek veya yorumlayıcı iş parçacığı sayısını ayarlamak için uygulamanızdaki diğer CPU yoğun görevleri yeniden planlayabilirsiniz.
- Operatörlere tam olarak yetki verilmemişse model grafiğinin bazı bölümleri beklenen donanım hızlandırıcı yerine CPU üzerinde yürütülür. Desteklenmeyen operatörleri benzer desteklenen operatörlerle değiştirebilirsiniz.