Edge cihazları genellikle sınırlı belleğe veya hesaplama gücüne sahiptir. Modellerin bu kısıtlamalar dahilinde çalıştırılabilmesi için çeşitli optimizasyonlar uygulanabilir. Ayrıca bazı optimizasyonlar, hızlandırılmış çıkarım için özel donanımın kullanılmasına olanak tanır.
TensorFlow Lite ve TensorFlow Model Optimizasyon Araç Takımı, çıkarımı optimize etmenin karmaşıklığını en aza indirecek araçlar sağlar.
Uygulama geliştirme süreciniz sırasında model optimizasyonunu dikkate almanız önerilir. Bu belge, TensorFlow modellerini uç donanıma dağıtım için optimize etmeye yönelik bazı en iyi uygulamaları özetlemektedir.
Modeller neden optimize edilmeli?
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: 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ı kaplayacaktır.
- Daha küçük indirme boyutu: Daha 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 çalıştırıldığında daha az RAM kullanır; bu da uygulamanızın diğer bölümlerinin kullanması için bellekte yer açar ve daha iyi performans ve kararlılık anlamına gelebilir.
Niceleme, tüm bu durumlarda, potansiyel olarak bir miktar doğruluk pahasına, bir modelin boyutunu azaltabilir. Budama ve kümeleme, bir modeli daha kolay sıkıştırılabilir hale getirerek indirilecek modelin boyutunu azaltabilir.
Gecikme azaltma
Gecikme , belirli bir modelle tek bir çıkarımın çalıştırılması için gereken süredir. Bazı optimizasyon biçimleri, bir model kullanarak çıkarım yapmak için gereken hesaplama miktarını azaltarak gecikmeyi azaltabilir. Gecikmenin güç tüketimi üzerinde de etkisi olabilir.
Şu anda, potansiyel olarak bir miktar doğruluk pahasına, çıkarım sırasında meydana gelen hesaplamaları basitleştirerek gecikmeyi azaltmak için kuantizasyon kullanılabilir.
Hızlandırıcı uyumluluğu
Edge TPU gibi bazı donanım hızlandırıcılar, doğru şekilde optimize edilmiş modellerle çıkarımları son derece hızlı çalıştırabilir.
Genellikle bu tür cihazlar, modellerin belirli bir şekilde nicelendirilmesini gerektirir. Gereksinimleri hakkında daha fazla bilgi edinmek için her 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. Genellikle boyut veya gecikme açısından optimize edilen modeller, küçük bir miktar doğruluk kaybı yaşar. Uygulamanıza bağlı olarak bu, kullanıcılarınızın deneyimini etkileyebilir veya etkilemeyebilir. Nadir durumlarda, optimizasyon sürecinin bir sonucu olarak belirli modeller bir miktar doğruluk kazanabilir.
Optimizasyon türleri
TensorFlow Lite şu anda niceleme, budama ve kümeleme yoluyla optimizasyonu desteklemektedir.
Bunlar, TensorFlow Lite ile uyumlu model optimizasyon teknikleri için kaynaklar sağlayan TensorFlow Model Optimizasyon Araç Takımının bir parçasıdır.
Niceleme
Niceleme, bir modelin parametrelerini temsil etmek için kullanılan, varsayılan olarak 32 bitlik kayan noktalı sayılar olan sayıların kesinliğini azaltarak çalışır. Bu, daha küçük bir model boyutuna ve daha hızlı hesaplamaya neden olur.
TensorFlow Lite'ta aşağıdaki niceleme türleri mevcuttur:
Teknik | Veri gereksinimleri | Boyut küçültme | Kesinlik | Desteklenen donanım |
---|---|---|---|---|
Eğitim sonrası float16 nicelemesi | Veri yok | 50'ye kadar% | Önemsiz doğruluk kaybı | CPU, GPU |
Eğitim sonrası dinamik aralık kuantizasyonu | 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, Altıgen DSP |
Kuantizasyona duyarlı eğitim | Etiketli eğitim verileri | %75'e kadar | En küçük doğruluk kaybı | CPU, GPU (Android), EdgeTPU, Altıgen DSP |
Aşağıdaki karar ağacı, yalnızca beklenen model boyutuna ve doğruluğuna dayalı olarak modeliniz için kullanmak isteyebileceğiniz nicemleme şemalarını seçmenize yardımcı olur.
Aşağıda, birkaç modelde eğitim sonrası niceleme ve nicemlemeye duyarlı eğitim için gecikme ve doğruluk sonuçları verilmiştir. Tüm gecikme sayıları Pixel 2 cihazlarda tek bir büyük çekirdekli CPU kullanılarak ölçülür. Araç seti geliştikçe buradaki sayılar da gelişecektir:
Modeli | En İyi 1 Doğruluk (Orijinal) | En İyi 1 Doğruluk (Eğitim Sonrası Niceliklendirilmiş) | En İyi 1 Doğruluk (Kuantizasyon Farkındalık Eğitimi) | Gecikme (Orijinal) (ms) | Gecikme (Eğitim Sonrası Niceleştirilmiş) (ms) | Gecikme (Kuantizasyon Farkındalık Eğitimi) (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 |
int16 aktivasyonları ve int8 ağırlıkları ile tam tamsayı nicelemesi
İnt16 aktivasyonlarıyla niceleme, int16'daki aktivasyonları ve int8'deki ağırlıkları içeren tam bir tamsayı niceleme şemasıdır. Bu mod, benzer bir model boyutunu koruyan int8'deki hem aktivasyonlar hem de ağırlıklar ile tam tamsayı niceleme şemasına kıyasla nicelenmiş modelin doğruluğunu geliştirebilir. Aktivasyonların nicelemeye duyarlı olduğu durumlarda tavsiye edilir.
NOT: Şu anda bu niceleme şeması için TFLite'da yalnızca optimize edilmemiş referans çekirdek uygulamaları mevcuttur, dolayısıyla varsayılan olarak performans int8 çekirdekleriyle karşılaştırıldığında yavaş olacaktır. Bu modun tüm avantajlarına şu anda özel donanım veya özel yazılım aracılığıyla erişilebilmektedir.
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 (kullanılmamış) CER %6,13 %43,67 %6,52 YoloV3 mAP(IOU=0,5) 0,577 0,563 0,574 MobilNetV1 En İyi 1 Doğruluk 0,7062 0,694 0,6936 MobilNetV2 En İyi 1 Doğruluk 0,718 0,7126 0,7137 MobilBert F1(Tam eşleşme) 88,81(81,23) 2.08(0) 88,73(81,15)
Budama
Budama, bir modelin tahminleri üzerinde yalnızca küçük bir etkisi olan parametrelerin kaldırılmasıyla çalışır. 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 azaltmak için kullanışlı bir teknik haline getirir.
Gelecekte TensorFlow Lite, budanmış modeller için gecikme süresini azaltacaktır.
Kümeleme
Kümeleme, bir modeldeki her katmanın ağırlıklarının önceden tanımlanmış sayıda küme halinde gruplanması, ardından her bir kümeye ait ağırlıkların ağırlık merkezi değerlerinin paylaşılması yoluyla çalışır. Bu, bir modeldeki benzersiz ağırlık değerlerinin sayısını azaltarak 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ğlanır.
Geliştirme iş akışı
Başlangıç noktası olarak, barındırılan modellerdeki modellerin uygulamanız için çalışıp çalışmadığını kontrol edin. Değilse, geniş çapta uygulanabilir olduğundan ve eğitim verileri gerektirmediğinden kullanıcıların eğitim sonrası niceleme aracıyla başlamasını öneririz.
Doğruluk ve gecikme hedeflerinin karşılanmadığı veya donanım hızlandırıcı desteğinin önemli olduğu durumlarda kuantizasyona duyarlı eğitim daha iyi bir seçenektir. TensorFlow Model Optimizasyon Araç Takımı altındaki ek optimizasyon tekniklerine bakın.
Model boyutunuzu daha da azaltmak istiyorsanız modellerinizi nicelemeden önce budama ve/veya kümelemeyi deneyebilirsiniz.