Yardım Kaggle üzerinde TensorFlow ile Büyük Bariyer Resifi korumak Meydan Üyelik

Model optimizasyonu

Uç cihazlar genellikle sınırlı belleğe veya hesaplama gücüne sahiptir. Bu kısıtlamalar dahilinde çalıştırılabilmesi için modellere çeşitli optimizasyonlar uygulanabilir. Ayrıca, bazı optimizasyonlar, hızlandırılmış çıkarım için özel donanım kullanımına izin verir.

TensorFlow Lite ve TensorFlow Modeli Optimizasyon Toolkit çıkarımlar optimize karmaşıklığı en aza indirmek için araçlar sağlar.

Uygulama geliştirme süreciniz sırasında model optimizasyonunu göz önünde bulundurmanız önerilir. Bu belge, uç donanıma dağıtım için TensorFlow modellerini optimize etmeye yönelik bazı en iyi uygulamaları özetlemektedir.

Modeller neden optimize edilmelidir?

Model optimizasyonunun uygulama geliştirmeye yardımcı olabileceği birkaç ana yol vardır.

Boyut küçültme

Bir modelin boyutunu küçültmek için bazı optimizasyon biçimleri kullanılabilir. Daha küçük modeller aşağıdaki avantajlara sahiptir:

  • Daha küçük depolama boyutu: küçük modeller kullanıcılarınızın cihazlarında daha az depolama alanı işgal. Örneğin, daha küçük bir model kullanan bir Android uygulaması, kullanıcının mobil cihazında daha az depolama alanı kaplar.
  • Daha küçük indirme boyutu: küçük modeller kullanıcıların cihazlarına indirmek için daha az zaman ve bant genişliği gerektirir.
  • Daha az bellek kullanımı: Daha küçük modeller kullanımına başvurunuzun diğer bölümleri için bellekte kadar az onlar çalıştırılır RAM, özgürleştirmekte kullanın ve daha iyi performans ve istikrara çevirebilir.

Niceleme, tüm bu durumlarda, potansiyel olarak bir miktar doğruluk pahasına bir modelin boyutunu azaltabilir. Budama ve kümeleme, indirilecek bir modelin boyutunu daha kolay sıkıştırılabilir hale getirerek küçültebilir.

Gecikme azaltma

Gecikme verilen bir model ile tek çıkarım çalıştırmak için gereken zaman miktarıdır. Bazı optimizasyon biçimleri, bir model kullanarak çıkarım yapmak için gereken hesaplama miktarını azaltabilir ve bu da daha düşük gecikme süresi sağlar. Gecikmenin güç tüketimi üzerinde de etkisi olabilir.

Şu anda, nicemleme, potansiyel olarak bir miktar doğruluk pahasına, çıkarım sırasında meydana gelen hesaplamaları basitleştirerek gecikmeyi azaltmak için kullanılabilir.

Hızlandırıcı uyumluluğu

Gibi bazı donanım hızlandırıcılar, Kenar TPU doğru optimize edilmiştir modelleri ile son derece hızlı çıkarım çalıştırabilirsiniz.

Genel olarak, bu tür cihazlar, modellerin belirli bir şekilde nicelenmesini gerektirir. Gereksinimleri hakkında daha fazla bilgi edinmek için her bir donanım hızlandırıcının belgelerine bakın.

takaslar

Optimizasyonlar, uygulama geliştirme sürecinde dikkate alınması gereken model doğruluğunda potansiyel değişikliklere neden olabilir.

Doğruluk değişiklikleri, optimize edilen bireysel modele bağlıdır ve önceden tahmin edilmesi zordur. Genel olarak, boyut veya gecikme için optimize edilmiş modeller az miktarda doğruluk kaybeder. Uygulamanıza bağlı olarak bu, kullanıcılarınızın deneyimini etkileyebilir veya etkilemeyebilir. Nadir durumlarda, belirli modeller optimizasyon sürecinin bir sonucu olarak bir miktar doğruluk kazanabilir.

Optimizasyon türleri

TensorFlow Lite şu anda niceleme, budama ve kümeleme yoluyla optimizasyonu desteklemektedir.

Bunlar parçası olan TensorFlow Modeli Optimizasyon Toolkit TensorFlow Lite ile uyumlu olan model, optimizasyon teknikleri için kaynak sağlar.

niceleme

Kuantalama varsayılan olarak 32 bit kayan noktalı sayılardır bir modelin parametrelerini temsil etmek için kullanılan numaraların hassasiyetini azaltarak çalışır. Bu, daha küçük bir model boyutu ve daha hızlı hesaplama ile sonuçlanır.

TensorFlow Lite'da aşağıdaki niceleme türleri mevcuttur:

teknik Veri gereksinimleri Boyut küçültme Kesinlik Desteklenen donanım
Eğitim sonrası float16 niceleme Veri yok 50'ye kadar% Önemsiz doğruluk kaybı CPU, GPU
Eğitim sonrası dinamik aralık niceleme Veri yok %75'e kadar En küçük doğruluk kaybı CPU, GPU (Android)
Eğitim sonrası tamsayı nicemleme Etiketlenmemiş temsili örnek %75'e kadar Küçük doğruluk kaybı CPU, GPU (Android), EdgeTPU, Hexagon DSP
Kuantizasyona duyarlı eğitim Etiketli eğitim verileri %75'e kadar En küçük doğruluk kaybı CPU, GPU (Android), EdgeTPU, Hexagon DSP

Aşağıdaki karar ağacı, modeliniz için kullanmak isteyebileceğiniz niceleme şemalarını, yalnızca beklenen model boyutuna ve doğruluğuna dayalı olarak seçmenize yardımcı olur.

nicemleme-karar-ağacı

Aşağıda, birkaç modelde eğitim sonrası nicemleme ve nicemlemeye duyarlı eğitim için gecikme ve doğruluk sonuçları verilmiştir. Tüm gecikme sayıları, tek bir büyük çekirdekli CPU kullanılarak Pixel 2 cihazlarda ölçülür. Araç takımı geliştikçe buradaki sayılar da gelişecektir:

modeli İlk 1 Doğruluk (Orijinal) İlk 1 Doğruluk (Eğitim Sonrası Sayısallaştırılmış) İlk 1 Doğruluk (Quantization Aware Eğitimi) Gecikme (Orijinal) (ms) Gecikme (Eğitim Sonrası Sayısallaştırılmış) (ms) Gecikme (Quantization Aware Training) (ms) Boyut (Orijinal) (MB) Boyut (Optimize Edilmiş) (MB)
Mobilenet-v1-1-224 0.709 0.657 0.70 124 112 64 16.9 4.3
Mobilenet-v2-1-224 0.719 0.637 0.709 89 98 54 14 3.6
Başlangıç_v3 0.78 0.772 0.775 1130 845 543 95.7 23.9
Resnet_v2_101 0.770 0.768 Yok 3973 2868 Yok 178.3 44.9
Seçkin CNN modelleri modeli Kuantizasyonun Tablo 1 Faydaları

int16 aktivasyonları ve int8 ağırlıkları ile tam tamsayı niceleme

İnt16 aktivasyon Nicemleme int8 olarak Int16 içinde aktivasyon ve ağırlıklar ile tam tam sayı niceleme şemasıdır. Bu mod, benzer bir model boyutunu koruyarak int8'deki hem etkinleştirmeler hem de ağırlıklar ile tam tamsayı nicemleme şemasına kıyasla nicemlenmiş modelin doğruluğunu artırabilir. Aktivasyonların nicelemeye duyarlı olduğu durumlarda önerilir.

NOT: Şu anda sadece optimize edilmemiş referans çekirdek uygulamaları böylece varsayılan olarak performans yavaş int8 çekirdekleri ile karşılaştırıldığında edileceği bu nicemleme şeması için TFLite mevcuttur. Bu modun tüm avantajlarına şu anda özel donanım veya özel yazılım aracılığıyla erişilebilir.

Aşağıda bu moddan yararlanan bazı modellerin doğruluk sonuçları verilmiştir.

modeli Doğruluk metrik türü Doğruluk (float32 aktivasyonları) Doğruluk (int8 aktivasyonları) Doğruluk (int16 aktivasyonları)
Wav2 harfi BİZ %6.7 %7,7 %7.2
DeepSpeech 0.5.1 (kaydırılmamış) CER %6.13 %43.67 %6.52
yoloV3 harita(IOU=0.5) 0.577 0.563 0.574
MobileNetV1 İlk 1 Doğruluk 0.7062 0.694 0.6936
MobilNetV2 İlk 1 Doğruluk 0.718 0.7126 0.7137
MobilBet F1(Tam eşleşme) 88.81(81.23) 2.08(0) 88.73(81.15)
Tablo int16 aktivasyon modeli Nicemlemenin 2 Faydaları

Budama

Budama onun öngörüleri üzerinde yalnızca küçük bir etkiye sahip bir model içindeki parametreleri kaldırarak işleri. Budanmış modeller diskte aynı boyuttadır ve aynı çalışma zamanı gecikmesine sahiptir, ancak daha etkili bir şekilde sıkıştırılabilir. Bu, budamayı, model indirme boyutunu küçültmek için kullanışlı bir teknik haline getirir.

Gelecekte, TensorFlow Lite, budanmış modeller için gecikme azaltma sağlayacaktır.

kümeleme

Kümeleme sonra her bir kümeye ait ağırlıklar için kitle merkezi değerleri, dövme, kümelerin, önceden tanımlanmış bir dizi halinde bir modelde her katmanın ağırlıkları gruplayarak işler. Bu, bir modeldeki benzersiz ağırlık değerlerinin sayısını azaltır, böylece karmaşıklığını azaltır.

Sonuç olarak, kümelenmiş modeller, budamaya benzer dağıtım avantajları sağlayarak daha etkili bir şekilde sıkıştırılabilir.

Geliştirme iş akışı

Bir başlangıç noktası olarak, check-in modeller halinde barındırılan modelleri uygulamanız için çalışabilir. Değilse, kullanıcıların ile başlamanızı tavsiye ederiz sonrası eğitim nicemleme aracı bu geniş bir uygulama alanına ve eğitim verileri gerektirmediğinden.

Doğruluk ve gecikme hedefler yerine getirilmediği durumlarda veya donanım hızlandırıcı desteği için önemli olan nicemleme farkında eğitim iyi bir seçenektir. Altında ek optimizasyon tekniklerini bakın TensorFlow Modeli Optimizasyon Toolkit .

Daha da modeli boyutunu küçültmek isterseniz, deneyebileceğiniz budama ve / veya kümelenme Modellerinizin niceleme öncesinde.