Model optimizasyonu

Edge cihazlarının genellikle belleğe veya bilgi işlem gücü sınırlıdır. Bu kısıtlamalar dahilinde çalıştırılabilmesi için modellere çeşitli optimizasyonlar uygulanabilir. Buna ek olarak, bazı optimizasyonlar hızlandırılmış çıkarım için özel donanımların kullanılmasına olanak tanır.

TensorFlow Lite ve TensorFlow Model Optimizasyonu Araç Seti, çıkarımı optimize etmenin karmaşıklığını en aza indirmek için araçlar sağlar.

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

Modeller neden optimize edilmelidir?

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

Boyut küçültme

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

  • Daha küçük depolama boyutu: Daha küçük modeller, kullanıcılarınızın cihazlarında daha az depolama alanı kaplar. Örneğin, daha küçük model kullanan bir Android uygulaması, kullanıcının mobil cihazında daha az depolama alanı kaplar.
  • Daha küçük indirme boyutu: Daha küçük modellerin, kullanıcıların cihazlarına indirmek için daha az zaman ve bant genişliği gerekir.
  • Daha az bellek kullanımı: Daha küçük modeller çalıştırıldığında daha az RAM kullanır. Bu da uygulamanızın diğer kısımlarının kullanımı için bellekte yer açar ve daha iyi performans ile kararlılık anlamına gelir.

Nicelikselleştirme, tüm bu durumlarda modelin boyutunu küçültebilir. Bu da potansiyel olarak doğruluğun azalmasına neden olur. Budama ve kümeleme, bir modeli daha kolay sıkıştırılabilir hale getirerek indirmenin boyutunu azaltabilir.

Gecikmeyi azaltma

Gecikme, belirli bir modelle tek bir çıkarım çalıştırmak için gereken süredir. Bazı optimizasyon biçimleri, bir model kullanarak çıkarım yapmak için gereken hesaplama miktarını azaltarak daha düşük gecikme sağlar. Gecikme, güç tüketimini de etkileyebilir.

Şu anda nicelik, çıkarım sırasında yapılan hesaplamaları basitleştirerek gecikmeyi azaltmak için kullanılabiliyor. Bu durum, potansiyel olarak bir miktar hata payına yol açıyor.

Hızlandırıcı uyumluluğu

Edge TPU gibi bazı donanım hızlandırıcılar, doğru şekilde optimize edilmiş modellerle son derece hızlı çıkarım yapabilir.

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

Ödünler

Optimizasyonlar, model doğruluğunda değişikliklere yol açabilir. Bu değişikliklerin uygulama geliştirme sürecinde dikkate alınması gerekir.

Doğruluk değişiklikleri, optimize edilmekte olan modele bağlıdır ve önceden tahmin etmek zordur. Genel olarak, boyut veya gecikme için optimize edilen modellerin doğruluk oranı düşüktür. Uygulamanıza bağlı olarak bu, kullanıcılarınızın deneyimini etkileyebilir veya etkilemeyebilir. Nadiren de olsa, optimizasyon süreci neticesinde belirli modeller doğruluk kazanabilir.

Optimizasyon türleri

TensorFlow Lite şu anda niceleme, ayıklama ve kümeleme aracılığıyla optimizasyonu desteklemektedir.

Bunlar, TensorFlow Lite ile uyumlu model optimizasyonu teknikleri için kaynaklar sağlayan TensorFlow Model Optimizasyon Araç Seti'nin bir parçasıdır.

Nicelleştirme

Niceleme, bir modelin parametrelerini temsil etmek için kullanılan (varsayılan olarak 32 bit kayan nokta sayıları) sayıların kesinliğini azaltarak çalışır. Böylece daha küçük model boyutu ve daha hızlı hesaplama elde edilir.

TensorFlow Lite'ta aşağıdaki niceleme türleri kullanılabilir:

Teknik Veri gereksinimleri Boyut küçültme Doğruluk Desteklenen donanım
Eğitim sonrası float16'nın nicelenmesi Veri yok %50'ye kadar Önemsiz doğruluk kaybı CPU, GPU
Eğitim sonrası dinamik aralık ölçümü Veri yok %75'e kadar En küçük doğruluk kaybı CPU, GPU (Android)
Eğitim sonrası tam sayı sayımı Etiketsiz temsilci örneği %75'e kadar Düşük doğruluk kaybı CPU, GPU (Android), EdgeTPU
Nicelemeye duyarlı eğitim Etiketli eğitim verileri %75'e kadar En küçük doğruluk kaybı CPU, GPU (Android), EdgeTPU

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

niceleme-karar-ağacı

Aşağıda, birkaç modelde eğitim sonrası niceleme ve niceliğe 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 kullanan Pixel 2 cihazlarda ölçülür. Araç seti geliştikçe, buradaki sayılar da artar:

Model İlk 1 Doğruluk (Orijinal) İlk 1 Doğruluk (Eğitim Sonrası Nicel) İlk Doğruluk (Nicelemeye Duyarlı Eğitim) Gecikme (Orijinal) (ms) Gecikme (Eğitim Sonrası Nicel) (ms) Gecikme (Nicelemeye Duyarlı Eğitim) (ms) Boyut (Orijinal) (MB) Boyut (Optimize edilmiş) (MB)
Mobilenet-v1-1-2240,7090,6570,70 1241126416,94,3
Mobilenet-v2-1-2240,7190,6370,709 899854143.6
Inception_v30,780,7720,775 1130845543%23,9
Resnet_v2_1010,7700,768Yok 39732868Yok178,344,9
Tablo 1 Belirli CNN modelleri için model nicelemenin avantajları

int16 etkinleştirmeleri ve int8 ağırlıklarıyla tam tam sayı sayımı

Int16 aktivasyonlarıyla nicelleştirme, int16'da etkinleştirmeler ve int8'de ağırlıklar ile tam sayı kullanılan bir tam sayı oluşturma şemasıdır. Bu mod, benzer bir model boyutunu koruyan int8'deki hem etkinleştirmeler hem de ağırlıklar ile tam tamsayı nicelleştirme şemasına kıyasla nicelenmiş modelin doğruluğunu artırabilir. Etkinleştirmeler, ölçüme duyarlı olduğunda önerilir.

NOT: Bu ölçüm şeması için şu anda TFLite'ta yalnızca optimize edilmemiş referans çekirdeği uygulamaları kullanılabildiğinden varsayılan olarak performans, int8 çekirdeklerine kıyasla yavaş olacaktır. 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ı modeller için doğruluk sonuçları verilmiştir.

Model Doğruluk metriği türü Doğruluk (float32 etkinleştirmeleri) Doğruluk (int8 etkinleştirmeleri) Doğruluk (int16 etkinleştirmeleri)
Wav2letterWER%6,7%7,7 %7,2
DeepSpeech 0.5.1 (gösterilmemiş)T%6,13%43,67 %6,52
YoloV3mAP(IOU=0,5)0,5770,563 0,574
MobileNetV1İlk 1 Doğruluk0,70620,694 0,6936
MobileNetV2İlk 1 Doğruluk0,7180,7126 0,7137
MobileBertF1(Tam eşleme)88,81(81,23)2,08(0) 88,73(81,15)
Tablo 2 Int16 etkinleştirmeleriyle model nicelemenin avantajları

Budama

Budama işlemi, bir modelin tahminleri üzerinde çok küçük bir etkisi olan parametreleri kaldırarak yapılır. Budanan modeller disk üzerinde aynı boyuta ve aynı çalışma zamanı gecikmesine sahiptir ama daha etkili bir şekilde sıkıştırılabilir. Bu, budamayı model indirme boyutunu küçültmek için kullanışlı bir teknik haline getirir.

TensorFlow Lite, gelecekte kısaltılmış modeller için gecikmeyi azaltmayı sağlayacaktır.

Kümeleme

Kümeleme, bir modeldeki her katmanın ağırlıklarını önceden tanımlanmış sayıda kümeler halinde gruplandırıp ardından her bir kümeye ait ağırlıkların merkezi değerlerini paylaşarak çalışır. Bu da bir modeldeki benzersiz ağırlık değerlerinin sayısını ve dolayısıyla karmaşıklığı azaltır.

Sonuç olarak kümelenmiş modeller daha etkili şekilde sıkıştırılabilir. Böylece budamaya benzer dağıtım avantajları elde edilir.

Geliştirme iş akışı

Başlangıç noktası olarak, barındırılan modeller içindeki modellerin uygulamanız için çalışıp çalışmadığını kontrol edin. Aksi takdirde, kullanıcıların eğitim sonrası niceleme aracıyla başlamalarını öneririz. Bu, geniş çapta uygulanabilir ve eğitim verileri gerektirmez.

Doğruluk ve gecikme hedeflerinin karşılanmadığı veya donanım hızlandırıcı desteğinin önemli olduğu durumlarda nicelleştirmeye duyarlı eğitim daha iyi bir seçenektir. TensorFlow Model Optimizasyonu Araç Seti altında ek optimizasyon tekniklerini inceleyin.

Model boyutunuzu daha da küçültmek isterseniz modellerinizi ölçmeden önce kısma ve/veya kümeleme işlemlerini deneyebilirsiniz.