Transformers documentation
Paralellik yöntemleri
Paralellik yöntemleri
Çoklu GPU kurulumları, tek bir GPU’ya sığmayacak kadar büyük modellerin belleğe sığdırılması ve eğitim hızlandırılması için etkilidir. Bu yaklaşım, iş yükünü GPU’lar arasında paralelleştirmeye dayanır. Veri paralelliği, tensör paralelliği, boru hattı paralelliği ve model paralelliği gibi çeşitli paralellik türleri vardır. Her paralellik türü, veri veya model olsun, iş yükünü farklı şekilde böler.
Bu kılavuz, çeşitli paralellik yöntemlerini, bunların birleştirilmesini ve kurulumunuz için uygun bir strateji seçmeyi ele alacaktır. Dağıtık eğitim hakkında daha fazla ayrıntı için Accelerate belgelerine başvurun.
Büyük dil modellerini ölçeklendirme konusunda kapsamlı bir rehber için, ölçekli eğitim için ayrıntılı stratejiler ve en iyi uygulamalar sunan Ultrascale Playbook dokümanına göz atın.
Ölçeklenebilirlik stratejisi
Model Memory Calculator aracını kullanarak bir modelin ne kadar bellek gerektirdiğini hesaplayın. Ardından, kurulumunuza göre bir strateji seçmek için aşağıdaki tabloya başvurun.
| kurulum | senaryo | strateji |
|---|---|---|
| tek düğüm/çoklu GPU | tek GPU'ya sığar | DistributedDataParallel veya ZeRO |
| tek bir GPU'ya sığmıyor | PipelineParallel, ZeRO veya TensorParallel | |
| en büyük model katmanı sığmıyor | TensorParallel veya ZeRO | |
| çok düğümlü/çok GPU'lu | düğümler arası hızlı bağlantı (NVLink veya NVSwitch) | ZeRO veya 3D paralellik (PipelineParallel, TensorParallel, DataParallel) |
| düğümler arası yavaş bağlantı | ZeRO veya 3D paralellik (PipelineParallel, TensorParallel, DataParallel) |
Veri paralelliği
Veri paralelliği, veriyi birden fazla GPU arasında eşit olarak dağıtır. Her GPU, modelin bir kopyasını barındırır ve verinin kendi payına düşen kısmını eşzamanlı olarak işler. İşlemin sonunda, her GPU'dan gelen sonuçlar senkronize edilir ve birleştirilir.
Veri paralelliği, verileri paralel olarak işleyerek eğitim süresini önemli ölçüde azaltır ve kullanılabilir GPU sayısına göre ölçeklenebilir. Ancak, her GPU'dan gelen sonuçları senkronize etmek ek bir maliyet getirebilir.
İki tür veri paralelliği vardır: DataParallel (DP) ve DistributedDataParallel (DDP).
DataParallel
DataParallel, birden çok GPU'ya sahip tek bir makinede dağıtık eğitimi destekler.
- Varsayılan GPU,
GPU 0, bir veri grubunu okur ve bunun bir alt grubunu diğer GPU'lara gönderir. - Güncel bir model,
GPU 0'dan diğer GPU'lara kopyalanır. - Her GPU üzerinde
forwardgeçişi gerçekleştirilir ve çıktıları, kaybın hesaplanması içinGPU 0'a gönderilir. - Kayıp,
backwardgeçişi içinGPU 0'dan diğer GPU'lara dağıtılır. - Her GPU'dan gelen gradyanlar
GPU 0'a geri gönderilir ve ortalaması alınır.
DistributedDataParallel
DistributedDataParallel, birden fazla GPU ile birden fazla makinede dağıtık eğitim destekler.
- Ana süreç, modeli varsayılan GPU olan
GPU 0'dan her GPU'ya kopyalar. - Her GPU, doğrudan bir mini veri grubunu işler.
- Yerel gradyanlar,
backwardgeçişi sırasında tüm GPU'lar arasında ortalama alınır.
DDP önerilir çünkü GPU'lar arasındaki iletişim yükünü azaltır, her GPU'yu verimli bir şekilde kullanır ve birden fazla makineye ölçeklenebilir.
ZeRO veri paralelliği
Zero Redundancy Optimizer, bellek açısından daha verimli bir veri paralelliği türüdür. Parametreleri, gradyanları ve optimizör durumlarını veri paralel süreçler arasında bölerek bellek kullanımını azaltır ve bellek verimliliğini önemli ölçüde artırır. ZeRO'nun üç aşaması vardır:
- Stage 1, optimizör durumlarını böler
- Stage 2, optimizör ve gradyan durumlarını böler
- Stage 3, optimizatörü, gradyanları ve parametreleri böler

Model paralelliği
Model paralelliği, bir modeli birden çok GPU arasında dağıtır. Bir modeli bölmek için birkaç yöntem vardır, ancak tipik yöntem, model katmanlarını GPU'lar arasında dağıtır. forward geçişinde, ilk GPU bir veri grubunu işler ve bunu bir sonraki GPU'daki bir sonraki katman grubuna iletir. backward geçişinde ise veri, son katmandan ilk katmana doğru geri gönderilir.
Model paralelliği, tek bir GPU'nun belleğine sığmayacak kadar büyük modelleri eğitmek için faydalı bir stratejidir. Ancak, bir anda yalnızca bir GPU aktif olduğu için GPU kullanımı dengesizdir. GPU'lar arasında sonuçların aktarılması ayrıca iletişim yükü ekler ve darboğaz oluşturabilir.
Hattı paralelleştirme
Pipeline paralelliği, kavramsal olarak model paralelliğine çok benzer; ancak boşta geçen GPU süresini azalttığı için daha verimlidir. Her bir GPU'nun bir veri grubunu işlemeyi bitirmesini beklemek yerine, pipeline paralelliği micro-batch (mikro gruplar) oluşturur. Bir micro-batch tamamlandığı anda bir sonraki GPU'ya iletilir. Bu sayede her GPU, diğer GPU'nun bir mini veri grubunu tamamen işlemesini beklemeden verinin bir kısmını eşzamanlı olarak işleyebilir.
Pipeline paralelliği, model paralelliğiyle aynı avantajları paylaşır; ancak GPU kullanımını optimize eder ve boşta kalma süresini azaltır. Bununla birlikte, modellerin nn.Sequential modülleri dizisi olarak yeniden yazılması gerekebileceğinden ve son forward geçişinin backward geçişinin tamamlanmasını beklemek zorunda kalmasından dolayı boşta kalma süresini tamamen ortadan kaldırmak mümkün olmadığından, pipeline paralelliği daha karmaşık olabilir.
Tensor paralelliği
Tensor paralelliği, büyük tensör hesaplamalarını birden çok GPU arasında dağıtır. Tensörler yatay veya dikey olarak dilimlenir ve her dilim ayrı bir GPU tarafından işlenir. Her GPU, kendi tensör dilimi üzerinde hesaplamalarını gerçekleştirir ve sonuçlar, nihai sonucu yeniden oluşturmak için sonunda senkronize edilir.
Tensor paralelliği, tek bir GPU'nun belleğine sığmayan büyük modellerin eğitiminde etkilidir. Her GPU'nun kendi tensör dilimini paralel olarak işleyebilmesi sayesinde daha hızlı ve verimlidir ve diğer paralelleştirme yöntemleriyle birleştirilebilir. Ancak diğer paralelleştirme yöntemlerinde olduğu gibi, tensor paralelliği GPU'lar arasında iletişim yükü ekler.
Çıktı için nasıl kullanılacağını öğrenmek için Tensor parallelism kılavuzuna başvurun.
Hibrit paralellik
Paralellik yöntemleri birleştirilerek daha büyük bellek tasarrufu sağlanabilir ve milyarlarca parametreye sahip modeller daha verimli bir şekilde eğitilebilir.
Veri paralelliği ve boru hattı paralelliği
Veri ve boru hattı paralelliği, veriyi GPU'lar arasında dağıtır ve boru hattı paralelliğini sağlamak için her mini partiyi mikro partilere böler.
Her veri paralel rank, iki GPU yerine yalnızca bir GPU varmış gibi işlemi ele alır; ancak GPU 0 ve 1, veri mikro-partilerini GPU 2 ve 3'e aktararak boşta kalma süresini azaltabilir.
Bu yaklaşım, boşta GPU kullanımını azaltarak paralel veri işleme sürecini optimize eder.

ZeRO veri paralelliği, boru hattı paralelliği ve model paralelliği (3B paralellik)
Veri, pipeline ve model paralelliği bir araya gelerek bellek ve hesaplama verimliliğini optimize etmek için 3D paralelliği oluşturur.
Bellek verimliliği, modelin GPU'lar arasında bölünmesi ve bir pipeline oluşturmak için aşamalara ayrılmasıyla sağlanır. Bu sayede GPU'lar, verinin mikro-partileri üzerinde paralel çalışarak modelin, optimizasyoncunun ve aktivasyonların bellek kullanımını azaltır.
Hesaplama verimliliği, her GPU'nun yalnızca modelin, optimizasyoncunun ve aktivasyonların bir dilimini depoladığı ZeRO veri paralelliği ile sağlanır. Bu, veri paralel düğümler arasında daha yüksek iletişim bant genişliğine olanak tanır çünkü iletişim diğer boru hattı aşamalarından bağımsız olarak veya onlarla paralel şekilde gerçekleşebilir.
Bu yaklaşım, trilyonlarca parametreye sahip son derece büyük modellere ölçeklenebilir.
