Performans ölçümü

Karşılaştırma araçları

LiteRT karşılaştırma araçları, şu anda aşağıdakilere ilişkin istatistikleri aşağıdaki önemli performans metriklerini görebilirsiniz:

  • Başlatma süresi
  • Isınma durumunun çıkarım süresi
  • Sabit durumun çıkarım zamanı
  • Başlatma süresi 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 uygulaması olarak ve yerel komut satırı ikili programları ve hepsi aynı temel performansı paylaşır ölçüm mantığına bakalım. Kullanılabilir seçeneklerin ve çıkış biçimlerinin şu şekilde olduğunu unutmayın: çalışma zamanı ortamındaki farklılıklardan dolayı biraz farklı olabilir.

Android karşılaştırma uygulaması

Karşılaştırma aracını Android'de kullanmak için iki seçenek vardır. Biri yerel karşılaştırma ikili programı, bir diğeri ise Android karşılaştırma uygulaması, modelin uygulamada nasıl performans göstereceğini daha iyi gösteren bir göstergedir. İkisinden biri bu nedenle, karşılaştırma aracındaki sayılar, çıkarım yapmak için kullanabilirsiniz.

Bu Android karşılaştırma uygulamasının kullanıcı arayüzü yok. adb kullanarak yükleyip çalıştırın komutuna dahil etmek ve sonuçları almak için adb logcat komutunu kullanın.

Uygulamayı indirme veya derleme

Aşağıdaki bağlantıları kullanarak, gecelik önceden oluşturulmuş Android karşılaştırma uygulamalarını indirin:

TF işlemlerini destekleyen Android karşılaştırma uygulamaları konusunda Flex delege aracılığıyla aşağıdaki bağlantıları kullanın:

Aşağıdakileri izleyerek uygulamayı kaynaktan da oluşturabilirsiniz: talimatları inceleyin.

Karşılaştırma hazırlayın

Karşılaştırma uygulamasını çalıştırmadan önce uygulamayı yükleyin ve model dosyasını aşağıdaki adımları uygulayı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ı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 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 çevirmeni çalıştırmak için kullanılacak iş parçacığı sayısı.
  • use_gpu: bool (varsayılan=yanlış)
    GPU yetkisini kullanın.
  • use_xnnpack: bool (varsayılan=false)
    Tekliflerinizi otomatikleştirmek ve optimize etmek için XNNPACK delegesi.

Kullandığınız cihaza bağlı olarak bu seçeneklerden bazıları veya hiçbir etkisi yoktur. Referans parametreler daha fazla performans parametresine göz atı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ı ayrıca yerel ikili program (benchmark_model) olarak sunulur. Şunları yapabilirsiniz: Bu aracı Linux, Mac, yerleşik cihazlar ve Mac'te bir kabuk komut satırından Android cihazlar.

İkili dosyayı indirme veya derleme

Aşağıdaki adımları uygulayarak gecelik önceden oluşturulmuş yerel komut satırı ikili programlarını indirin: aşağıdaki bağlantılardan birini takip edin:

TF işlemlerini destekleyen, gecelik önceden oluşturulmuş ikili programlara gelin Flex delege aracılığıyla aşağıdaki bağlantıları kullanın:

Ayrıca, yerel karşılaştırma ikili programını kaynak Google Drive'a ekleyin.

bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model

Android NDK araç zinciriyle derleme yapmak için derleme ortamını kurmanız gerekir önce bunu takip edin rehberi kullanabilir veya Docker görüntüsünün bu dosyadaki kılavuz.

bazel build -c opt --config=android_arm64 \
  //tensorflow/lite/tools/benchmark:benchmark_model

Karşılaştırma çalıştır

Bilgisayarınızda karşılaştırma işlemleri çalıştırmak için kabuktan ikili programı çalıştırın.

path/to/downloaded_or_built/benchmark_model \
  --graph=your_model.tflite \
  --num_threads=4

Her bir URL için aynı parametreler ile başlar.

Model operasyonları için profil oluşturma

Karşılaştırma modeli ikili programı, model işlemlerinin profilini çıkarmanıza ve model çalışmalarının yürütme süresi vardır. Bunu yapmak için bayrağı geçirin Çağrı sırasında --enable_op_profiling=true adlı kullanıcıdan benchmark_model adlı kullanıcıya. Ayrıntılar: açıklandı burada bulabilirsiniz.

Tek çalıştırmada birden fazla performans seçeneği için yerel karşılaştırma ikilisi

Kullanışlı ve basit bir C++ ikili programı da birden fazla performans seçeneğini karşılaştırma elde edebiliyorlar. Bu ikili program, daha önce belirtilen karşılaştırma aracına göre derlenir performans karşılaştırması yapabilen bir reklam grubudur. Paydaşlar aynı derleme/yükleme/çalıştırma işlemidir, ancak bu ikili programın BUILD hedefi adı benchmark_model_performance_options ve bazı ek parametreler gerekir. Bu ikili program için önemli parametrelerden biri şudur:

perf_options_list: string (varsayılan='tümü')
Karşılaştırma için TFLite performans seçeneklerinin virgülle ayrılmış listesi.

Bu araç için gecelik önceden oluşturulmuş ikili programlar aşağıda listelenmiştir:

iOS karşılaştırma uygulaması

iOS cihazda karşılaştırma çalıştırmak için uygulamayı kaynak. LiteRT model dosyasını benchmark_data dizinini seçin ve benchmark_params.json dosyasını değiştirin. Bu dosyalar uygulamaya paketlenir ve uygulama, dizinden veri okur. Ziyaret edin: "the" iOS karşılaştırma uygulaması başlıklı bölüme bakın.

İyi bilinen modellerle ilgili performans karşılaştırmaları

Bu bölümde, iyi çalışan LiteRT performans karşılaştırmaları listelenmektedir bilinen modeller için kullanıma sunulmuştur.

Android performans karşılaştırmaları

Bu performans karşılaştırma sayıları yerel karşılaştırma ikili programı ile karşılaştırın.

Android karşılaştırmalarında, CPU benzeşimi cihazda büyük çekirdekleri kullanacak şekilde ayarlanmıştır kullanarak varyansı azaltmak için (bkz. ayrıntıları inceleyin).

Modellerin indirilmiş ve sıkıştırılmış biçimde açıldığı varsayılır. /data/local/tmp/tflite_models dizini. Karşılaştırma ikili programı, bu talimatları ve /data/local/tmp dizininde olduğu varsayılmıştı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 yetkisiyle çalışmak için --use_gpu=true değerini ayarlayı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 (miktar) 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ı.

iOS karşılaştırmalarını çalıştırmak için karşılaştırma uygulaması uygun model ve benchmark_params.json, num_threads değerini 2 olarak ayarlayacak şekilde değiştirildi. Kullanılacak GPU delegesi, "use_gpu" : "1" ve "gpu_wait_type" : "aggressive" seçenekleri benchmark_params.json grubuna 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 (miktar) 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.

LiteRT dahili bilgilerini izleme

Android'de LiteRT dahili bilgilerini izleme

Bir Android uygulamasının LiteRT çevirmenini tarafından sağlanan dahili etkinlikler yakalayan: Android izleme araçları. Android'deki aynı etkinliklerdir Trace API sayesinde Java/Kotlin kodundan yakalanan etkinlikler LiteRT ile birlikte görüntülenir dahili etkinlikler olabilir.

Etkinliklere ilişkin bazı örnekler:

  • Operatör çağrısı
  • Yetki verilmiş kullanıcıya göre yapılan değişikliğin grafiğini çizme
  • Tensor ayırma

İzleri yakalamayla ilgili farklı seçeneklerin yanı sıra bu kılavuzda, Studio CPU Profiler ve Sistem İzleme uygulaması. Referans Perfetto komut satırı aracı veya Systrace komut satırı aracı diğer seçenekler için.

Java koduna izleme etkinlikleri ekleme

Bu, Görüntü Sınıflandırma örnek uygulama. LiteRT çevirmeni, recognizeImage/runInference bölümü. Bu adım isteğe bağlıdır, ancak çıkarım çağrısının yapıldığı yeri belirtin.

  Trace.beginSection("recognizeImage");
  ...
  // Runs the inference call.
  Trace.beginSection("runInference");
  tflite.run(inputImageBuffer.getBuffer(), outputProbabilityBuffer.getBuffer().rewind());
  Trace.endSection();
  ...
  Trace.endSection();

LiteRT izlemeyi etkinleştir

LiteRT izlemeyi etkinleştirmek için Android sistem özelliğini ayarlayın Android uygulamasını başlatmadan önce 1'e debug.tflite.trace.

adb shell setprop debug.tflite.trace 1

LiteRT çevirmeni başlatıldığında bu özellik ayarlanmışsa çevirmenden gelen önemli etkinlikler (ör. operatör çağrısı) izlenir.

Tüm izleri yakaladıktan sonra, özellik değerini ayarlayarak izlemeyi devre dışı bırakın 0 olarak ayarladı.

adb shell setprop debug.tflite.trace 0

Android Studio CPU Profil Aracı

İzleri şunlarla yakalayın: Android Studio CPU Profil Aracı şu adımları uygulayın:

  1. Çalıştır > Üst menülerden "uygulama" profilini seçin.

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

  3. "Sistem Çağrılarını İzle"yi seçin arasında daha fazla seçenek var.

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

  4. "Kaydet"e basın. düğmesini tıklayın.

  5. 'Durdur'a basın düğmesini tıklayın.

  6. İz sonucunu inceleyin.

    Android Studio izleme

Bu örnekte, bir ileti dizisindeki etkinliklerin hiyerarşisini ve istatistikleri her operatör süresi için geçerlidir ve ayrıca arayüzdeki tüm uygulamanın veri akışını ileti dizileri.

Sistem İzleme uygulaması

Aşağıdaki adımları uygulayarak izleri Android Studio olmadan yakalayın: Sistem İzleme uygulaması.

Bu örnekte, aynı TFLite etkinlikleri yakalanıp Perfetto'ya kaydedildi. veya Systrace biçimini kullanabilirsiniz. Yakalanan İzleme dosyaları Perfetto kullanıcı arayüzünde açılabilir.

Perfetto izi

iOS'te LiteRT dahili bilgilerini izleme

Bir iOS uygulamasının LiteRT çevirmenini tarafından sağlanan dahili etkinlikler yakalayan: Enstrümanlar aracını kullanabilirsiniz. Bunlar, iOS signpost Böylece, Swift/Objective-C kodundan yakalanan etkinlikler birlikte görünür. .

Etkinliklere ilişkin bazı örnekler:

  • Operatör çağrısı
  • Yetki verilmiş kullanıcıya göre yapılan değişikliğin grafiğini çizme
  • Tensor ayırma

LiteRT izlemeyi etkinleştir

Aşağıdaki adımları uygulayarak debug.tflite.trace ortam değişkenini ayarlayın:

  1. Ürün > Şema > Şeması Düzenle... seçeneğini tıklayın.

  2. "Profil"i tıklayın tıklayın.

  3. "Çalıştır işleminin bağımsız değişkenlerini ve ortam değişkenlerini kullan" seçeneğinin işaretini kaldırın onay kutusunu işaretleyin.

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

    Ortam değişkenini ayarla

iOS uygulamasının profilini oluştururken LiteRT etkinliklerini hariç tutmak isterseniz ortam değişkenini kaldırarak izlemeyi devre dışı bırakın.

XCode Aletleri

Aşağıdaki adımları uygulayarak izleri yakalayın:

  1. Ürün > Profil'i seçin.

  2. Araçlar aracı başlatıldığında profil oluşturma şablonları arasından Logging'i (Günlük Kaydı) tıklayın.

  3. "Başlat"a basın düğmesini tıklayın.

  4. 'Durdur'a basın düğmesini tıklayın.

  5. "os_signpost"u tıklayın (OS Logging alt sistem öğelerini genişletin.)

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

  7. İz sonucunu inceleyin.

    Xcode Araçları izi

Bu örnekte, her bir etkinlik ve istatistik hiyerarşisini operatör zamanı.

İzleme verilerini kullanma

İzleme verileri, performans sorunlarını belirlemenize olanak tanır.

Profil oluşturucudan edinebileceğiniz analizlere ve performansı iyileştirecek olası çözümler:

  • Kullanılabilir CPU çekirdeği sayısı çıkarım sayısından azsa CPU planlama ek yükü, ortalamanın altında bir performansa neden olabilir. Bu gibi durumlarda tekrarlanmaması için uygulamanızda CPU'yu yoğun olarak kullanan diğer görevleri model çıkarımınızla çakışma veya çevirmen sayısını ayarlama ileti dizileri.
  • Operatörler için yetki verilmiş değilse model grafiğinin bazı bölümleri olması beklenen donanım hızlandırıcı yerine CPU'da yürütülür. Siz desteklenmeyen operatörleri, desteklenen benzer operatörlerle değiştirebilirsiniz.