Model optimizasyonu

Uç cihazlarda genellikle sınırlı bellek veya işlem gücü bulunur. Modellerin bu kısıtlamalar içinde çalıştırılabilmesi için çeşitli optimizasyonlar uygulanabilir. Ayrıca bazı optimizasyonlar, çıkarım hızlandırma için özel donanım kullanımına olanak tanır.

LiteRT ve TensorFlow Model Optimization Toolkit, çıkarım optimizasyonunun karmaşıklığını en aza indirmeye yönelik araçlar sunar.

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

Modeller neden optimize edilmelidir?

Model optimizasyonu, uygulama geliştirmeye çeşitli şekillerde yardımcı olabilir.

Boyut küçültme

Bazı optimizasyon türleri, modelin boyutunu küçültmek için kullanılabilir. Daha küçük modellerin avantajları:

  • Daha küçük depolama alanı: Daha küçük modeller, kullanıcılarınızın cihazlarında daha az depolama alanı kaplar. Ö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: Daha küçük modellerin kullanıcı cihazlarına indirilmesi için daha az süre 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 bölümlerinin kullanabileceği bellek alanını boşaltır ve daha iyi performans ve kararlılık sağlar.

Kuantizasyon, bu durumların hepsinde modelin boyutunu küçültebilir. Bu işlem, doğruluktan biraz ödün verilmesine neden olabilir. Budama ve kümeleme, daha kolay sıkıştırılabilir hale getirerek indirilecek modelin boyutunu küçültebilir.

Gecikmeyi azaltma

Gecikme, belirli bir modelle tek bir çıkarımın çalıştırılması için geçen süredir. Bazı optimizasyon biçimleri, bir model kullanılarak çıkarım çalıştırmak için gereken hesaplama miktarını azaltabilir ve bu da daha düşük gecikmeye yol açar. Gecikme, güç tüketimini de etkileyebilir.

Şu anda nicemleme, çıkarım sırasında gerçekleşen hesaplamaları basitleştirerek gecikmeyi azaltmak için kullanılabilir. Bu işlem, doğrulukta bir miktar kayba neden olabilir.

Hızlandırıcı uyumluluğu

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

Genellikle bu tür cihazlarda modellerin belirli bir şekilde nicelleştirilmesi gerekir. Donanım hızlandırıcıların gereksinimleri hakkında daha fazla bilgi edinmek için her birinin belgelerine bakın.

Avantajlar ve dezavantajlar

Optimizasyonlar, model doğruluğunda değişikliklere neden olabilir. Bu değişiklikler, uygulama geliştirme sürecinde dikkate alınmalıdır.

Doğruluktaki değişiklikler, optimize edilen modele bağlıdır ve önceden tahmin edilmesi zordur. Genellikle boyut veya gecikme için optimize edilmiş modellerde doğruluk oranı biraz düşer. Bu durum, uygulamanıza bağlı olarak kullanıcılarınızın deneyimini etkileyebilir veya etkilemeyebilir. Nadiren de olsa bazı modeller, optimizasyon süreci sonucunda doğruluk kazanabilir.

Optimizasyon türleri

LiteRT şu anda niceliklendirme, budama ve kümeleme yoluyla optimizasyonu desteklemektedir.

Bu araçlar, TensorFlow Lite ile uyumlu model optimizasyon teknikleri için kaynaklar sağlayan TensorFlow Model Optimization Toolkit'in bir parçasıdır.

Kuantizasyon

Kuantizasyon, bir modelin parametrelerini temsil etmek için kullanılan sayıların duyarlılığını azaltarak çalışır. Bu sayılar varsayılan olarak 32 bit kayan nokta biçiminde sayılardır. Bu, daha küçük bir model boyutu ve daha hızlı hesaplama ile sonuçlanır.

LiteRT'de aşağıdaki nicelendirme türleri kullanılabilir:

Teknik Veri gereksinimleri Boyut küçültme Doğruluk Desteklenen donanım
Eğitim sonrası float16 nicemleme Veri yok %50'ye kadar Önemsiz doğruluk kaybı CPU, GPU
Eğitim sonrası dinamik aralık nicemleme Veri yok %75'e kadar En az doğruluk kaybı CPU, GPU (Android)
Eğitim sonrası tamsayı kuantizasyonu Etiketlenmemiş temsili örnek %75'e kadar Doğrulukta küçük kayıp CPU, GPU (Android), EdgeTPU
Kuantizasyona duyarlı eğitim Etiketlenmiş eğitim verileri %75'e kadar En az doğruluk kaybı CPU, GPU (Android), EdgeTPU

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

quantization-decision-tree

Aşağıda, eğitim sonrası nicemleme ve nicemlemeye duyarlı eğitim için bazı modellerdeki gecikme ve doğruluk sonuçları verilmiştir. Tüm gecikme süreleri, tek bir büyük çekirdekli CPU kullanan Pixel 2 cihazlarda ölçülür. Araç seti geliştikçe buradaki sayılar da artacaktır:

Model Top-1 Accuracy (Original) En İyi 1 Doğruluk (Eğitim Sonrası Kuantize Edilmiş) Top-1 Accuracy (Quantization Aware Training) Gecikme (Orijinal) (ms) Gecikme (Eğitim Sonrası Kuantize Edilmiş) (ms) Gecikme (Kuantizasyon Farkındalığına Sahip Eğitim) (ms) Boyut (Orijinal) (MB) Boyut (Optimum) (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 113084554395,723,9
Resnet_v2_1010,7700,768Yok 39732868Yok178,344,9
Tablo 1 Belirli CNN modelleri için model nicemlemenin avantajları

int16 etkinleştirmeleri ve int8 ağırlıklarıyla tam tamsayı nicemleme

int16 etkinleştirmeleriyle nicemleme int16'da etkinleştirmeler ve int8'de ağırlıklar içeren tam sayı nicemleme şemasıdır. Bu mod, benzer model boyutunu koruyarak hem etkinleştirmelerin hem de ağırlıkların int8'de olduğu tam tamsayı niceleme şemasına kıyasla niceleme yapılmış modelin doğruluğunu artırabilir. Etkinleştirmeler nicemlemeye duyarlı olduğunda önerilir.

NOT: Bu nicemleme şeması için TFLite'ta şu anda yalnızca optimize edilmemiş referans çekirdek uygulamaları mevcuttur. Bu nedenle, 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ı modellerin doğruluk sonuçları verilmiştir.

Model Doğruluk metrik türü Doğruluk (float32 etkinleştirmeleri) Doğruluk (int8 etkinleştirmeler) Doğruluk (int16 etkinleştirmeleri)
Wav2letterWER%6,7%7,7 %7,2
DeepSpeech 0.5.1 (unrolled)CER%6,13%43,67 %6,52
YoloV3mAP(IOU=0.5)0,5770,563 0,574
MobileNetV1En Yüksek Doğruluk0,70620,694 0,6936
MobileNetV2En Yüksek 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 nicemlemenin avantajları

Budama

Budama, bir modeldeki tahminleri yalnızca küçük bir etkiye sahip olan parametreleri kaldırarak çalışır. Budanmış modeller, diskte aynı boyuta ve aynı çalışma zamanı gecikmesine sahiptir ancak daha etkili bir şekilde sıkıştırılabilir. Bu nedenle budama, model indirme boyutunu küçültmek için kullanışlı bir tekniktir.

Gelecekte LiteRT, kırpılmış modeller için gecikme süresini azaltacaktır.

Kümeleme

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

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

Geliştirme iş akışı

Başlangıç noktası olarak, barındırılan modellerdeki modellerin uygulamanızda çalışıp çalışmadığını kontrol edin. Aksi takdirde, geniş bir uygulama alanına sahip olduğu ve eğitim verileri gerektirmediği için kullanıcıların eğitim sonrası nicemleme aracı ile başlamasını öneririz.

Doğruluk ve gecikme hedeflerinin karşılanmadığı veya donanım hızlandırıcı desteğinin önemli olduğu durumlarda nicemlemeye duyarlı eğitim daha iyi bir seçenektir. Ek optimizasyon tekniklerini TensorFlow Model Optimizasyon Araç Seti bölümünde bulabilirsiniz.

Model boyutunuzu daha da küçültmek istiyorsanız modellerinizi nicel hale getirmeden önce budamayı ve/veya kümelemeyi deneyebilirsiniz.