Karşılaştırma araçları
TensorFlow Lite karşılaştırma araçları şu anda aşağıdaki önemli performans metriklerine ilişkin istatistikleri ölçüyor ve hesaplıyor:
- Başlatma süresi
- Isınma durumunun çıkarım zamanı
- Sabit durumun çıkarım zamanı
- Başlatma sırasında bellek kullanımı
- Toplam 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 programları olarak kullanılabilir ve hepsi aynı temel performans ölçümü mantığına sahiptir. Kullanılabilir seçenekler ile çıkış biçimlerinin, çalışma zamanı ortamındaki farklılıklar nedeniyle biraz farklı olduğunu unutmayın.
Android karşılaştırma uygulaması
Android'de karşılaştırma aracını kullanmanın iki yolu vardır. Biri yerel karşılaştırma ikili programı, diğeri ise modelin uygulamada nasıl performans göstereceğini daha iyi gösteren Android karşılaştırma uygulamasıdır. Her iki durumda da karşılaştırma aracından alınan sayılar, gerçek uygulamada modelle çıkarım yapıldığından biraz farklı olacaktır.
Bu Android karşılaştırma uygulamasının kullanıcı arayüzü yok. adb
komutunu kullanarak yükleyip çalıştırın ve adb logcat
komutunu kullanarak sonuçları alın.
Uygulamayı indirme veya oluşturma
Aşağıdaki bağlantıları kullanarak, her gece önceden oluşturulmuş Android karşılaştırma uygulamalarını indirin:
Flex delegate aracılığıyla TF işlemlerini destekleyen Android karşılaştırma uygulamaları için aşağıdaki bağlantıları kullanın:
Bu instructions uygulayarak uygulamayı kaynaktan da derleyebilirsiniz.
Karşılaştırma hazırlama
Karşılaştırma uygulamasını çalıştırmadan önce uygulamayı yükleyin ve model dosyasını aşağıdaki şekilde cihaza aktarın:
adb install -r -d -g android_aarch64_benchmark_model.apk
adb push your_model.tflite /data/local/tmp
Karşılaştırma çalıştırma
adb shell am start -S \
-n org.tensorflow.lite.benchmark/.BenchmarkModelActivity \
--es args '"--graph=/data/local/tmp/your_model.tflite \
--num_threads=4"'
graph
zorunlu 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 belirtebilirsiniz.
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=false)
GPU yetkisi kullan.use_xnnpack
:bool
(varsayılan=false
)
XNNPACK yetkilendirmesi kullanın.
Kullandığınız cihaza bağlı olarak bu seçeneklerden bazıları kullanılamayabilir veya etkin olmayabilir. Karşılaştırma uygulamasıyla çalıştırabileceğiniz diğer 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 raporlanır:
... tflite : Inference timings in us: Init: 5685, First inference: 18535, Warmup (avg): 14462.3, Inference (avg): 14575.2
Yerel karşılaştırma ikili programı
Karşılaştırma aracı, yerel bir ikili program benchmark_model
olarak da sunulur. Bu aracı Linux, Mac, yerleşik cihazlar ve Android cihazlarda bir kabuk komut satırından çalıştırabilirsiniz.
İkili programı indirme veya oluşturma
Aşağıdaki bağlantıları izleyerek, her gece önceden oluşturulmuş yerel komut satırı ikili programlarını indirin:
Flex temsilcisi aracılığıyla TF işlemlerini destekleyen, geceleri önceden oluşturulmuş ikili programlar için aşağıdaki bağlantıları kullanın:
Yerel karşılaştırma ikili programını bilgisayarınızda kaynaktan da oluşturabilirsiniz.
bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model
Android NDK araç zinciri ile derlemek için önce bu kılavuzu izleyerek derleme ortamını ayarlamanız veya bu kılavuzda açıklanan 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ırma çalıştırma
Karşılaştırmaları bilgisayarınızda çalıştırmak için kabuktaki ikili programı çalıştırın.
path/to/downloaded_or_built/benchmark_model \
--graph=your_model.tflite \
--num_threads=4
Yerel komut satırı ikili programı için yukarıda belirtildiği şekilde aynı parametre grubunu kullanabilirsiniz.
Model işlemlerinde profil oluşturma
Karşılaştırma modeli ikili programı, model işlemlerinin profilini çıkarmanıza ve her bir operatörün yürütme sürelerini öğrenmenize de olanak tanır. Bunu yapmak için çağrı sırasında --enable_op_profiling=true
işaretini benchmark_model
cihazına iletin. Ayrıntıları burada bulabilirsiniz.
Tek bir çalıştırmada birden çok performans seçeneği için yerel karşılaştırmalı ikili program
Tek bir çalıştırmada birden fazla performans seçeneğini karşılaştırmak için kullanışlı ve basit bir C++ ikili programı da sağlanır. Bu ikili program, daha önce bahsedilen karşılaştırma aracı temel alınarak oluşturulur. Bu araç, aynı anda yalnızca tek bir performans seçeneğini karşılaştırabilir. İkililer aynı derleme/yükleme/çalıştırma işlemini paylaşır ancak bu ikili programın DERLEME hedef adı benchmark_model_performance_options
şeklindedir ve bazı ek parametreler gerektirir.
Bu ikili program için önemli bir parametre şudur:
perf_options_list
: string
(varsayılan='all')
Karşılaştırma yapılacak TFLite performans seçeneklerinin virgülle ayrılmış listesi.
Bu araç için gecelik önceden oluşturulmuş ikili programları aşağıda listelenen şekilde alabilirsiniz:
iOS karşılaştırma uygulaması
Karşılaştırmaları iOS cihazda çalıştırmak için kaynak kaynağından derlemeniz gerekir.
TensorFlow Lite model dosyasını kaynak ağacının benchmark_data dizinine yerleştirin ve benchmark_params.json
dosyasında değişiklik yapın. Bu dosyalar uygulamaya paketlenir ve uygulama, verileri dizinden okur. Ayrıntılı talimatlar için iOS karşılaştırma uygulamasını ziyaret edin.
İyi bilinen modeller için performans karşılaştırmaları
Bu bölümde, bazı Android ve iOS cihazlarda iyi bilinen modeller çalıştırırken yararlanılan TensorFlow Lite performans karşılaştırmaları listelenmiştir.
Android performans karşılaştırmaları
Bu performans karşılaştırma sayıları, yerel karşılaştırma ikili programı ile oluşturulmuştur.
Android karşılaştırmalarında CPU benzeşimi, varyansı azaltmak için cihazda büyük çekirdekler kullanacak şekilde ayarlanmıştır (ayrıntılara bakın).
Modellerin indirildiği ve /data/local/tmp/tflite_models
dizinine çıkartıldığı varsayılır. Karşılaştırmalı ikili program, 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
GPU temsilcisiyle çalıştırmak için --use_gpu=true
ayarını yapın.
Aşağıdaki performans değerleri Android 10'da ölçülür.
Model Adı | Cihaz | CPU, 4 iş parçacığı | GPU |
---|---|---|---|
Mobilenet_1.0_224(float) | Pixel 3 | 23,9 ms. | 6,45 ms. |
Pixel 4 | 14,0 ms. | 9,0 ms. | |
Mobilenet_1.0_224 (nicelik) | Pixel 3 | 13,4 ms. | --- |
Pixel 4 | 5,0 ms. | --- | |
NASNet mobil | Pixel 3 | 56 ms. | --- |
Pixel 4 | 34,5 ms. | --- | |
SqueezeNet | Pixel 3 | 35,8 ms. | 9,5 ms. |
Pixel 4 | 23,9 ms. | 11,1 ms. | |
Inception_ResNet_V2 | Pixel 3 | 422 ms. | 99,8 ms. |
Pixel 4 | 272,6 ms. | 87,2 ms. | |
Inception_V4 | Pixel 3 | 486 ms. | 93 ms. |
Pixel 4 | 324,1 ms. | 97,6 ms. |
iOS performans karşılaştırmaları
Bu performans karşılaştırma sayıları, iOS karşılaştırma uygulaması ile oluşturulmuştur.
iOS karşılaştırmalarını çalıştırmak için karşılaştırma uygulaması, uygun modeli içerecek şekilde değiştirilmiş ve benchmark_params.json
, num_threads
değerini 2 olarak ayarlamak üzere değiştirilmiştir. GPU yetkilendirmesini kullanmak için benchmark_params.json
öğesine "use_gpu" : "1"
ve "gpu_wait_type" : "aggressive"
seçenekleri de 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 (nicelik) | iPhone XS | 11 ms. | --- |
NASNet mobil | iPhone XS | 30,4 ms. | --- |
SqueezeNet | iPhone XS | 21,1 ms. | 15,5 ms. |
Inception_ResNet_V2 | iPhone XS | 261,1 ms. | 45,7 ms. |
Inception_V4 | iPhone XS | 309 ms. | 54,4 ms. |
TensorFlow Lite dahili bağlantılarını izleme
Android'de TensorFlow Lite dahili bileşenlerini izleme
Bir Android uygulamasının TensorFlow Lite yorumlayıcısının dahili etkinlikleri Android izleme araçları tarafından yakalanabilir. Bunlar, Android Trace API ile aynı etkinliklerdir. Bu nedenle, Java/Kotlin kodundan yakalanan etkinlikler, TensorFlow Lite dahili etkinlikleriyle birlikte görüntülenir.
Etkinliklere ilişkin bazı örnekler şunlardır:
- Operatör çağrısı
- Yetki verilmiş kullanıcıya göre grafik değişikliği
- Tensör ayırma
İzleri yakalamayla ilgili farklı seçeneklerin yanı sıra bu kılavuzda, Android Studio CPU Profiler ve Sistem İzleme uygulaması ele alınmaktadır. Diğer seçenekler için Perfetto komut satırı aracına veya Systrace komut satırı aracına bakın.
Java koduna izleme etkinlikleri ekleme
Bu, Image Classification örnek uygulamasından alınan bir kod snippet'idir. TensorFlow Lite çevirmeni 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ı fark etmeye yardımcı olması açısından yararlı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 debug.tflite.trace
Android sistem özelliğini 1 olarak ayarlayın.
adb shell setprop debug.tflite.trace 1
Bu özellik, TensorFlow Lite yorumlayıcısı başlatılırken ayarlanmışsa çevirmen kaynaklı önemli etkinlikler (ör. operatör çağrısı) izlenir.
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 Profil Aracı
Aşağıdaki adımları uygulayarak Android Studio CPU Profiler ile izleri yakalayın:
Üst menülerden Çalıştır > Profil "uygulaması"nı seçin.
Profiler penceresi göründüğünde CPU zaman çizelgesinde herhangi bir yeri tıklayın.
CPU Profil Oluşturma modları arasından "İzleme Sistemi Çağrıları"nı seçin.
"Kaydet" düğmesine basın.
"Durdur" düğmesine basın.
İz sonucunu inceleyin.
Bu örnekte, bir iş parçacığındaki etkinliklerin hiyerarşisini ve her operatör zamanına ait istatistikleri, ayrıca tüm uygulamanın iş parçacıkları arasındaki veri akışını görebilirsiniz.
Sistem İzleme uygulaması
Sistem İzleme uygulamasında ayrıntılı olarak açıklanan adımları uygulayarak Android Studio olmadan izleri yakalayın.
Bu örnekte, aynı TFLite etkinlikleri yakalandı ve Android cihazın sürümüne bağlı olarak Perfetto veya Systrace biçiminde kaydedildi. Yakalanan iz dosyaları, Perfetto kullanıcı arayüzünde açılabilir.
iOS'te TensorFlow Lite dahili bağlantılarını izleme
Bir iOS uygulamasının TensorFlow Lite yorumlayıcısının dahili etkinlikleri, Xcode'a dahil olan Instruments aracı tarafından yakalanabilir. Bunlar iOS signpost etkinlikleridir, bu nedenle Swift/Objective-C kodundan yakalanan etkinlikler TensorFlow Lite dahili etkinlikleriyle birlikte görünür.
Etkinliklere ilişkin bazı örnekler şunlardır:
- Operatör çağrısı
- Yetki verilmiş kullanıcıya göre grafik değişikliği
- Tensör ayırma
TensorFlow Lite izlemeyi etkinleştir
Aşağıdaki adımları uygulayarak debug.tflite.trace
ortam değişkenini ayarlayın:
Xcode'un üst menülerinden Ürün > Şema > Şemayı Düzenle... seçeneğini belirleyin.
Sol bölmede 'Profil'i tıklayın.
"Çalıştır işleminin bağımsız değişkenlerini ve ortam değişkenlerini kullan" onay kutusunun işaretini 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 etkinliklerini hariç tutmak istiyorsanız ortam değişkenini kaldırarak izlemeyi devre dışı bırakın.
XCode Enstrümanı
Aşağıdaki adımları uygulayarak izleri yakalayın:
Xcode'un üst menülerinden Product > Profile'ı (Ürün > Profil) seçin.
Araçlar aracı açıldığında profil oluşturma şablonları arasından Günlük kaydı'nı tıklayın.
"Başlat" düğmesine basın.
"Durdur" düğmesine basın.
OS Logging alt sistem öğelerini genişletmek için "os_signpost"u tıklayın.
"org.tensorflow.lite" OS Logging alt sistemini tıklayın.
İz sonucunu inceleyin.
Bu örnekte, her operatör zamanı için etkinlik hiyerarşisini ve istatistikleri görebilirsiniz.
İzleme verilerini kullanma
İzleme verileri, performans sorunlarını belirlemenize olanak tanır.
Aşağıda, profil oluşturucudan edinebileceğiniz bilgilere ve performansı artıracak olası çözümlere ilişkin bazı örnekler verilmiştir:
- Kullanılabilir CPU çekirdeği sayısı çıkarım iş parçacığı sayısından daha azsa CPU planlama ek yükü, vasatın altında bir performansa yol açabilir. Model çıkarımınızla çakışmamak veya yorumlayıcı iş parçacıklarının sayısını değiştirmek için uygulamanızda yoğun olarak kullanılan diğer CPU görevlerini yeniden planlayabilirsiniz.
- Operatörler tam olarak yetkilendirilmemiş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, desteklenen benzer operatörlerle değiştirebilirsiniz.