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. Ek olarak, bazı optimizasyonlar, hızlandırılmış çıkarım için özel donanım kullanımına izin verir.
TensorFlow Lite ve TensorFlow Model Optimizasyon Araç Takımı , çıkarımı optimize etmenin karmaşıklığını 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: 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 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ıkları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, indirilecek bir modelin boyutunu daha kolay sıkıştırılabilir hale getirerek küçültebilir.
Gecikme azaltma
Gecikme , belirli bir modelle tek bir çıkarım yapmak için gereken süredir. Bazı optimizasyon biçimleri, bir model kullanarak çıkarımı çalıştırmak için gereken hesaplama miktarını azaltarak daha düşük gecikme süresi sağlayabilir. 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
Edge TPU gibi bazı donanım hızlandırıcıları, doğru şekilde optimize edilmiş modellerle son derece hızlı çıkarım yapabilir.
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 etmek zordur. Genel olarak, boyut veya gecikme süresi 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, 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 , varsayılan olarak 32 bitlik kayan nokta sayıları olan bir modelin parametrelerini temsil etmek için kullanılan sayıların kesinliğini 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 nicemleme | 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.
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 cihazlarında ö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ı Ölçülen) (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 |
int16 aktivasyonları ve int8 ağırlıkları ile tam tamsayı niceleme
int16 aktivasyonlarıyla niceleme, int16'da aktivasyonlar ve int8'de ağırlıklar içeren tam bir tamsayı nicemleme ş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 nicelenmiş modelin doğruluğunu artırabilir. Aktivasyonların nicelemeye duyarlı olduğu durumlarda önerilir.
NOT: Şu anda bu niceleme şeması için TFLite'ta 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. 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 MobileNetV2 İ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)
Budama
Budama , bir model içindeki tahminleri üzerinde yalnızca küçük bir etkisi olan parametreleri kaldırarak ç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 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 , bir modeldeki her katmanın ağırlıklarını önceden tanımlanmış sayıda kümede gruplayarak ve ardından her bir kümeye ait ağırlıklar için merkez değerlerini paylaşarak çalışır. 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ışı
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 verisi 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, niceleme 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 küçültmek istiyorsanız, modellerinizi nicelemeden önce budama ve/veya kümelemeyi deneyebilirsiniz.