Yapay Zeka

Tensor Parallelism Nedir? Büyük Yapay Zekâ Modelleri Birden Fazla GPU’da Nasıl Çalışıyor?

Çözüm, modelin yükünü birden fazla GPU’ya dağıtmaktır. Ancak bu dağıtımın farklı biçimleri vardır. Katmanları ayrı cihazlara yerleştirmek ile aynı katmanın hesaplamasını birkaç GPU arasında paylaşmak aynı yaklaşım değildir.

Tensor Parallelism (TP), ikinci yaklaşımı kullanır. Büyük ağırlık matrisleri ve bunlarla yapılan işlemler bölünür; GPU’lar aynı katmanın farklı parçalarını birlikte hesaplar.

Bu yöntem, tek GPU’ya sığmayan modellerin çalıştırılmasını kolaylaştırabilir. Performans avantajı ise hesaplama kazancının GPU’lar arasındaki iletişim maliyetini karşılayabilmesine bağlıdır.

Tensor Parallelism Nedir?

Tensor Parallelism, model içindeki belirli tensörlerin ve hesaplamaların birden fazla işlemci arasında bölündüğü bir model paralelliği yöntemidir.

Tensör, çok boyutlu sayısal veri yapısıdır. Model ağırlıkları, giriş temsilleri ve ara çıktılar tensörlerle ifade edilir. Matrisler de iki boyutlu tensörlerdir.

Büyük dil modellerinde Tensor Parallelism çoğunlukla şu hesaplamalarda kullanılır:

  • Dikkat mekanizmasının doğrusal dönüşümleri.
  • Beslemeli ağ katmanlarındaki büyük matris çarpımları.
  • Kelime gömme ve çıkış projeksiyonları gibi büyük ağırlık yapıları.

Her GPU, bölünen işlemin bir parçasını yürütür. Sonuçlar, sonraki hesaplamanın gerektirdiği biçimde birleştirilir veya dağıtılmış hâlde tutulur.

Modelin bütün bileşenlerinin eşit şekilde bölünmesi zorunlu değildir. Bazı ağırlıklar ve ara veriler GPU’lar arasında kopyalanabilir.

Aynı Katmanı Bölmek Ne Anlama Geliyor?

Bir doğrusal katmanın temel işlemi basitleştirilmiş biçimde şöyle yazılabilir:

\[ Y = XW \]

Burada:

  • X, katmana giren veridir.
  • W, ağırlık matrisidir.
  • Y, hesaplanan çıktıdır.

Ağırlık matrisi çok büyükse, tamamını tek GPU’da saklamak ve işlemek yerine parçalamak mümkündür.

Örneğin ağırlık matrisi çıkış boyutu boyunca iki parçaya ayrılabilir:

\[ W = [W_1 \; W_2] \]

Birinci GPU \(XW_1\), ikinci GPU \(XW_2\) işlemini hesaplar. Böylece her cihaz çıktının farklı bir bölümünü üretir.

Başka bir bölme düzeninde, GPU’lar sonucun farklı katkılarını hesaplar. Bu durumda parçaları yan yana koymak yerine toplamak gerekir.

Dolayısıyla Tensor Parallelism’de “sonuçlar birleştirilir” ifadesi tek bir işlemi anlatmaz. Kullanılan bölme düzenine göre sonuçlar bir araya getirilebilir, toplanabilir veya parçalı biçimde sonraki katmana aktarılabilir.

Transformer Katmanlarında Nasıl Kullanılıyor?

Transformer mimarisindeki büyük hesaplamalardan biri beslemeli ağ bölümüdür. Bu bölüm, basitleştirilmiş olarak iki doğrusal dönüşüm ve aralarında bir etkinleştirme işlemi içerir.

Uygun bir paralellik düzeninde:

  1. İlk ağırlık matrisi çıkış boyutu boyunca bölünür.
  2. Her GPU kendi ara çıktısını hesaplar.
  3. Etkinleştirme işlemi yerel parçalar üzerinde uygulanır.
  4. İkinci dönüşüm, bu parçalarla uyumlu biçimde bölünür.
  5. GPU’ların hesapladığı katkılar gerektiğinde toplanır.

Bu eşleştirme, her ara adımda bütün veriyi bütün GPU’lara göndermekten kaçınmayı sağlayabilir.

Dikkat mekanizmasında da başlıklar ve ilgili projeksiyonlar uygun koşullarda GPU’lar arasında dağıtılabilir. Ancak çoklu sorgulu veya gruplanmış sorgulu dikkat gibi tasarımlar, özellikle anahtar-değer başlıklarının bölünmesini etkiler.

Paralellik derecesi, model mimarisinden bağımsız seçilemez. Matris boyutları, başlık sayıları ve çıkarım motorunun desteklediği düzenler birlikte değerlendirilmelidir.

Bellek Kullanımı Gerçekten Ne Kadar Azalıyor?

Bölünebilen model ağırlıkları, Tensor Parallelism sayesinde GPU’lar arasında paylaşılır. Ancak bütün bellek kullanımının GPU sayısına bölüneceğini varsaymak doğru değildir.

Eğitim ve çıkarım sırasında farklı bellek kalemleri bulunur.

Bellek kalemi Tensor Parallelism açısından durum
Model ağırlıkları Desteklenen katmanlarda bölünebilir.
Ara aktivasyonlar Bir kısmı bölünürken bir kısmı kopyalanabilir.
Gradyanlar ve optimizer durumları Eğitim düzenine göre dağıtılır.
KV Cache Dikkat mimarisi ve uygulamaya göre bölünebilir veya bazı parçaları kopyalanabilir.
İletişim tamponları Ek bellek gerektirebilir.

Bu nedenle dört GPU kullanmak, toplam bellek ihtiyacını her cihaz için tam olarak dörtte bire indirmez.

Tensor Parallelism, modelin toplam ağırlık miktarını küçültmez; ağırlıkların cihaz başına düşen bölümünü azaltır. Kuantizasyon ise farklı bir teknik olarak ağırlıkların saklanma hassasiyetini düşürür.

GPU’lar Neden Sürekli Haberleşmek Zorunda?

Katmanın bir kısmı farklı GPU’da hesaplandığında, sonraki işlem için gerekli bilgi cihazlar arasında aktarılmalıdır.

Bu iletişimde farklı toplu işlemler kullanılabilir:

  • All-reduce: GPU’ların katkılarını birleştirip sonucu katılımcılara dağıtır.
  • All-gather: Dağıtılmış parçaları katılımcılarda bir araya getirir.
  • Reduce-scatter: Katkıları birleştirir ve sonucun farklı parçalarını GPU’lara dağıtır.

Hangi işlemin kullanıldığı, tensörlerin nasıl bölündüğüne bağlıdır.

İletişim her zaman hesaplamayla tamamen örtüştürülemez. Bir GPU, sonraki adıma geçmek için diğer cihazların sonucunu beklemek zorunda kalabilir. Bu bekleme süresi, paralel hesaplamadan sağlanan kazancı sınırlayabilir.

Daha Fazla GPU Her Zaman Daha Hızlı mı?

Hayır. GPU sayısını artırmak, her cihazın yapacağı hesaplamayı azaltabilir. Fakat aynı zamanda iletişim ve koordinasyon yükünü artırabilir.

Küçük bir model veya düşük iş yükü için hesaplama zaten kısa sürüyorsa, cihazlar arasındaki veri aktarımı baskın maliyet hâline gelebilir.

Büyük matris işlemlerinde ve uygun bağlantılarla çalışan sistemlerde ise hesaplama paylaşımı daha anlamlı kazanç sağlayabilir.

Bu nedenle Tensor Parallelism değerlendirilirken yalnızca “kaç GPU var?” sorusu yeterli değildir. Şunlar da önemlidir:

  • GPU’lar arasındaki bağlantının bant genişliği.
  • Bağlantı gecikmesi ve fiziksel topoloji.
  • Modelin katman boyutları.
  • Giriş ve çıktı uzunlukları.
  • Batch büyüklüğü ve eşzamanlı istek sayısı.
  • Hesaplama ile iletişimin ne kadar örtüştürülebildiği.

NVLink gibi bağlantılar bu nedenle önem taşır. Ancak belirli bir bağlantı teknolojisi kullanmak tek başına yüksek performans garantisi vermez.

Tensor, Pipeline ve Data Parallelism Arasındaki Fark

Bu üç yaklaşım farklı sorunları çözmek için kullanılabilir.

Yöntem Ne dağıtılır? Temel çalışma biçimi
Tensor Parallelism Aynı katmanın ağırlıkları ve hesaplamaları GPU’lar katmanın farklı parçalarını birlikte hesaplar.
Pipeline Parallelism Modelin katman grupları Veriler farklı aşamalardan sırayla geçer.
Data Parallelism Veri örnekleri veya kullanıcı istekleri Model kopyaları farklı girdileri işler.

Eğitimde klasik Data Parallelism, farklı veri parçalarında hesaplanan gradyanların eşitlenmesini gerektirir. Çıkarımda ise bağımsız model kopyaları farklı kullanıcı isteklerini karşılayabilir.

Çok büyük sistemlerde bu yöntemler birlikte kullanılabilir. Örneğin model katmanları pipeline aşamalarına ayrılırken, her aşamadaki büyük matrisler kendi Tensor Parallelism grubunda bölünebilir.

Eğitimde ve Çıkarımda Amaç Aynı mı?

Her iki durumda da büyük hesaplamaları ve bellek yükünü dağıtmak önemlidir. Ancak performans hedefleri farklılaşabilir.

Eğitimde, ileri geçişin yanında geri yayılım ve optimizer işlemleri de bulunur. Amaç, büyük modeli eğitebilmek ve eğitim verisini verimli işlemektir.

Çıkarımda, ilk token gecikmesi, cevap üretim hızı ve toplam servis kapasitesi öne çıkar. Bir isteğin daha hızlı tamamlanması ile aynı donanımda daha fazla isteğin karşılanması aynı ölçüt değildir.

Model tek GPU’ya sığıyorsa, bazı iş yüklerinde birden fazla bağımsız model kopyası çalıştırmak toplam servis kapasitesi açısından daha uygun olabilir. Model tek GPU’ya sığmıyorsa Tensor Parallelism, öncelikle çalıştırılabilirlik sorununu çözebilir.

Bir Sistemde Tensor Parallelism Seçerken Ne Ölçülmeli?

Doğru paralellik derecesi, gerçek iş yüküyle yapılan ölçümler üzerinden belirlenmelidir.

Yalnızca saniyedeki token sayısına bakmak eksik değerlendirme yaratabilir. İlk token süresi, toplam yanıt süresi, yoğun trafik altındaki gecikme ve GPU başına bellek kullanımı birlikte incelenmelidir.

Testlerde gerçek kullanımın giriş uzunlukları ve eşzamanlı istek sayıları korunmalıdır. Kısa bir deneme isteminde iyi görünen yapılandırma, uzun belgeler veya yüksek trafik altında aynı sonucu vermeyebilir.

Sık Sorulan Sorular

Aynı sunucuda iki GPU olması yeterli mi?

GPU sayısı tek başına yeterli değildir. Model ve yazılımın Tensor Parallelism desteği, cihazların belleği ve aralarındaki bağlantı performansı da önemlidir.

Farklı özellikteki GPU’lar birlikte kullanılabilir mi?

Bu, kullanılan yazılıma ve cihaz desteğine bağlıdır. Desteklense bile daha yavaş veya daha az bellekli cihaz, bütün grubun performansını sınırlayabilir.

Modelin cevap kalitesi değişir mi?

Amaç aynı model hesaplamasını dağıtmaktır. Ancak kayan nokta işlemlerinin sırası ve kullanılan hesaplama çekirdekleri nedeniyle küçük sayısal farklılıklar oluşabilir. Tokenların bit düzeyinde aynı çıkacağı varsayılmamalıdır.

Tensor Parallelism ile kuantizasyon birlikte kullanılabilir mi?

Uygun yazılım desteği varsa kullanılabilir. Kuantizasyon ağırlıkların bellek maliyetini azaltırken Tensor Parallelism yükü GPU’lar arasında dağıtır. Birlikte elde edilen sonuç ayrıca ölçülmelidir.

Kaynaklar: Mohammad Shoeybi ve diğerleri — Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism; Deepak Narayanan ve diğerleri — Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM.

Editör Notu

Bu içerik, Tensor Parallelism’in çalışma mantığını ve dağıtık yapay zekâ sistemlerindeki kullanım koşullarını ele alan bir araştırma ve değerlendirme yazısıdır. İçerikte yer alan değerlendirmeler editoryal yorum niteliğindedir. Bellek kullanımı ve performans; model mimarisine, paralellik derecesine, GPU bağlantılarına, hesaplama hassasiyetine ve iş yüküne göre değişebilir. GPU sayısının artırılması, yanıt süresinin veya toplam maliyetin aynı oranda azalacağını garanti etmez.