TensorFlow Lite Yetkileri

Yetkiler, GPU ve Dijital Sinyal İşlemci (DSP) gibi cihaz üzerinde hızlandırıcılardan yararlanarak TensorFlow Lite modellerinin donanım hızlandırmasını mümkün kılar.

TensorFlow Lite varsayılan olarak ARM Neon talimat grubu için optimize edilmiş CPU çekirdeklerini kullanır. Bununla birlikte CPU, genellikle Makine Öğrenimi modellerinde bulunan ağır aritmetikler (örneğin, konvolüsyon ve yoğun katmanlarla ilgili matris matematiği) için optimize edilmemiş çok amaçlı bir işlemcidir.

Diğer yandan, çoğu modern cep telefonu bu ağır işlemlerin üstesinden daha iyi gelen çipler içerir. Bunları nöral ağ işlemlerinde kullanmak, gecikme ve güç verimliliği açısından büyük avantajlar sağlar. Örneğin, GPU'lar gecikme süresinde 5 kata kadar hız artışı sağlayabilir.

Bu hızlandırıcıların her birinin, özel hesaplamaları etkinleştiren ilişkili API'leri (mobil GPU için OpenCL veya OpenGL ES gibi) bulunur. Normalde, bu arayüzler üzerinden bir nöral ağ çalıştırmak için çok fazla özel kod yazmanız gerekir. Her hızlandırıcının kendine özgü avantajları ve dezavantajları olduğunu ve bir nöral ağdaki her işlemi yürütemediğini düşündüğünüzde işler daha da karmaşık hale gelir. TensorFlow Lite'ın Delegate API'si TFLite çalışma zamanı ile bu alt düzey API'ler arasında bir köprü görevi görerek bu sorunu çözer.

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

Yetki verilmiş kullanıcı seçme

TensorFlow Lite, birden fazla yetki verilmiş kullanıcıyı destekler. Bunların her biri belirli platformlar ve belirli model türleri için optimize edilmiştir. Genellikle iki ana ölçüte bağlı olarak kullanım alanınız için birden fazla yetki verilmiş olur: hedeflediğiniz Platform (Android mi yoksa iOS?) ve hızlandırmaya çalıştığınız Model türü (kayan nokta mı yoksa sayısallaştırılmış mı?).

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. GPU'nun bulunduğu yerlerde 32 bit ve 16 bit kayan tabanlı modelleri çalıştırmak için optimize edilmiştir. Ayrıca 8 bitlik nicelenmiş modelleri destekler ve kayan sürümleriyle eşit düzeyde GPU performansı sağlar. GPU yetkisiyle ilgili ayrıntılar için GPU'da TensorFlow Lite bölümüne bakın.

iOS

  • Yeni iPhone'lar ve iPad'ler için Core ML delegesi: Neural Engine'in kullanılabildiği yeni iPhone ve iPad'lerde, 32 bit veya 16 bit kayan nokta modelleri için çıkarımı hızlandırmak amacıyla Core ML yetkinlisini kullanabilirsiniz. Nöral Motor, A12 veya daha yüksek sisteme sahip Apple mobil cihazlarda kullanılabilir. Core ML temsilcisine genel bakış ve adım adım talimatlar için TensorFlow Lite Core ML delegate başlıklı makaleyi inceleyin.

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. Yalnızca 8 bitlik niceleştirilmiş işlemleri destekleyen yetki verilen bir kullanıcıya kayan nokta modeli sağlarsanız bu model tüm işlemlerini reddeder ve model tamamen CPU üzerinde çalışır. Bu tür sürprizlerle karşılaşmamak için aşağıdaki tabloda, model türüne göre yetki verilmiş destek hakkında genel bir bakış sunulmuştur:

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, başvurunuzu iyileştirebilecek, yetki verilmiş kullanıcıları listelemek için kaba bir kılavuz işlevi görür. Ancak yetki verilen her kullanıcının, desteklediği önceden tanımlanmış bir işlem grubuna sahip olduğunu ve modele ve cihaza bağlı olarak farklı performans gösterebileceğini unutmayın. Bu nedenle, genellikle yetki verilmiş bir kullanıcının ihtiyaçlarınız açısından ne kadar yararlı olduğunu ölçmek için bazı karşılaştırmalar yapmanız önerilir. Bu ayrıca, TensorFlow Lite çalışma zamanına yetki verilmiş kullanıcı eklemeyle ilişkili ikili program boyutu artışını gerekçelendirmeye de yardımcı olur.

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

Değerlendirme Araçları

Gecikme ve bellek ayak izi

TensorFlow Lite'ın karşılaştırma aracı; ortalama çıkarım gecikmesi, başlatma ek yükü, bellek ayak izi gibi model performansını tahmin etmek için uygun parametrelerle kullanılabilir. Bu araç, modeliniz için en iyi yetki yapılandırmasını belirlemek amacıyla birden fazla işareti destekler. Örneğin --gpu_backend=gl, OpenGL ile GPU yürütmesini ölçmek için --use_gpu ile birlikte belirtilebilir. Desteklenen temsilci parametrelerinin tam listesi ayrıntılı belgelerde tanımlanmıştır.

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 için bu aracın önceden oluşturulmuş sürümünü, 64 bit ARM mimarisini buradan indirebilirsiniz (daha fazla bilgi).

Doğruluk ve doğruluk

Temsilciler genellikle hesaplamaları CPU muadillerinden farklı bir hassasiyette gerçekleştirir. Sonuç olarak, donanım hızlandırma için yetki verilmiş bir kullanıcının kullanımıyla ilişkili olarak (genellikle küçük) bir doğruluk dengesi söz konusudur. Bunun her zaman doğru olmadığını unutmayın.Örneğin, GPU, nicelenmiş modelleri çalıştırmak için kayan nokta hassasiyeti kullandığından küçük bir hassasiyet artışı olabilir (ör. ILSVRC görüntü sınıflandırmasında en yüksek <%1-5 iyileşme).

TensorFlow Lite, yetki verilen kullanıcının belirli bir modelde ne kadar doğru davrandığını ölçmek için iki tür araca sahiptir: Görev Tabanlı ve Görevden bağımsız. Bu bölümde açıklanan tüm araçlar, önceki bölümde karşılaştırma aracı tarafından kullanılan gelişmiş yetkilendirme parametrelerini destekler. Aşağıdaki alt bölümlerin, model değerlendirmesi (Modelin kendisi görev için iyi mi?) yerine yetki verilmiş kullanıcı değerlendirmesi'ne (Yetki verilmiş kullanıcı CPU ile aynı performansı gösteriyor mu?) odaklandığını unutmayın.

Görev Tabanlı Değerlendirme

TensorFlow Lite, görüntü tabanlı iki görevde doğruluğu değerlendirecek araçlara sahiptir:

Bu araçların önceden oluşturulmuş ikili programları (Android, 64 bit ARM mimarisi) ile birlikte belgeler şurada bulunabilir:

Aşağıdaki örnekte, Pixel 4'te GPU ile görüntü sınıflandırma değerlendirmesi gösterilmektedir:

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ığı veya özel modellerle denemeler yapıyorsanız TensorFlow Lite'ta Çıkarım Farkı aracını kullanabilirsiniz. (Android, 64 bit ARM ikili mimarisi ikili programı için buraya göz atın)

Çıkarım Diff, TensorFlow Lite yürütmesini (gecikme ve çıkış değeri sapması açısından) iki ayarda karşılaştırır:

  • 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 oluşturur ve bu verileri iki TFLite Çevirmeni'nden iletir. Bunlardan biri tek iş parçacıklı CPU çekirdekleri, diğeri ise kullanıcının bağımsız değişkenleri tarafından parametreleştirilir.

Her ikisinin gecikmesini ve her bir Yorumlayıcı'daki çıkış tensörleri arasındaki mutlak farkı öğe bazında ölçer.

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ışındaki öğelerin, yetki verilen çıkıştan ortalama 1.96e-05 farklı olduğu anlamına gelir.

Bu sayıları yorumlamanın, model hakkında ve her çıkış tensörünün neyi ifade ettiği hakkında daha ayrıntılı bilgi sahibi olması gerektiğini unutmayın. Bir tür puan veya yerleştirmenin belirlenmesine neden olan basit bir regresyon söz konusuysa fark düşük olmalıdır (aksi takdirde, yetki verilmiş kullanıcı ile ilgili bir hata oluşur). Bununla birlikte, SSD modellerinden alınan "algılama sınıfı" gibi çıkışların yorumlanması biraz daha zordur. Örneğin, bu araç kullanıldığında bir farklılık ortaya çıkabilir, ancak bu durum yetki verilen kullanıcıyla ilgili gerçekten bir sorun olduğunu anlamayabilir: İki (sahte) sınıfı göz önünde bulundurun: "TV (Kimlik: 10)", "Monit (ID:20)" - Yetki verilen kişi altın gerçeklerden biraz farklıysa ve TV yerine monitörü gösteriyorsa bu tensör için yüksek 0 fark 0 - 0 olabilir.