Mobil ve gömülü cihazların hesaplama kaynakları sınırlıdır, bu nedenle uygulama kaynağınızı verimli tutmak önemlidir. TensorFlow Lite model performansınızı geliştirmek için kullanabileceğiniz en iyi uygulamaların ve stratejilerin bir listesini derledik.
Görev için en iyi modeli seçin
Göreve bağlı olarak modelin karmaşıklığı ile boyutu arasında bir denge kurmanız gerekecektir. Göreviniz yüksek doğruluk gerektiriyorsa büyük ve karmaşık bir modele ihtiyacınız olabilir. Daha az hassasiyet gerektiren görevler için, daha küçük bir model kullanmak daha iyidir çünkü bunlar yalnızca daha az disk alanı ve bellek kullanmakla kalmaz, aynı zamanda genel olarak daha hızlıdır ve enerji açısından daha verimlidir. Örneğin, aşağıdaki grafikler bazı yaygın görüntü sınıflandırma modelleri için doğruluk ve gecikme değişimlerini göstermektedir.
Mobil cihazlar için optimize edilmiş modellere bir örnek, mobil görüş uygulamaları için optimize edilmiş MobileNet'lerdir . TensorFlow Hub, özellikle mobil ve gömülü cihazlar için optimize edilmiş diğer birkaç modeli listeler.
Listelenen modelleri transfer öğrenmeyi kullanarak kendi veri kümenizde yeniden eğitebilirsiniz. TensorFlow Lite Model Maker'ı kullanarak transfer öğrenme eğitimlerine göz atın.
Modelinizin profilini çıkarın
Görevinize uygun bir aday modeli seçtikten sonra modelinizin profilini çıkarmak ve kıyaslamak iyi bir uygulamadır. TensorFlow Lite kıyaslama aracı, operatör başına profil oluşturma istatistiklerini gösteren yerleşik bir profil oluşturucuya sahiptir. Bu, performans darboğazlarının ve hangi operatörlerin hesaplama süresine hakim olduğunun anlaşılmasına yardımcı olabilir.
Standart Android sistem izlemeyi kullanarak Android uygulamanızdaki modelin profilini çıkarmak ve GUI tabanlı profil oluşturma araçlarıyla zamana göre operatör çağrılarını görselleştirmek için TensorFlow Lite izlemeyi de kullanabilirsiniz.
Grafikteki operatörlerin profilini çıkarın ve optimize edin
Belirli bir operatör modelde sıklıkla görünüyorsa ve profil oluşturmaya dayalı olarak en fazla zamanı harcayan operatörü bulursanız, o operatörü optimize etmeyi düşünebilirsiniz. TensorFlow Lite'ın çoğu operatör için optimize edilmiş versiyonları olduğundan bu senaryonun nadir olması gerekir. Ancak operatörün yürütüldüğü kısıtlamaları biliyorsanız, özel bir operasyonun daha hızlı bir versiyonunu yazabilirsiniz. Özel operatörler kılavuzuna göz atın.
Modelinizi optimize edin
Model optimizasyonu, mobil cihazlara yerleştirilebilmeleri için genellikle daha hızlı ve enerji açısından daha verimli olan daha küçük modeller oluşturmayı amaçlamaktadır. TensorFlow Lite, niceleme gibi birden fazla optimizasyon tekniğini destekler.
Ayrıntılar için model optimizasyon belgelerine göz atın.
İş parçacığı sayısını azaltın
TensorFlow Lite birçok operatör için çok iş parçacıklı çekirdekleri destekler. İş parçacığı sayısını artırabilir ve operatörlerin yürütülmesini hızlandırabilirsiniz. Ancak iş parçacığı sayısını artırmak modelinizin daha fazla kaynak ve güç kullanmasını sağlayacaktır.
Bazı uygulamalar için gecikme, enerji verimliliğinden daha önemli olabilir. Yorumlayıcı iş parçacığı sayısını ayarlayarak iş parçacığı sayısını artırabilirsiniz. Bununla birlikte, çok iş parçacıklı yürütme, aynı anda yürütülen başka nelere bağlı olarak artan performans değişkenliği pahasına gelir. Bu özellikle mobil uygulamalar için geçerlidir. Örneğin, izole testler tek iş parçacıklı uygulamalara kıyasla 2 kat hızlanma gösterebilir ancak aynı anda başka bir uygulama çalıştırılıyorsa bu, tek iş parçacıklı uygulamalara göre daha kötü performansla sonuçlanabilir.
Gereksiz kopyaları ortadan kaldırın
Uygulamanız dikkatli bir şekilde tasarlanmamışsa, modele girdi beslenirken ve modelden çıktı okunurken fazla kopyalar oluşabilir. Gereksiz kopyaları ortadan kaldırdığınızdan emin olun. Java gibi daha üst düzey API'ler kullanıyorsanız performans uyarıları için belgeleri dikkatlice kontrol ettiğinizden emin olun. Örneğin,
ByteBuffers giriş olarak kullanılırsa Java API çok daha hızlıdır.
Platforma özel araçlarla uygulamanızın profilini çıkarın
Android profil oluşturucu ve Araçlar gibi platforma özel araçlar, uygulamanızda hata ayıklamak için kullanılabilecek zengin profil oluşturma bilgileri sağlar. Bazen performans hatası modelde değil uygulama kodunun modelle etkileşime giren kısımlarında olabilir. Platforma özel profil oluşturma araçlarına ve platformunuza yönelik en iyi uygulamalara aşina olduğunuzdan emin olun.
Modelinizin, cihazda bulunan donanım hızlandırıcıları kullanmanın fayda sağlayıp sağlamadığını değerlendirin
TensorFlow Lite, GPU'lar, DSP'ler ve sinirsel hızlandırıcılar gibi daha hızlı donanımlara sahip modelleri hızlandırmanın yeni yollarını ekledi. Tipik olarak bu hızlandırıcılar, tercüman yürütmesinin bazı kısımlarını devralan temsilci alt modülleri aracılığıyla kullanıma sunulur. TensorFlow Lite delegeleri şu şekilde kullanabilir:
- Android'in Sinir Ağları API'sini kullanma. Modelinizin hızını ve verimliliğini artırmak için bu donanım hızlandırıcı arka uçlarından yararlanabilirsiniz. Sinir Ağları API'sini etkinleştirmek için NNAPI temsilci kılavuzuna bakın.
- GPU temsilcisi Android ve iOS'ta sırasıyla OpenGL/OpenCL ve Metal kullanılarak kullanılabilir. Bunları denemek için GPU temsilcisi eğitimine ve belgelerine bakın.
- Altıgen temsilci Android'de mevcuttur. Cihazda mevcut olması durumunda Qualcomm Hexagon DSP'den yararlanır. Daha fazla bilgi için Hexagon temsilci eğitimine bakın.
- Standart dışı donanıma erişiminiz varsa kendi temsilcinizi oluşturmanız mümkündür. Daha fazla bilgi için TensorFlow Lite delegelerine bakın.
Bazı hızlandırıcıların farklı model türleri için daha iyi çalıştığını unutmayın. Bazı delegeler yalnızca değişken modelleri veya belirli bir şekilde optimize edilmiş modelleri destekler. Başvurunuz için iyi bir seçim olup olmadığını görmek için her delegeyi kıyaslamak önemlidir. Örneğin, çok küçük bir modeliniz varsa modeli NN API'ye veya GPU'ya devretmeye değmeyebilir. Tersine, hızlandırıcılar yüksek aritmetik yoğunluğa sahip büyük modeller için mükemmel bir seçimdir.
Daha fazla yardıma ihtiyacım var
TensorFlow ekibi, karşılaşabileceğiniz belirli performans sorunlarını teşhis etmenize ve çözmenize yardımcı olmaktan mutluluk duyacaktır. Lütfen sorunun ayrıntılarını içeren GitHub'a bir sorun bildirin.