Büyük Sinir Ağlarını Eğitim Teknikleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Büyük Sinir Ağlarını Eğitim Teknikleri

Büyük Sinir Ağlarını Eğitim Teknikleri

Büyük sinir ağları, yapay zekadaki son gelişmelerin çoğunun merkezinde yer alıyor, ancak bunların eğitimi, tek bir senkronize hesaplama gerçekleştirmek için bir GPU kümesinin düzenlenmesini gerektiren zorlu bir mühendislik ve araştırma sorunudur. Küme ve model boyutları büyüdükçe, makine öğrenimi uygulayıcıları birçok GPU üzerinde model eğitimini paralelleştirmek için artan çeşitlilikte teknikler geliştirdiler. İlk bakışta, bu paralellik tekniklerini anlamak göz korkutucu görünebilir, ancak hesaplamanın yapısı hakkında yalnızca birkaç varsayımla bu teknikler çok daha net hale gelir; bu noktada, bir ağ gibi, A'dan B'ye opak bitlerin etrafında mekik dokuyorsunuz. Paketlerin etrafında mekik değiştir.

Veri Paralelliği

Büyük Sinir Ağlarını Eğitim Teknikleri

Boru Hattı Paralelliği

Büyük Sinir Ağlarını Eğitim Teknikleri

Tensör Paralelliği

Büyük Sinir Ağlarını Eğitim Teknikleri

Uzman Paralellik

Büyük Sinir Ağlarını Eğitim Teknikleri

Veri Paralelliği

Büyük Sinir Ağlarını Eğitim Teknikleri

Boru Hattı Paralelliği

Büyük Sinir Ağlarını Eğitim Teknikleri

Tensör Paralelliği

Büyük Sinir Ağlarını Eğitim Teknikleri

Uzman Paralellik

Büyük Sinir Ağlarını Eğitim Teknikleri

Üç katmanlı bir model üzerinde çeşitli paralellik stratejilerinin bir örneği. Her renk bir katmanı ifade eder ve kesikli çizgiler farklı GPU'ları ayırır.

Paralellik Yok

Bir sinir ağını eğitmek yinelenen bir süreçtir. Her yinelemede, bir modelin ileri doğru geçişini yaparız. katmanları Bir veri kümesindeki her eğitim örneği için bir çıktı hesaplamak. Sonra başka bir geçiş devam ediyor geriye katmanlar boyunca her parametrenin nihai çıktıyı ne kadar etkilediğini hesaplayarak yayar. eğim Her parametreye göre. Toplu iş için ortalama gradyan, parametreler ve parametre başına bazı optimizasyon durumları, aşağıdaki gibi bir optimizasyon algoritmasına iletilir: Adem, bir sonraki yinelemenin parametrelerini (verilerinizde biraz daha iyi performansa sahip olması gerekir) ve parametre başına yeni optimizasyon durumunu hesaplar. Eğitim, veri grupları üzerinde tekrarlandıkça model, giderek daha doğru çıktılar üretecek şekilde gelişir.

Çeşitli paralellik teknikleri bu eğitim sürecini aşağıdakiler dahil farklı boyutlara böler:

  • Veri paralelliği: Grubun farklı alt kümelerini farklı GPU'larda çalıştırın;
  • İşlem hattı paralelliği—modelin farklı katmanlarını farklı GPU'larda çalıştırın;
  • Tensör paralelliği—matris çarpımı gibi tek bir işlemin matematiğini GPU'lara bölmek;
  • Uzmanların Karışımı: Her örneği, her katmanın yalnızca bir kısmıyla işleyin.

(Bu yazıda, sinir ağlarınızı eğitmek için GPU'ları kullandığınızı varsayacağız, ancak aynı fikirler diğerlerini kullananlar için de geçerlidir. sinir ağı hızlandırıcı.)

Veri Paralelliği

Veri Paralel eğitim, aynı parametrelerin birden fazla GPU'ya (genellikle "işçiler" olarak adlandırılır) kopyalanması ve her birine aynı anda işlenecek farklı örnekler atanması anlamına gelir. Veri paralelliği tek başına modelinizin tek bir GPU'nun belleğine sığmasını gerektirir, ancak parametrelerinizin birçok kopya kopyasını depolama pahasına birçok GPU'nun hesaplamasını kullanmanıza olanak tanır. Bununla birlikte, kullanımlar arasında parametreleri geçici olarak CPU belleğine boşaltmak gibi GPU'nuzun kullanabileceği etkili RAM'i artırmaya yönelik stratejiler vardır.

Her veri paralel çalışanı, parametrelerin kopyasını güncelledikçe, her bir çalışanın benzer parametrelere sahip olmaya devam etmesini sağlamak için koordinasyon sağlamaları gerekir. En basit yaklaşım, çalışanlar arasındaki iletişimin engellenmesini sağlamaktır: (1) her çalışanın eğimini bağımsız olarak hesaplamak; (2) işçiler arasındaki eğimlerin ortalamasını alın; ve (3) her çalışan için aynı yeni parametreleri bağımsız olarak hesaplamak. Adım (2), eğitim veriminize zarar verebilecek oldukça fazla verinin (çalışan sayısı çarpı parametrelerinizin büyüklüğüyle orantılı) aktarılmasını gerektiren bir engelleme ortalamasıdır. Çeşitli var asenkron senkronizasyon şemaları bu yükü ortadan kaldırmak için, ancak öğrenme verimliliğine zarar veriyorlar; pratikte insanlar genellikle eşzamanlı yaklaşıma bağlı kalıyor.

Boru Hattı Paralelliği

İle paralel boru hattı Eğitimde, modelin sıralı parçalarını GPU'lar arasında paylaştırıyoruz. Her GPU, parametrelerin yalnızca bir kısmını tutar ve bu nedenle aynı model, GPU başına orantılı olarak daha az bellek tüketir.

Büyük bir modeli ardışık katmanlara bölmek kolaydır. Bununla birlikte, katmanların girişleri ve çıkışları arasında sıralı bir bağımlılık vardır, bu nedenle basit bir uygulama, bir çalışanın önceki makineden gelen çıkışların giriş olarak kullanılmasını beklerken büyük miktarda boşta kalma süresine yol açabilir. Bu bekleme süresi parçaları "baloncuklar" olarak bilinir ve boşta kalan makinelerin yapabileceği hesaplamaları boşa harcar.

Büyük Sinir Ağlarını Eğitim Teknikleri ileri
Büyük Sinir Ağlarını Eğitim Teknikleri Geriye
Büyük Sinir Ağlarını Eğitim Teknikleri Gradyan güncellemesi
Büyük Sinir Ağlarını Eğitim Teknikleri boş
Büyük Sinir Ağlarını Eğitim Teknikleri

Modelin dikey olarak katmanlara göre 4 bölüme ayrıldığı saf bir boru hattı paralellik kurulumunun çizimi. Çalışan 1, ağın ilk katmanının (girişe en yakın) model parametrelerini barındırırken, çalışan 4, katman 4'ü (çıkışa en yakın olan) barındırır. “F”, “B” ve “U” sırasıyla ileri, geri ve güncelleme işlemlerini temsil eder. Abonelikler, bir işlemin hangi çalışan üzerinde çalıştığını gösterir. Sıralı bağımlılık nedeniyle veriler aynı anda bir çalışan tarafından işlenir ve bu da büyük boş zaman "balonlarına" yol açar.

Veri paralelliğinden elde edilen fikirleri, her çalışanın aynı anda yalnızca veri öğelerinin bir alt kümesini işlemesini sağlayarak balonun maliyetini azaltmak için yeniden kullanabiliriz, bu da yeni hesaplamayı bekleme süresiyle akıllıca örtüştürmemize olanak tanır. Temel fikir, bir partiyi birden fazla mikro partiye bölmektir; her bir mikro partinin işlenmesi orantılı olarak daha hızlı olmalıdır ve her çalışan bir sonraki mikro parti üzerinde mümkün olan en kısa sürede çalışmaya başlar, böylece boru hattının yürütülmesi hızlandırılır. Yeterli mikropartiler ile işçiler çoğu zaman adımın başında ve sonunda minimum kabarcıkla kullanılabilir. Mikro seriler genelinde gradyanların ortalaması alınır ve parametrelerdeki güncellemeler yalnızca tüm mikro seriler tamamlandıktan sonra gerçekleşir.

Modelin bölündüğü işçi sayısı genel olarak şu şekilde bilinir: boru hattı derinliği.

İleri geçiş sırasında, çalışanların yalnızca katman yığınlarının çıktısını (aktivasyon adı verilen) bir sonraki çalışana göndermeleri gerekir; geri geçiş sırasında yalnızca bu aktivasyonlardaki değişimleri önceki çalışana gönderir. Bu geçişlerin nasıl planlanacağına ve mikro partiler arasındaki geçişlerin nasıl toplanacağına dair geniş bir tasarım alanı var. GPip Her bir çalışan prosesinin ardı ardına ileri ve geri geçiş yapmasını sağlar ve ardından birden fazla mikro partiden gelen eğimleri, sonunda eş zamanlı olarak birleştirir. Ulaşılması mümkün olmayan istek bunun yerine her çalışanın alternatif olarak ileri ve geri geçişleri işlemesini planlar.

Büyük Sinir Ağlarını Eğitim Teknikleri ileri
Büyük Sinir Ağlarını Eğitim Teknikleri Geriye
Büyük Sinir Ağlarını Eğitim Teknikleri Güncelleme
Büyük Sinir Ağlarını Eğitim Teknikleri boş
GPip

Büyük Sinir Ağlarını Eğitim Teknikleri

Ulaşılması mümkün olmayan istek

Büyük Sinir Ağlarını Eğitim Teknikleri

Parti başına 4 mikro parti kullanılarak GPipe ve PipeDream ardışık düzen şemalarının karşılaştırılması. 1-8 arası mikro gruplar ardışık iki veri grubuna karşılık gelir. Görselde “(sayı)” hangi mikrobatch üzerinde işlem yapıldığını, alt simge ise çalışan kimliğini göstermektedir. PipeDream'in bazı hesaplamaları eski parametrelerle gerçekleştirerek daha fazla verimlilik elde ettiğini unutmayın.

Tensör Paralelliği

Boru hattı paralelliği, bir modeli katmanlara göre "dikey" olarak böler. Belirli işlemleri bir katman içinde "yatay olarak" bölmek de mümkündür; buna genellikle katman adı verilir. Tensör Paralel eğitim. Birçok modern model için (örn. Trafo), hesaplama darboğazı, bir aktivasyon toplu matrisinin büyük bir ağırlık matrisiyle çarpılmasıdır. Matris çarpımı satır ve sütun çiftleri arasındaki nokta çarpımlar olarak düşünülebilir; farklı GPU'larda bağımsız nokta çarpımlarını hesaplamak veya her nokta çarpımın parçalarını farklı GPU'larda hesaplamak ve sonuçları özetlemek mümkündür. Her iki stratejiyle de ağırlık matrisini eşit boyutlu "parçalara" bölebilir, her parçayı farklı bir GPU'da barındırabilir ve bu parçayı, daha sonra sonuçları birleştirmek için iletişim kurmadan önce genel matris ürününün ilgili kısmını hesaplamak için kullanabiliriz.

Bir örnek megatron-LMTransformer'ın kendine dikkat ve MLP katmanları içindeki matris çarpımlarını paralelleştiren. PTD-P tensör, veri ve boru hattı paralelliğini kullanır; ardışık düzen programı, her cihaza ardışık olmayan birden fazla katman atar ve böylece daha fazla ağ iletişimi pahasına kabarcık yükünü azaltır.

Bazen ağa girdi, çapraz iletişime göre yüksek derecede paralel hesaplamayla bir boyut boyunca paralelleştirilebilir. Sıra paralelliği bir giriş dizisinin zaman içinde birden fazla alt örneğe bölündüğü ve hesaplamanın daha ayrıntılı boyutlu örneklerle ilerlemesine izin vererek en yüksek bellek tüketimini orantılı olarak azalttığı böyle bir fikirdir.

Uzmanlar Karması (MEB)

İle Uzmanlar Karması (MEB) Yaklaşımda, herhangi bir girdinin çıktısını hesaplamak için ağın yalnızca bir kısmı kullanılır. Örnek bir yaklaşım, birçok ağırlık setine sahip olmaktır ve ağ, çıkarım zamanında bir geçit mekanizması aracılığıyla hangi setin kullanılacağını seçebilir. Bu, hesaplama maliyetini artırmadan çok daha fazla parametreye olanak tanır. Ağın her uzmana özel hesaplama ve beceriler atamayı öğreneceği umuduyla her bir ağırlık kümesine "uzmanlar" adı verilir. Farklı GPU'larda farklı uzmanlar barındırılabilir, bu da bir model için kullanılan GPU sayısını artırmanın net bir yolunu sağlar.

Büyük Sinir Ağlarını Eğitim Teknikleri

Uzmanlar karışımı (MEB) katmanının çizimi. Sadece 2 tanesi n uzmanlar geçit ağı tarafından seçilir. (Resim şuradan uyarlanmıştır: Shazeer ve diğerleri, 2017)

GShard Yalnızca MoE katmanlarının birden fazla TPU cihazına bölündüğü ve diğer katmanların tamamen kopyalandığı bir şema ile bir MoE Transformatörünü 600 milyar parametreye kadar ölçeklendirir. Anahtar Transformatörü Bir girdiyi tek bir uzmana yönlendirerek model boyutunu trilyonlarca parametreye daha yüksek seyreklikle ölçeklendirir.

Diğer Bellek Tasarruflu Tasarımlar

Gittikçe büyüyen sinir ağlarının eğitimini daha kolay takip edilebilir hale getirmek için birçok başka hesaplama stratejisi vardır. Örneğin:

  • Gradyanı hesaplamak için, çok fazla cihaz RAM'i tüketebilecek orijinal etkinleştirmeleri kaydetmiş olmanız gerekir. checkpointing (aktivasyon yeniden hesaplaması olarak da bilinir) herhangi bir aktivasyon alt kümesini saklar ve ara olanları geri geçiş sırasında tam zamanında yeniden hesaplar. Bu, en fazla bir ek tam ileri geçişin hesaplama maliyetiyle çok fazla bellek tasarrufu sağlar. Ayrıca bilgi işlem ve bellek maliyeti arasında sürekli olarak değiş tokuş yapılabilir. seçici aktivasyonun yeniden hesaplanmasıdepolaması nispeten daha pahalı ancak hesaplaması daha ucuz olan aktivasyonların alt kümelerini kontrol noktasıdır.

  • Karma Hassasiyet Eğitimi daha düşük hassasiyetli sayılar kullanan modelleri eğitmektir (en yaygın olarak FP16). Modern hızlandırıcılar daha düşük hassasiyetli sayılarla çok daha yüksek FLOP sayılarına ulaşabilir ve ayrıca cihazın RAM'inden de tasarruf edersiniz. Uygun bakım ile ortaya çıkan model neredeyse hiç doğruluk kaybetmez.

  • Boşaltma kullanılmayan verileri geçici olarak CPU'ya veya farklı cihazlar arasında boşaltmak ve daha sonra gerektiğinde tekrar okumaktır. Naif uygulamalar eğitimi çok yavaşlatacaktır, ancak karmaşık uygulamalar verileri önceden getirecek ve böylece cihazın hiçbir zaman beklemesine gerek kalmayacaktır. Bu fikrin bir uygulaması Sıfır Bu, parametreleri, degradeleri ve optimize edici durumlarını mevcut tüm donanımlara böler ve bunları gerektiğinde hayata geçirir.

  • Bellek Açısından Verimli Optimize Ediciler optimize edici tarafından tutulan çalışma durumunun bellek ayak izini azaltmak için önerilmiştirGibi Adafaktör.

  • Sıkıştırma ayrıca ara sonuçların ağda saklanması için de kullanılabilir. Örneğin, öz geri geçiş için kaydedilen aktivasyonları sıkıştırır; DALL · E degradeleri senkronize etmeden önce sıkıştırır.


OpenAI'de büyük modelleri temel altyapıdan gerçek dünya sorunlarına dağıtmaya kadar eğitiyor ve geliştiriyoruz. Bu gönderideki fikirleri (özellikle Ölçeklendirme ve Uygulamalı Araştırma ekiplerimizle ilgili) uygulamaya koymak istiyorsanız, biz buradayız. kiralama!


Teşekkürler
Taslaklara ilişkin geri bildirimleri için Nikolas Tezak, Sam Altman, Daniel Gackle, Ilya Sutskever ve Steven Adler'e teşekkür ederiz. İletişim ve tasarım için Justin Jay Wang, Bianca Martin ve Steve Dowling'e teşekkürler.

Zaman Damgası:

Den fazla OpenAI