LiteRT Temsilcileri

Yetkiler, LiteRT modellerinin donanım hızlandırmasını aşağıdaki şekilde etkinleştirir: GPU ve Dijital Sinyal İşlemci gibi cihaz üzerindeki hızlandırıcılardan yararlanmak (DSP).

LiteRT varsayılan olarak ARM için optimize edilmiş CPU çekirdeklerini kullanır. Neon talimat seti. Ancak CPU, çok amaçlı bir işlemcidir. genellikle Makine'de bulunan ağır aritmetiklere göre optimize edilmiş olabilir Öğrenme modelleri (örneğin, konvolüsyon ve yoğunlaşma ile ilgili matris matematiği) katmanlar).

Diğer yandan, modern cep telefonlarının çoğu, ekranlarında daha iyi performans gösteren bu ağır işlemlerle başa çıkmaktır. Bunları nöral ağ işlemleri için kullanma Gecikme ve güç verimliliği açısından büyük faydalar sağlıyor. Örneğin, GPU'lar, veri merkezlerinde 5 kata kadar hızlanma en iyi sonucu verir.

Bu hızlandırıcıların her biri, özel hesaplamaları mümkün kılan ilişkili API'lere sahiptir. OpenCL veya OpenGL gibi Mobil GPU için ES. Genellikle, çok fazla özel kod yazmak zorunda kalıyor. Her bir hızlandırıcının kendine özgü benzersiz özellikleri olduğunu düşündüğünüzde işler daha da karmaşık hale gelir. artıları ve her işlemi sinirsel ağ üzerinde yürütemez. TensorFlow Lite'ın Delegate API'si TFLite ile arasında bir köprü görevi görerek bu sorunu çözer çalışma zamanını ve bu alt düzey API'leri kullanabilirsiniz.

yetki verilmiş kullanıcılarla çalışma zamanı

Yetki verilmiş kullanıcı seçme

LiteRT, her biri şuna göre optimize edilmiş birden fazla yetki verilmiş kullanıcı destekler: ve model türlerini kapsar. Genellikle toplantılarda iki ana ölçüte bağlı olarak kullanım alanınız için geçerli, birden fazla yetki verilmiş kişidir: Hedeflediğiniz Platform (Android mi iOS?) ve Model türü (kayan nokta mı yoksa nicel mi?)

Platforma göre yetki verilen kullanıcı sayısı

Platformlar arası (Android ve iOS)

  • GPU yetkisi: GPU delegesi hem Android hem de iOS'te kullanılabilir. Google GPU'nun etkin olduğu 32 bit ve 16 bit kayan tabanlı modelleri çalıştırmak için optimize edilmiştir kullanılabilir. Ayrıca 8 bit nicelenmiş modelleri destekler ve GPU sağlar. performanslarına eşit performansa sahip. GPU ile ilgili ayrıntılar için daha fazla bilgi için GPU'da LiteRT başlıklı makaleyi inceleyin.

iOS

  • Yeni iPhone ve iPad'ler için Core ML temsilcisi - Yeni iPhone'lar ve Neural Engine'in kullanılabildiği iPad'lerde, Core ML delege özelliğini kullanarak 32 bit veya 16 bit kayan nokta modelleri için çıkarımı hızlandırabilir. Neural Motor, A12 SoC veya daha yüksek çiplere sahip Apple mobil cihazlarda kullanılabilir. Örneğin, Core ML delegenize genel bakış ve adım adım talimatlar, LiteRT Core ML temsilcisi.

Model türüne göre yetkiler

Her hızlandırıcı, belirli bir bit genişliği göz önünde bulundurularak tasarlanmıştır. Şu durumda: yalnızca 8 bit niceleştirilmiş değeri destekleyen bir temsilciye kayan nokta modeli sağlayın tüm işlemlerini reddeder ve model tamamen girin. Bu tür sürprizlerle karşılaşmamak için, aşağıdaki tabloda genel bakış destek ekibini model türüne göre atayın:

Model Türü GPU CoreML
Kayan nokta (32 bit) Evet Evet
Eğitim sonrası kayan nokta 16'nın niceliği Evet Evet
Eğitim sonrası dinamik aralık nicelemesi Evet Hayır
Eğitim sonrası tam sayı miktarını belirleme Evet Hayır
Nicelik odaklı eğitim Evet Hayır

Performans doğrulama

Bu bölümdeki bilgiler, bir öğeyi kısa listeye eklemek için genel bir kılavuz olarak işlev görür delege edebilirsiniz. Ancak şunu da unutmayın: yetki verilen her kullanıcının desteklediği önceden tanımlanmış bir işlem kümesine sahip olduğunu ve modele ve cihaza bağlı olarak farklı performanslar gösterir. Bu nedenle, genellikle sizin, yetki verdiğiniz bir kişinin ne kadar yararlı olduğunu ölçmek için bazı karşılaştırmalar yapmanız seçin. Bu, aynı zamanda performansla ilişkili ikili program boyutu artışını LiteRT çalışma zamanına bir temsilci ekleyerek.

LiteRT, sunulan kapsamlı performans ve doğruluk değerlendirme araçları sayesinde geliştiricilerin, yetki verilmiş kullanıcıları uygulamalarında güvenle kullanmalarını sağlayabilir. Bu araçlar bir sonraki bölümde ele alınmaktadır.

Değerlendirme Araçları

Gecikme ve bellek ayak izi

LiteRT'in karşılaştırma aracı ortalama çıkarım dahil olmak üzere model performansını tahmin etmek için uygun parametreler gecikme, başlatma ek yükü, bellek ayak izi vb. birden fazla flag'i kullanarak modeliniz için en iyi yetki yapılandırmasını belirleyebilirsiniz. Örneğin, örnek, GPU'yu ölçmek için --gpu_backend=gl, --use_gpu ile belirtilebilir daha iyi yürütülmesini sağlar. Desteklenen yetki parametrelerinin tam listesi ayrıntılı dokümanlarına göz atın.

Aşağıda, adb üzerinden GPU ile nicelenmiş bir model için örnek çalıştırma verilmiştir:

adb shell /data/local/tmp/benchmark_model \
  --graph=/data/local/tmp/mobilenet_v1_224_quant.tflite \
  --use_gpu=true

Android, 64 bit ARM için bu aracın önceden oluşturulmuş sürümünü indirebilirsiniz. mimari burada (Daha fazla ayrıntıları) bulabilirsiniz.

Doğruluk ve doğruluk

Temsilciler genellikle hesaplamaları CPU'larından farklı bir hassasiyette gerçekleştirir temsil eder. Sonuç olarak, doğrulukla ilgili (genellikle çok küçük) bir ödün vermektir. yetki verilmiş kullanıcı kullanma ile ilişkilendirilebilir. Bu her zaman doğru değildir; örneğin, GPU, tablodaki dosyalarında kayan nokta varsa küçük bir hassasiyet artışı olabilir (ör. ILSVRC görüntü sınıflandırmasında en yüksek <% 1-5 iyileşme).

LiteRT, yetki verilen bir kullanıcının ne kadar doğru olduğunu ölçmek için kullanılan iki tür araç sunar. belirli bir model için davranır: Görev Tabanlı ve Görevden bağımsız. Tüm araçlar gelişmiş yetkilendirmeyi parametreleri önceki bölümde verilen karşılaştırma aracı tarafından kullanılır. Lütfen aşağıdaki alt bölümler yetki verilmiş kullanıcı değerlendirmesine odaklanır (Yetki verilen kişi değil mi?) değil (Modelin kendisi modelin kendisi için iyi bir görevi görebilir?)

Görev Tabanlı Değerlendirme

LiteRT, görüntüye dayalı iki görevde doğruluğu değerlendiren araçlara sahiptir:

Bu araçların önceden oluşturulmuş ikili programları (Android, 64 bit ARM mimarisi), belgeleri şu adreste bulabilirsiniz:

Aşağıdaki örnekte resim sınıflandırması gösterilmektedir değerlendirme Pixel 4'teki GPU ile:

adb shell /data/local/tmp/run_eval \
  --model_file=/data/local/tmp/mobilenet_quant_v1_224.tflite \
  --ground_truth_images_path=/data/local/tmp/ilsvrc_images \
  --ground_truth_labels=/data/local/tmp/ilsvrc_validation_labels.txt \
  --model_output_labels=/data/local/tmp/model_output_labels.txt \
  --output_file_path=/data/local/tmp/accuracy_output.txt \
  --num_images=0 # Run on all images. \
  --use_gpu=true

Beklenen sonuç, 1'den 10'a kadar olan İlk K metriklerinin bir listesidir:

Top-1 Accuracy: 0.733333
Top-2 Accuracy: 0.826667
Top-3 Accuracy: 0.856667
Top-4 Accuracy: 0.87
Top-5 Accuracy: 0.89
Top-6 Accuracy: 0.903333
Top-7 Accuracy: 0.906667
Top-8 Accuracy: 0.913333
Top-9 Accuracy: 0.92
Top-10 Accuracy: 0.923333

Görevden bağımsız değerlendirme

Cihaz üzerinde yerleşik bir değerlendirme aracının bulunmadığı görevler için veya özel modellerle denemeler yapıyorsa, LiteRT için Çıkarım Fark aracını kullanın. (Android, 64 bit ARM ikili mimari ikilisi burada bulabilirsiniz)

Çıkarım Diff, LiteRT yürütmesini karşılaştırır (gecikme ve çıkış değeri sapması) iki ayara sahiptir:

  • Tek iş parçacıklı CPU Çıkarım
  • Kullanıcı Tanımlı Çıkarım - bu parametrelerle tanımlanır

Araç bunu yapmak için rastgele Gauss verileri üretir ve bu verileri TFLite Çevirmenleri - biri tek iş parçacıklı CPU çekirdekleri çalıştıran, diğeri tarafından parametre haline getirilmiştir.

Bu modelde, her ikisinin de gecikmesini ve bu aradaki mutlak farkın her Çevirmenden öğe başına çıkış tensörleri bulun.

Tek çıkış tensörü olan bir modelde çıkış aşağıdaki gibi görünebilir:

Num evaluation runs: 50
Reference run latency: avg=84364.2(us), std_dev=12525(us)
Test run latency: avg=7281.64(us), std_dev=2089(us)
OutputDiff[0]: avg_error=1.96277e-05, std_dev=6.95767e-06

Bu, 0 dizinindeki çıkış tensörü için, CPU çıkışı, yetki verilmiş çıkıştan ortalama 1.96e-05 farklı.

Bu sayıları yorumlamanın, model hakkında daha fazla bilgi sahibi olmayı gerektirdiğini ve her çıkış tensörünün ne anlama geldiğine değineceğiz. Belirlenen bu modelin bir şekilde puan veya yerleştirme içeriyorsa, fark düşük olacaktır (aksi takdirde, hatası). Ancak "algılama sınıfı" gibi çıkışlar bir gönderen SSD modellerinin yorumlanması biraz daha zordur. Örneğin, farklı olabilir, ancak bu durum, projeyle ilgili yetkili: iki (sahte) sınıfı göz önünde bulundurun: "TV (kimlik: 10)", "Monitor (ID:20)" - Eğer delegeniz altın gerçeklerden biraz farklıdır ve TV yerine monitörü gösterir. çıkış farkı değeri 20-10 = 10 gibi yüksek bir değer olabilir.