Zephyrnet Logosu

Yüksek Performanslı Derin Öğrenme: Daha küçük, daha hızlı ve daha iyi modeller nasıl eğitilir – Bölüm 5

Tarih:

Yüksek Performanslı Derin Öğrenme: Daha küçük, daha hızlı ve daha iyi modeller nasıl eğitilir – Bölüm 5

Verimli derin öğrenme modellerini herhangi bir yazılım aracıyla eğitmek, sağlam ve performanslı bir bilgi işlem gücü altyapısı olmadan hiçbir şeydir. Burada, mümkün olan en yüksek performansa ihtiyaç duyulduğunda geliştirmelerinizde dikkate alabileceğiniz güncel yazılım ve donanım ekosistemleri incelenmektedir.



Önceki bölümlerde (Bölüm 1, Bölüm 2, Bölüm 3, Bölüm 4), Pareto-optimal yüksek performanslı modellere ulaşmak için derin öğrenme modellerinde verimliliğin neden önemli olduğunu ve Derin Öğrenmede verimlilik için odak alanlarını tartıştık. Ayrıca odak alanlarından dördünü de ele aldık (Sıkıştırma Teknikleri, Öğrenme Teknikleri, Otomasyon ve Verimli Mimariler). Bu seriyi, yüksek performanslı modellerin eğitimi ve dağıtımı için kritik olan temel Altyapıya ilişkin son bölümle bitirelim.

Bir yan not olarak, ayrıca bizim incelememizi de inceleyebilirsiniz. derin öğrenmede verimlilik üzerine anket kağıdı, bu konuyu daha ayrıntılı olarak ele alıyor.

Altyapı

Çıkarımı verimli bir şekilde eğitebilmek ve çalıştırabilmek için sağlam bir yazılım ve donanım altyapısı temelinin olması gerekir. Bu bölümde bu iki hususu da ele alacağız.

Yazılım ve donanım altyapısının ve bunların birbirleriyle nasıl etkileşime girdiğinin zihinsel bir modeli.

Tensorflow Ekosistemi:

Tensorflow (TF) [1] birçok büyük kuruluş tarafından üretimde kullanılan popüler bir makine öğrenme çerçevesidir. Model verimliliği için en kapsamlı yazılım desteğinden bazılarına sahiptir.

Cihaz İçi Kullanım Durumları için Tensorflow Lite: Tensorflow Lite (TFLite) [2], uç cihazlar gibi düşük kaynaklı ortamlarda çıkarım yapmak için tasarlanmış bir araç ve kitaplık koleksiyonudur. Yüksek düzeyde TFLite'ı iki temel parçaya ayırabiliriz:

  • Yorumlayıcı ve Op Çekirdekleri: TFLite, özel TFLite modellerinin yanı sıra ortak sinir ağı operasyonlarının (Tam Bağlantılı, Evrişim, Maksimum Havuzlama, ReLu, Softmax, vb. her biri Op olarak) uygulamalarının çalıştırılması için bir yorumlayıcı sağlar. Yorumlayıcı ve işlemler, bu yazının yazıldığı tarih itibariyle öncelikle ARM tabanlı işlemciler üzerinde çıkarım yapmak üzere optimize edilmiştir. Ayrıca daha hızlı uygulama için Qualcomm'un Hexagon'u [3] gibi akıllı telefon DSP'lerinden de yararlanabilirler.
  • Dönüştürücü: Bu, verilen TF modelini yorumlayıcının çıkarımı için tek bir dosyaya dönüştürmek için kullanılan bir araçtır. Dönüşümün kendisinden ayrı olarak, nicelenmiş çıkarım için bir grafiğin hazırlanması (önceki gönderilerde belirtildiği gibi), birleştirme işlemleri, modele diğer meta verilerin eklenmesi vb. gibi birçok dahili ayrıntıyı yönetir.

Cihaz İçi Çıkarım İçin Diğer Araçlar: Benzer şekilde diğer platformlarda da çıkarım araçları bulunmaktadır. Örneğin, TF Micro [4], DSP'ler gibi çok düşük kaynaklı mikrokontrolörler üzerinde çıkarım yapmak için daraltılmış bir yorumlayıcıya ve daha küçük bir operasyon setine sahiptir. TensorflowJS (TF.JS) [5], TF ekosistemi içinde, tarayıcı içinde veya Node.js kullanılarak sinir ağlarını eğitmek ve çalıştırmak için kullanılabilen bir kütüphanedir. Bu modeller aynı zamanda WebGL arayüzü aracılığıyla GPU'lar aracılığıyla da hızlandırılabilmektedir [6]. Hem TF'de eğitilmiş modellerin içe aktarılmasını hem de TF.JS'de sıfırdan yeni modeller oluşturulmasını destekler. Ayrıca bir model grafiğine niceleme, seyreklik, ağırlık kümeleme vb. ekleme olanağı sunan TF Model Optimizasyon Araç Takımı [7] da bulunmaktadır.

Sunucu Tarafı Hızlandırma için XLA: XLA (Hızlandırılmış Doğrusal Cebir) [8], grafik için özelleştirilmiş işlemler (çekirdekler) için yeni uygulamalar üreterek bir modeldeki doğrusal cebir hesaplamalarını optimize edebilen bir grafik derleyicisidir. Örneğin, bir araya getirilebilen belirli işlemler tek bir bileşik işlemde birleştirilir. Bu, işlenenler hala önbellekteyken doğrudan çalıştırılabildiğinde RAM'e çok sayıda maliyetli yazma işlemi yapma zorunluluğunu ortadan kaldırır. Kanwar ve ark. [9], XLA kullanılarak BERT eğitimi için kullanılabilecek eğitim veriminde 7 kat artış ve maksimum toplu iş boyutunda 5 kat artış rapor etmektedir. Bu, bir BERT modelinin Google Cloud'da 32 ABD doları karşılığında eğitilmesine olanak tanır.

PyTorch Ekosistemi: 

PyTorch [10] hem akademi hem de endüstri tarafından aktif olarak kullanılan bir diğer popüler makine öğrenme platformudur ve kullanılabilirlik ve özellikler açısından Tensorflow ile karşılaştırılabilecektir.

Cihaz İçi Kullanım Durumları: PyTorch ayrıca, Android ve iOS için yerel çalışma zamanlarıyla (TFLite yorumlayıcısına benzer) PyTorch modellerinin Mobile'da [11] çalıştırılmasına olanak tanıyan hafif bir yorumlayıcıya sahiptir. PyTorch ayrıca eğitim sonrası kuantizasyon [12] ve sabit katlama, belirli işlemleri bir araya getirme, evrişimsel katmanları optimize etmek için kanalları en sona koyma (NHWC) formatı gibi diğer grafik optimizasyon adımlarını da sunar.

Genel Model Optimizasyonu: PyTorch ayrıca Python'un bir alt kümesi olan ve tür kontrolleri gibi özellikler ekleyen TorchScript [13] kodundan modelin seri hale getirilebilir bir ara temsilini oluşturmak için Tam Zamanında (JIT) derleme olanağını [14] sunar. Araştırma ve geliştirmeye yönelik esnek PyTorch kodu ile üretimde çıkarım için dağıtılabilecek bir temsil arasında bir köprü oluşturulmasına olanak tanır. PyTorch modellerinin mobil cihazlarda yürütülmesinin birincil yoludur.

PyTorch dünyasında XLA'nın alternatifleri Glow [15] ve TensorComprehension [16] derleyicileri gibi görünüyor. TorchScript gibi üst düzey IR'den türetilen alt düzey ara gösterimin (IR) oluşturulmasına yardımcı olurlar.

PyTorch ayrıca makine öğrenimi uygulayıcılarının elindeki çeşitli seçeneklerin ayrıntılarını veren bir model ayarlama kılavuzu [17] sunmaktadır. Buradaki temel fikirlerden bazıları şunlardır:

  • PyTorch JIT kullanılarak noktasal işlemlerin (toplama, çıkarma, çarpma, bölme vb.) birleştirilmesi.
  • Tampon kontrol noktası oluşturmanın etkinleştirilmesi, yalnızca belirli katmanların çıktılarının bellekte tutulmasına ve geri kalanın geri geçiş sırasında hesaplanmasına olanak tanır. Bu özellikle aktivasyonlar gibi büyük çıktılara sahip, ucuz hesaplamalı katmanlara yardımcı olur.
  • CuDNN kitaplığı ve NVIDIA GPU'larla Karma Hassas Eğitim gibi cihaza özel optimizasyonların etkinleştirilmesi (GPU alt bölümünde açıklanmıştır).
  • Büyük miktarda veri olduğunda ve eğitim için birden fazla GPU mevcut olduğunda uygun olan Dağıtılmış Veri Paralel Eğitimi ile Eğitim.

Donanım İçin Optimize Edilmiş Kitaplıklar:

Yazılım yığınımızı sinir ağlarının üzerinde çalıştığı donanıma göre optimize ederek verimliliği daha da artırabiliriz. Örnek olarak, ARM'in Cortex işlemci ailesi, Neon talimat setini kullanarak işlemin vektörleştirilmesine (veri yığınlarıyla çalışma) olanak tanıyan SIMD (Tek Talimatlı Çoklu Veri) talimatlarını destekler. QNNPACK [18] ve XNNPACK [19] kütüphaneleri, mobil ve gömülü cihazlar için ARM Neon ve x86 SSE2, AVX mimarileri vb. için optimize edilmiştir. İlki, PyTorch için nicelenmiş çıkarım modu için kullanılır ve ikincisi, 32 bit kayan-bit'i destekler. TFLite için nokta modelleri ve 16 bit kayan nokta. Benzer şekilde, iOS için Accelerate [20] ve Android için NNAPI [21] gibi, donanım düzeyindeki hızlandırma kararını daha yüksek düzeydeki makine öğrenimi çerçevelerinden soyutlamaya çalışan başka düşük düzeyli kitaplıklar da vardır.

donanım 

GPU: Grafik İşleme Birimleri (GPU'lar), başlangıçta bilgisayar grafiklerini hızlandırmak için tasarlanmış olsa da, 22 yılında CUDA kütüphanesinin [2007] kullanıma sunulmasıyla genel amaçlı kullanım durumları için kullanılmaya başlandı. AlexNet'in [23] 2012 yılında ImageNet yarışmasını kazanması Derin öğrenme modelleri için GPU'ların kullanımını standartlaştırdı. O zamandan beri Nvidia, derin öğrenme performansına giderek daha fazla odaklanarak GPU mikro mimarisinin birkaç yinelemesini yayınladı. Ayrıca, özel yürütme birimleri olan ve çeşitli hassasiyetlerde (fp24, TensorFloat32, fp32, bfloat16, int16, int8) eğitim ve çıkarımı destekleyen Tensör Çekirdeklerini [4] tanıttı.

Azaltılmış Hassasiyetli Çarpma ve Biriktirme (MAC) işlemi: B x C pahalı bir işlemdir ve dolayısıyla azaltılmış hassasiyetle yapılır.

Tensör Çekirdekleri standart Çarpma ve Biriktirme (MAC) işlemini optimize eder, A = (B × C) + D. Burada B ve C azaltılmış hassasiyettedir (fp16, bfloat16, TensorFloat32), A ve D ise fp32'dedir . NVIDIA, model mimarisine ve seçilen GPU'ya bağlı olarak, bu azaltılmış hassas MAC işlemleriyle 1 ila 15 kat arasında eğitim hızı rapor ediyor [25]. NVidia'nın en yeni Ampere mimarisi GPU'larındaki Tensör Çekirdekleri aynı zamanda seyreklik ile daha hızlı çıkarımı da destekler (özellikle, 2 öğeden oluşan bir bloktan 4 öğenin seyrek olduğu 2:4 oranında yapılandırılmış seyreklik). Çıkarım süresinde 1.5 kata kadar hızlanma ve bireysel katmanlarda 1.8 kata kadar hızlanma gösterirler. Bunun dışında NVidia ayrıca tam bağlantılı, evrişim, toplu norm, aktivasyon vb. gibi standart sinir ağı işlemlerinin optimize edilmiş versiyonlarını içeren cuDNN kitaplığını [29] da sunmaktadır.

GPU'lar ve TPU'lar üzerinde eğitim ve çıkarım sırasında kullanılan veri türleri. bfloat16, TPU'lardan üretilmiştir ve Tensor Float 32 yalnızca NVidia GPU'larda desteklenir.

TPU: TPU'lar, Google'ın Tensorflow ile derin öğrenme uygulamalarını hızlandırmak için tasarladığı ve doğrusal cebir işlemlerini paralelleştirmek ve hızlandırmak için hassas şekilde ayarlandığı tescilli uygulamaya özel entegre devrelerdir (ASIC'ler). TPU mimarileri, TPU'larla hem eğitimi hem de çıkarımı destekler ve Google Cloud hizmetleri aracılığıyla genel kullanıma açıktır. TPU çiplerinin çekirdek mimarisi, büyük bir hesaplamanın ağ benzeri bir topolojiye bölündüğü, her hücrenin kısmi bir sonucu hesapladığı ve bunu her saatte sırayla bir sonraki hücreye aktardığı Sistolik Dizi tasarımını [26] kullanır. -adım (sistolik kalp ritmine benzer ritmik bir şekilde), ara sonuçların hafızada saklanmasına gerek kalmadan.

Her TPU çipinde iki Tensör Çekirdeği bulunur (NVidia'nın Tensör Çekirdekleriyle karıştırılmamalıdır), her biri sistolik dizilerden oluşan bir ağa sahiptir. Tek bir TPU kartında birbirine bağlı 4 TPU yongası vardır. Eğitimi ve çıkarımı daha da ölçeklendirmek için, daha fazla sayıda TPU kartı bir ağ topolojisine bağlanarak bir 'pod' oluşturulabilir. Kamuya açıklanan rakamlara göre, her bir TPU çipi (v3) 420 teraflopa ulaşabiliyor ve bir TPU pod 100'den fazla petaflopa ulaşabiliyor [27]. TPU'lar, Google Arama için eğitim modelleri, genel amaçlı BERT modelleri, DeepMind'ın dünyayı yenen AlphaGo ve AlphaZero modelleri gibi uygulamalar ve diğer birçok araştırma uygulaması gibi uygulamalar için Google içinde kullanılmıştır [28]. GPU'lara benzer şekilde TPU'lar, tam kayan noktalı 16 bit hassasiyetinde eğitime azaltılmış hassasiyetli bir alternatif olan bfloat32 veri türünü destekler. XLA desteği, herhangi bir model değişikliği olmadan şeffaf bir şekilde bfloat16'ya geçiş yapılmasına olanak tanır.

Temel bir sistolik dizi hücresinin ve sistolik dizi hücrelerinden oluşan bir ağ kullanılarak 4x4 matris çarpımının yapıldığı bir çizim.

EdgeTPU, Coral ve Geliştirme Kartının yaklaşık boyutu. (Nezaket: Bhuwan Chopra)

EdgeTPU: EdgeTPU aynı zamanda Google tarafından tasarlanan özel bir ASIC çipidir. TPU'ya benzer şekilde, doğrusal cebir işlemlerini hızlandırmak için uzmanlaşmıştır, ancak yalnızca çıkarım için ve uç cihazlarda çok daha düşük bir işlem bütçesi ile. Ayrıca yalnızca işlemlerin bir alt kümesiyle sınırlıdır ve yalnızca int8 nicemlenmiş Tensorflow Lite modelleriyle çalışır. EdgeTPU çipinin kendisi bir ABD kuruşundan daha küçüktür ve bu da onu birçok türdeki IoT cihazında kullanıma uygun hale getirir. Raspberry-Pi benzeri geliştirme kartlarında, Pixel 4 akıllı telefonlarda Pixel Neural Core olarak kullanıldı ve ayrıca bağımsız olarak bir PCB'ye lehimlenebilir.

Jetson Nano modülü. (Kaynak)

Jetson: Jetson, Nvidia'nın gömülü cihazlar ve IoT cihazları için derin öğrenme uygulamalarını etkinleştiren bir hızlandırıcı ailesidir. Hafif dağıtımlar için tasarlanmış düşük güçlü bir "modül üzerinde sistem" (SoM) olan Nano'nun yanı sıra NVidia Volta ve Pascal GPU mimarilerini temel alan daha güçlü Xavier ve TX varyantlarını içerir. Nano, ev otomasyonu gibi uygulamalara, geri kalanı ise endüstriyel robotik gibi daha yoğun bilgi işlem gerektiren uygulamalara uygundur.

Özet

Bu seride, Derin Öğrenme alanındaki modellerin hızlı büyümesini göstererek ve ölçeklendirmeye devam ederken verimlilik ve performans ihtiyacını motive ederek başladık. Bunu, okuyucuların kullanabilecekleri geniş araç ve teknik yelpazesini anlamaları için zihinsel bir model oluşturarak takip ettik. Daha sonra ayrıntılı örnekler sunmak ve endüstride ve akademide şimdiye kadar yapılan çalışmaları daha ayrıntılı olarak göstermek için odak alanlarının her birine daha derinlemesine girdik. Bu blog yazıları serisinin, okuyucunun eğitim ve dağıtım için bir modeli optimize ederken düşünmesi gereken ödünleşimlerin yanı sıra somut ve eyleme dönüştürülebilir çıkarımlar sunacağını umuyoruz. Okuyucuları daha detaylı incelemeye davet ediyoruz. Model optimizasyonu ve verimliliği üzerine anket makalesi daha fazla bilgi için.

Referanslar

[1] Martín Abadi, Paul Barham, Jianmin Chen, Zhifeng Chen, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat, Geoffrey Irving, Michael Isard ve diğerleri. 2016. Tensorflow: Büyük ölçekli makine öğrenimine yönelik bir sistem. İşletim sistemleri tasarımı ve uygulamasına ilişkin 12. {USENIX} sempozyumunda ({OSDI} 16). 265–283.

[2] Tensorflow Yazarları. 2021. TensorFlow Lite | Mobil ve Uç Cihazlar için ML. https://www.tensorflow.org/lite [Çevrimiçi; Erişim tarihi: 3 Haziran 2021].

[3] XNNPACK Yazarları. 2021. TensorFlow Lite için XNNPACK arka ucu. https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/delegates/xnnpack/README.md/#sparse-inference.

[4] Pete Warden ve Daniel Situnayake. 2019. Tinyml: Arduino ve ultra düşük güçlü mikro denetleyicilerde tensorflow lite ile makine öğrenimi. “O'Reilly Media, Inc.”

[5] Tensorflow JS: https://www.tensorflow.org/js

[6]WebGL: https://en.wikipedia.org/wiki/WebGL

[7] TensorFlow. 2019. TensorFlow Model Optimizasyon Araç Seti — Eğitim Sonrası Tam Sayı Niceleme. Orta (Kasım 2019). https://medium.com/tensorflow/tensorflow-model-optimization-toolkit-post-training-integer-quantizationb4964a1ea9ba

[8] Tensorflow Yazarları. 2021. XLA: Derleyiciyi Makine Öğrenimi için Optimize Etme | TensorFlow. https://www.tensorflow. org/xla.

[9] Pankaj Kanwar, Peter Brandt ve Zongwei Zhou. 2021. TensorFlow 2 MLPerf gönderimleri, Google Cloud'da sınıfının en iyi performansını gösteriyor. https://blog.tensorflow.org/2020/07/tensorflow-2-mlperf-submissions.html.

[10] Adam Paszke, Sam Gross, Francisco Massa, Adam Lerer, James Bradbury, Gregory Chanan, Trevor Killeen, Zeming Lin, Natalia Gimelshein, Luca Antiga, ve diğerleri. 2019. Pytorch: Zorlayıcı tarzda, yüksek performanslı bir derin öğrenme kütüphanesi. arXiv ön baskısı arXiv:1912.01703 (2019).

[11] PyTorch Yazarları. 2021. PyTorch Mobil. https://pytorch.org/mobile/home.

[12] PyTorch Yazarları. 2021. Niceleme Tarifi — PyTorch Öğreticiler 1.8.1+cu102 belgeleri. https://pytorch.org/tutorials/recipes/quantization.html.

[13] PyTorch Yazarları. 2021. torch.jit.script — PyTorch 1.8.1 belgeleri. https://pytorch.org/docs/stable/generate/ torch.jit.script.html

[14] PyTorch Yazarları. 2021. torch.jit.script — PyTorch 1.8.1 belgeleri. https://pytorch.org/docs/stable/generate/ torch.jit.script.html

[15] Nadav Rotem, Jordan Fix, Saleem Abdulrasool, Garret Catron, Summer Deng, Roman Dzhabarov, Nick Gibson, James Hegeman, Meghan Lele, Roman Levenstein ve diğerleri. 2018. Glow: Sinir ağları için grafik düşürücü derleyici teknikleri. arXiv ön baskısı arXiv:1805.00907 (2018).

[16] Nicolas Vasilache, Oleksandr Zinenko, Theodoros Theodoridis, Priya Goyal, Zachary DeVito, William S Moses, Sven Verdoolaege, Andrew Adams ve Albert Cohen. 2018. Tensör kavramaları: Çerçeveden bağımsız yüksek performanslı makine öğrenimi soyutlamaları. arXiv ön baskısı arXiv:1802.04730 (2018).

[17] PyTorch Yazarları. 2021. Performans Ayarlama Kılavuzu — PyTorch Öğreticiler 1.8.1+cu102 belgeleri. https: //pytorch.org/tutorials/recipes/recipes/tuning_guide.html

[18] Marat Dukhan, Yiming Wu Wu ve Hao Lu. 2020. QNNPACK: Optimize edilmiş mobil derin öğrenme için açık kaynak kitaplık – Facebook Mühendisliği. https://engineering.fb.com/2018/10/29/ml-applications/qnnpack

[19] XNNPACK Yazarları. 2021.XNNPACK. https://github.com/google/XNNPACK

[20] Apple Yazarları. 2021. Hızlandırın | Apple Geliştirici Belgeleri. https://developer.apple.com/documentation/ hızlandırın

[21] Android Geliştiricileri. 2021. Sinir Ağları API'si | Android NDK | Android Geliştiricileri. https://geliştirici.android. com/ndk/guides/neuralnetworks.

[22] Wikimedia projelerine katkıda bulunanlar. 2021. CUDA – Vikipedi. https://en.wikipedia.org/w/index.php?title=CUDA& oldid=1025500257.

[23] Alex Krizhevsky, Ilya Sutskever ve Geoffrey E Hinton. 2012. Derin evrişimli sinir ağları ile Imagenet sınıflandırması. Sinirsel bilgi işleme sistemlerindeki gelişmeler 25 (2012), 1097–1105.

[24] NVIDIA. 2020. Inside Volta: Dünyanın En Gelişmiş Veri Merkezi GPU'su | NVIDIA Geliştirici Blogu. https: //developer.nvidia.com/blog/inside-volta.

[25] Dusan Stosiç. 2020. Tensör Çekirdekleriyle Sinir Ağlarının Eğitimi – Dusan Stosic, NVIDIA. https://www.youtube. com/watch?v=jF4-_ZK_tyc

[26] HT Kung ve CE Leiserson. 1980. VLSI sistemlerine giriş. Mead, C.A_ ve Conway, L.,(Eds), Addison-Wesley, Reading, MA (1980), 271–292.

[27] Kaz Şato. 2021. TPU'ları derin öğrenme için hassas şekilde ayarlayan şey nedir? | Google Bulut Blogu. https://cloud.google.com/ blog/products/ai-machine-learning/what-makes-tpus-fine-tuned-for-deep-learning

İlgili:


Plato Ai. Web3 Yeniden Düşünüldü. Güçlendirilmiş Veri Zekası.
Erişmek için buraya tıklayın.

Kaynak: https://www.kdnuggets.com/2021/07/high-performance-deep-learning-part5.html

spot_img

En Son İstihbarat

spot_img