Performans ölçümü

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:

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

  2. Profil Oluşturucu penceresi göründüğünde CPU zaman çizelgesinde herhangi bir yere tıklayın.

  3. CPU Profil Oluşturma modları arasından 'Sistem Çağrılarını İzle' seçeneğini seçin.

    'Sistem Çağrılarını İzle'yi seçin

  4. 'Kayıt' düğmesine basın.

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

  6. İzleme sonucunu inceleyin.

    Android Studio izlemesi

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.

Mükemmel izleme

İ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:

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

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

  3. 'Çalıştır eyleminin bağımsız değişkenlerini ve ortam değişkenlerini kullan' onay kutusunun seçimini 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 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:

  1. Xcode'un üst menülerinden Ürün > Profil'i seçin.

  2. Araçlar aracı başlatıldığında profil oluşturma şablonları arasında günlüğe kaydetme'ye tıklayın.

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

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

  5. İşletim Sistemi Günlüğü alt sistemi öğelerini genişletmek için 'os_signpost'a tıklayın.

  6. 'org.tensorflow.lite' İşletim Sistemi Günlüğü alt sistemine tıklayın.

  7. İzleme sonucunu inceleyin.

    Xcode Instruments izlemesi

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.