Performans ölçümü

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:

  1. Üst menülerden Çalıştır > Profil "uygulaması"nı seçin.

  2. Profiler penceresi göründüğünde CPU zaman çizelgesinde herhangi bir yeri tıklayın.

  3. CPU Profil Oluşturma modları arasından "İzleme Sistemi Çağrıları"nı seçin.

    "İzleme Sistemi Çağrıları"nı seçin

  4. "Kaydet" düğmesine basın.

  5. "Durdur" düğmesine basın.

  6. İz sonucunu inceleyin.

    Android Studio izi

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.

Perfetto izi

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:

  1. Xcode'un üst menülerinden Ürün > Şema > Şemayı Düzenle... seçeneğini belirleyin.

  2. Sol bölmede 'Profil'i tıklayın.

  3. "Çalıştır işleminin bağımsız değişkenlerini ve ortam değişkenlerini kullan" onay kutusunun işaretini kaldırın.

  4. "Ortam Değişkenleri" bölümünün altına debug.tflite.trace ekleyin.

    Ortam değişkenini ayarla

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:

  1. Xcode'un üst menülerinden Product > Profile'ı (Ürün > Profil) seçin.

  2. Araçlar aracı açıldığında profil oluşturma şablonları arasından Günlük kaydı'nı tıklayın.

  3. "Başlat" düğmesine basın.

  4. "Durdur" düğmesine basın.

  5. OS Logging alt sistem öğelerini genişletmek için "os_signpost"u tıklayın.

  6. "org.tensorflow.lite" OS Logging alt sistemini tıklayın.

  7. İz sonucunu inceleyin.

    Xcode Enstrümanları izi

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.