Pipeline Parallelism Nedir? Büyük Yapay Zekâ Modelleri Birden Fazla GPU’da Nasıl Çalışıyor?
Bu soruna yönelik önemli yaklaşımlardan biri Pipeline Parallelism (PP), yani boru hattı paralelliğidir. Bu yöntemde model, ardışık aşamalara ayrılarak farklı GPU’lara dağıtılır. Her GPU kendi bölümünü çalıştırır ve elde ettiği ara çıktıları sonraki aşamaya aktarır.
Ancak modeli farklı GPU’lara yerleştirmek, bütün cihazların sürekli verimli çalışmasını tek başına sağlamaz. Asıl paralellik, farklı veri parçalarının aynı anda farklı aşamalarda işlenmesiyle ortaya çıkar. Bu nedenle microbatch kullanımı, iş yükünün dengelenmesi ve hesaplamaların zamanlanması büyük önem taşır. www.deepspeed.ai
Pipeline Parallelism Nedir?
Pipeline Parallelism, bir yapay zekâ modelinin ardışık bölümlerini farklı hesaplama cihazlarına dağıtan bir model paralelliği yöntemidir.
Transformer tabanlı büyük dil modellerinde bu bölümler genellikle katman gruplarından oluşur. Modelin ilk katmanları bir GPU’da, orta katmanları başka GPU’larda, son katmanları ise son GPU’da çalıştırılabilir.
Örneğin 32 Transformer katmanına sahip varsayımsal bir model, dört GPU arasında şu şekilde bölünebilir:
| GPU | Modelin yerleştirilen bölümü |
|---|---|
| GPU 1 | Giriş embedding’i ve 1–8. Transformer katmanları |
| GPU 2 | 9–16. Transformer katmanları |
| GPU 3 | 17–24. Transformer katmanları |
| GPU 4 | 25–32. Transformer katmanları ve çıkış başlığı |
Bu dağılım açıklama amaçlıdır. Gerçek uygulamalarda her GPU’ya eşit sayıda katman vermek, eşit iş yükü oluşturmayabilir. Katmanların hesaplama süresi, bellek ihtiyacı ve giriş-çıkış bileşenlerinin maliyeti birlikte değerlendirilir.
Aşamalar arasında aktarılan bilgiler de genellikle okunabilir metin değildir. GPU’lar, aktivasyon adı verilen ara sayısal temsilleri birbirine iletir.
Pipeline Parallelism Nasıl Çalışır?
İleri geçiş sırasında giriş verisi modelin ilk aşamasında işlenir. Oluşan aktivasyonlar ikinci aşamaya aktarılır ve bu işlem son aşamaya kadar devam eder. Son aşama, modelin nihai çıktısını oluşturur.
Tek bir veri parçası açısından bakıldığında hesaplama hâlâ sıraya bağlıdır. İkinci GPU, ilgili veriyi işleyebilmek için ilk GPU’nun çıktısını bekler. Üçüncü GPU da ikinci GPU’nun hesaplamasına ihtiyaç duyar.
Bu nedenle yalnızca tek bir veri parçasını GPU’lar arasında dolaştırmak, yüksek paralel kullanım sağlamaz. Bir GPU çalışırken diğerleri bekleyebilir.
Boru hattı paralelliğinde bu sorun, birden fazla küçük veri parçasının sisteme art arda yerleştirilmesiyle azaltılır. İlk GPU yeni parçayı işlerken ikinci GPU önceki parçanın hesaplamasını sürdürebilir. Böylece farklı GPU’lar aynı anda farklı işler yapar.
Microbatch Nedir ve Neden Önemlidir?
Microbatch, daha büyük bir veri grubunun küçük alt gruplara ayrılmasıyla elde edilen parçadır.
Örneğin bir eğitim batch’i sekiz microbatch’e bölünebilir. İlk microbatch ikinci GPU’ya geçtiğinde birinci GPU ikinci microbatch üzerinde çalışmaya başlayabilir. İlk parça üçüncü GPU’ya ulaştığında ikinci GPU ikinci parçayı, birinci GPU ise üçüncü parçayı işleyebilir.
Aşağıdaki tablo, üç aşamalı bir sistemde dört microbatch’in yalnızca ileri geçişini gösteren basitleştirilmiş bir örnektir:
| Zaman adımı | GPU 1 | GPU 2 | GPU 3 |
|---|---|---|---|
| 1 | Microbatch 1 | Bekliyor | Bekliyor |
| 2 | Microbatch 2 | Microbatch 1 | Bekliyor |
| 3 | Microbatch 3 | Microbatch 2 | Microbatch 1 |
| 4 | Microbatch 4 | Microbatch 3 | Microbatch 2 |
| 5 | Bekliyor | Microbatch 4 | Microbatch 3 |
| 6 | Bekliyor | Bekliyor | Microbatch 4 |
Bu örnekte bütün aşamaların aynı sürede tamamlandığı ve veri aktarımının ek gecikme oluşturmadığı varsayılmıştır.
GPipe yaklaşımı, eğitim batch’lerini microbatch’lere bölerek farklı model aşamalarının eş zamanlı çalışmasını sağlar. Bu düzen, büyük modellerin birden fazla hızlandırıcı üzerinde eğitilmesini mümkün kılan temel yaklaşımlardan biridir. arxiv.org
Eğitim Sırasında Geriye Yayılım Nasıl Yapılır?
Bir yapay zekâ modelinin eğitimi yalnızca çıktı üretmekten oluşmaz. Üretilen çıktı hedefle karşılaştırılır, hata hesaplanır ve model parametreleri bu hataya göre güncellenir.
Geriye yayılım (backpropagation) sırasında gradyan bilgisi, ileri geçişin ters yönünde aşamalar arasında iletilir. Her GPU, kendi model bölümüne ait parametrelerin gradyanlarını hesaplar.
Microbatch’lerden elde edilen gradyanlar biriktirilebilir ve ardından optimizasyon adımı uygulanabilir. İleri ve geri hesaplamaların hangi sırayla yürütüleceğini ise kullanılan çalışma takvimi belirler. www.deepspeed.ai
Pipeline Bubble Nedir?
Pipeline bubble, boru hattındaki bazı aşamaların gerekli veri veya gradyan henüz ulaşmadığı için boşta kaldığı zaman aralıklarını ifade eder.
Örneğin sistem çalışmaya başladığında ilk GPU hesaplama yaparken sonraki GPU’lar veri bekler. İşlem tamamlanmaya yaklaştığında ise ilk GPU’lar işlerini bitirmiş olabilir; son GPU’lar kalan parçaları işlemeye devam eder.
Boru hattının dolması ve boşalması sırasında oluşan bu beklemeler, toplam verimliliği azaltır.
Microbatch sayısının artırılması, uygun koşullarda boşta geçen sürenin toplam çalışma içindeki payını düşürebilir. Ancak çok küçük microbatch’ler, GPU’nun hesaplama kapasitesini verimsiz kullanabilir ve iletişim maliyetlerini artırabilir.
Bu nedenle amaç yalnızca microbatch sayısını yükseltmek değil, donanım ve model için uygun dengeyi bulmaktır.
Pipeline Schedule Nedir?
Pipeline schedule, her aşamanın hangi microbatch üzerinde, ne zaman ileri veya geri hesaplama yapacağını belirleyen çalışma takvimidir.
Aynı model bölünmesi, farklı takvimlerle farklı bellek ve performans sonuçları verebilir.
GPipe Takvimi
GPipe tarzı takvimde önce microbatch’lerin ileri geçişleri, ardından geri geçişleri yürütülür. Bu düzen, hesaplamaların sırasını anlaşılır biçimde organize eder.
1F1B Takvimi
1F1B, “One Forward, One Backward” ifadesinin kısaltmasıdır. Başlangıç aşamasından sonra ileri ve geri hesaplamalar dönüşümlü yürütülür.
Uygun koşullarda bu yaklaşım, geri hesaplama için bellekte bekletilen aktivasyon miktarını azaltmaya yardımcı olabilir.
Interleaved Takvimler
Interleaved yaklaşımlarda bir GPU üzerinde birden fazla model aşaması bulunabilir. Bu aşamaların çalışması daha ayrıntılı bir takvimle düzenlenir.
PyTorch’un dağıtık pipeline araçları, GPipe, 1F1B ve Interleaved 1F1B gibi farklı takvimleri destekler. Dolayısıyla Pipeline Parallelism, tek bir hesaplama sırasından oluşan sabit bir yöntem değildir. docs.pytorch.org
Pipeline Parallelism ile Tensor Parallelism Arasındaki Fark
Pipeline Parallelism, modelin farklı aşamalarını GPU’lara dağıtır. Her GPU, kendisine atanan katman grubunu çalıştırır.
Tensor Parallelism ise aynı katmanın tensörlerini ve hesaplamalarını birden fazla GPU arasında böler. Örneğin büyük bir matris işleminin farklı parçaları ayrı GPU’larda hesaplanabilir.
İki yöntemin temel farkı, modelin hangi düzeyde bölündüğüdür:
| Özellik | Pipeline Parallelism | Tensor Parallelism |
|---|---|---|
| Bölünme düzeyi | Ardışık model aşamaları | Katman içindeki tensörler ve işlemler |
| GPU’ların görevi | Farklı model bölümlerini çalıştırmak | Aynı katmanın hesaplamalarını paylaşmak |
| İletişim | Aşama sınırlarında ara çıktı aktarımı | Bölünmüş işlemlere bağlı veri alışverişi |
| Temel zorluk | Beklemeler ve aşama dengesizliği | İletişim maliyeti ve hesaplama koordinasyonu |
Büyük ölçekli sistemlerde bu yöntemler birlikte kullanılabilir. Bir pipeline aşamasının kendi içindeki hesaplamaları da tensor paralelliğiyle birden fazla GPU’ya dağıtılabilir.
Data Parallelism ile Birlikte Kullanılabilir mi?
Data Parallelism, model kopyalarının farklı veri parçalarını işlemesine dayanır. Eğitim sırasında bu kopyaların hesapladığı gradyanlar birleştirilir.
Standart veri paralelliğinde modelin bir kopyasının her GPU’ya sığması gerekir. Model durumlarını ayrıca parçalayan yaklaşımlar, bu bellek düzenini değiştirebilir.
Büyük model eğitiminde pipeline, tensor ve data paralelliği birlikte kullanılabilir. Bu birleşim sıklıkla üç boyutlu paralellik olarak adlandırılır.
Megatron-LM araştırması, bu üç yaklaşımın farklı birleşimlerini ve dağıtık eğitimde oluşturdukları performans dengelerini inceler. Uygun yapılandırma; modelin büyüklüğüne, GPU sayısına ve bağlantı altyapısına göre değişir. arxiv.org
Pipeline Parallelism Bellek Tasarrufu Sağlar mı?
Pipeline Parallelism, modelin farklı bölümlerini dağıtarak GPU başına düşen bellek yükünü azaltabilir. Bu sayede tek GPU’ya sığmayan modeller çalıştırılabilir.
Ancak modelin toplam parametre sayısı azalmaz. Sistemin toplam bellek ihtiyacının da aynı oranda düşmesi garanti değildir.
Eğitim sırasında ağırlıkların yanında aktivasyonlar, gradyanlar, optimizasyon durumları ve haberleşme tamponları da bellekte bulunur. Bunların dağılımı, çalışma takvimine ve kullanılan diğer paralellik yöntemlerine bağlıdır.
Bu nedenle bir modeli dört GPU’ya bölmek, bütün bellek kalemlerinin her GPU’da tam dörtte bire düşeceği anlamına gelmez.
Çıkarımda Pipeline Parallelism Nasıl Kullanılır?
Pipeline Parallelism, çıkarım (inference) sırasında da modelin aşamalarını farklı GPU’lara yerleştirmek için kullanılabilir.
Ancak çıkarımda yalnızca toplam hesaplama kapasitesi önemli değildir. Kullanıcının ilk yanıtı ne kadar beklediği ve sonraki tokenların hangi hızla üretildiği de değerlendirilir.
Otoregresif dil modellerinde bir sonraki tokenın üretimi, önceki tokenın sonucuna bağlıdır. Bu nedenle tek bir kullanıcının tek isteği, bütün pipeline aşamalarını sürekli dolu tutmayabilir.
Birden fazla eş zamanlı istek bulunduğunda farklı aşamaların farklı istekleri işlemesi mümkün olabilir. Böylece toplam çıktı kapasitesi artabilir.
Daha fazla isteğin işlenebilmesi, tek bir isteğin yanıt süresinin aynı ölçüde kısalacağı anlamına gelmez. NVIDIA’nın çıkarım çalışmalarında da tensor ve pipeline paralelliği, gecikme ile toplam çıktı kapasitesi hedeflerine göre birlikte değerlendirilir. developer.nvidia.com
Pipeline Parallelism’in Avantajları
Daha Büyük Modellerin Çalıştırılması
Model ağırlıkları ve ilgili hesaplama yükleri farklı cihazlara dağıtılabilir. Böylece tek GPU’nun bellek sınırını aşan modeller için çalışma alanı oluşturulur.
GPU Başına Bellek Yükünün Azaltılması
Her cihaz modelin belirli bir bölümünü tuttuğundan, ağırlıkların tamamının tek GPU’ya yüklenmesi gerekmez.
Eş Zamanlı Hesaplama
Yeterli microbatch veya istek akışı bulunduğunda farklı aşamalar aynı anda farklı veri parçalarını işleyebilir.
Diğer Paralellik Yöntemleriyle Birleşebilme
Pipeline Parallelism, tensor ve data paralelliğiyle birlikte daha büyük dağıtık hesaplama düzenlerinin parçası olabilir.
Karşılaşılan Zorluklar
Dengesiz İş Yükü
Bir aşama diğerlerinden yavaşsa sonraki aşamalar veri bekleyebilir. Katman dağılımı yapılırken yalnızca katman sayısına bakmak yeterli değildir.
GPU’lar Arası İletişim
Aktivasyonların ve eğitim sırasında gradyanların aktarılması zaman alır. Bağlantıların bant genişliği ve gecikmesi, hesaplamanın ne kadar verimli ilerleyeceğini etkiler.
Microbatch Ayarları
Büyük microbatch’ler daha fazla bellek tüketebilir. Çok küçük microbatch’ler ise işlem maliyetlerini artırabilir. Uygun boyut, gerçek iş yükü üzerinde ölçülmelidir.
Yazılım Karmaşıklığı
Modeli bölmek, hesaplama sırasını düzenlemek ve cihazlar arasındaki veri akışını yönetmek ek mühendislik gerektirir.
PyTorch, DeepSpeed ve Megatron tabanlı altyapılar bu işlemler için araçlar sunar. PyTorch’un pipeline çalışma sistemi; microbatch bölme, zamanlama, iletişim ve gradyan aktarımı gibi görevleri yönetebilir. docs.pytorch.org
Daha Fazla GPU Her Zaman Daha Fazla Hız Sağlar mı?
Hayır. GPU sayısı arttıkça model daha fazla aşamaya bölünebilir; ancak iletişim noktaları ve bekleme süreleri de artabilir.
Bir model zaten tek GPU’da verimli çalışıyorsa onu çok sayıda küçük aşamaya bölmek beklenen hızlanmayı sağlamayabilir. Buna karşılık bellek sınırları nedeniyle çalıştırılamayan büyük bir model için pipeline dağılımı gerekli olabilir.
Uygun yapılandırmayı belirlerken model büyüklüğü, bağlam uzunluğu, microbatch boyutu, ağ altyapısı ve hedef gecikme birlikte değerlendirilmelidir.
Sık Sorulan Sorular
Pipeline Parallelism nedir?
Bir modelin ardışık bölümlerini farklı GPU’lara dağıtan model paralelliği yöntemidir. Farklı veri parçalarının farklı aşamalarda eş zamanlı işlenmesiyle paralellik sağlanır.
Modeli GPU’lara bölmek tek başına yeterli mi?
Hayır. Verimli kullanım için dengeli aşamalar, uygun microbatch veya istek akışı ve doğru çalışma takvimi gerekir.
Pipeline bubble nedir?
Bazı aşamaların ihtiyaç duyduğu veri veya gradyan henüz ulaşmadığı için boşta kaldığı zaman aralıklarıdır.
Pipeline Parallelism modelin boyutunu küçültür mü?
Hayır. Modelin bölümlerini farklı cihazlara dağıtır. Parametre sayısını doğrudan azaltmaz.
Pipeline Parallelism modelin doğruluğunu artırır mı?
Doğrudan doğruluğu artıran bir öğrenme yöntemi değildir. Hesaplamaları dağıtır ve daha büyük modellerin veya farklı eğitim düzenlerinin kullanılmasını mümkün kılabilir.
Eğitim ve çıkarımda aynı şekilde mi kullanılır?
Temel model bölme yaklaşımı benzer olsa da çalışma takvimleri ve performans hedefleri farklıdır. Eğitimde geri hesaplama bulunurken çıkarımda istek akışı ve token üretim gecikmesi öne çıkar.
Kaynaklar
Bu makalenin hazırlanmasında DeepSpeed’in Pipeline Parallelism teknik rehberi, PyTorch’un Pipeline Parallelism dokümantasyonu ve Introduction to Distributed Pipeline Parallelism eğitim içeriği kullanılmıştır. Microbatch yaklaşımı için Yanping Huang ve diğerlerinin “GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism” çalışması; paralellik yöntemlerinin birlikte kullanımı için Deepak Narayanan ve diğerlerinin “Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM” araştırması incelenmiştir. Çıkarım performansına ilişkin açıklamalarda NVIDIA Developer’ın “Boosting Llama 3.1 405B Throughput by Another 1.5x on NVIDIA H200 Tensor Core GPUs and NVLink Switch” teknik yazısından yararlanılmıştır.
Editör Notu
Bu içerik Bitcanlı tarafından bilgilendirme amacıyla hazırlanmıştır. Pipeline Parallelism’in bellek ve performans kazanımları; modele, donanıma, GPU bağlantılarına, microbatch ayarlarına ve çalışma takvimine göre değişir. Araştırmalarda veya üretici testlerinde bildirilen sonuçlar, ilgili deney koşullarıyla birlikte değerlendirilmelidir.