AI Infrastructure

Tek GPU'nun Ötesine Ölçekleme: Dağıtık Çıkarım Kılavuzu

Büyük Dil Modelleri (LLM'ler) boyut olarak büyüdükçe, bunları tek bir GPU'da dağıtmak giderek uygulanamaz hale geliyor. 175 milyar parametreli bir model, yalnızca ağırlıklar için FP16'da yaklaşık 350GB bellek gerektiriyor; bu da çoğu tüketici veya hatta orta segment profesyonel GPU kapasitesinin çok üzerinde. İşte dağıtık çıkarım devreye giriyor. Model katmanlarını ve parametrelerini birden fazla cihaz arasında bölerek, kabul edilebilir gecikmeyi korurken devasa modelleri üretim ortamlarında çalıştırma yeteneğini açığa çıkarabiliriz.

Neden Dağıtık Çıkarım?

Dağıtık çıkarımın temel sürücüleri bellek kısıtlamaları ve gecikme optimizasyonudur. Bir model tek bir cihazın belleğine sığmıyorsa iki seçeneğiniz var: onu kuantize etmek (bu kaliteyi düşürebilir) veya bölmek. Bölme (sharding) veya model paralelliği, hesaplama ve verilerin birden fazla GPU veya düğüm arasında dağıtılmasını içerir. Bu yaklaşım yalnızca bellek darboğazını çözmekle kalmaz, aynı zamanda bağlantı bant genişliği yeterli olduğunda, modelin birden fazla parçasının verileri eş zamanlı olarak işlemesine izin vererek verimliliği de artırabilir.

Temel Stratejiler: Tensör ve Veri Paralelliği

Koda dalmadan önce, çıkarımda kullanılan iki ana paralellik türünü anlamak önemlidir:

  1. Tensör Paralelliği (TP): Bireysel ağırlık matrislerini birden fazla GPU arasında böler. Bu, büyük dönüştürücü (transformer) katmanları için son derece etkilidir, ancak her katman ileri geçişinde iletişim maliyeti oluştuğu için yüksek bant genişliğine sahip bağlantılara (NVLink gibi) ihtiyaç duyar.
  2. İşlem Hattı Paralelliği (PP): Modeli aşamalara böler, her GPU belirli bir katman setini işler. Veriler bir aşamadan diğerine akar. Bu, daha yavaş ağlarda (InfiniBand gibi) daha verimlidir, ancak bazı GPU'ların veri beklerken boşta kaldığı "baloncuklar" (bubbles) ortaya çıkarır.

PyTorch ile Pratik Uygulama

NVIDIA'nın NeMo'su veya Hugging Face'in Accelerate'i gibi çerçeveler bu karmaşıklığın çoğunu soyutlasa da, hata ayıklama ve optimizasyon için düşük seviye mekanizmaları anlamak değerlidir. Aşağıda, tensör paralelliğinin doğrusal bir katmana nasıl uygulanabileceğine dair basitleştirilmiş kavramsal bir örnek verilmiştir. Gerçek dünya senaryolarında, deepspeed veya vllm gibi kütüphaneler bunu otomatik olarak yönetir.

import torch
import torch.distributed as dist

def tensor_parallel_linear(input_tensor, weight_shards, rank):
    """
    Tensör-paralel doğrusal bir katmanın tek bir rank'ın kısmını simüle eder.
    Gerçekte, sonuçları birleştirmek için all-reduce işlemleri gerektirirdi.
    """
    # Shard üzerindeki yerel hesaplama
    local_output = torch.matmul(input_tensor, weight_shards[rank])
    
    # İletişim bariyeri: Tüm rank'lar arasında azaltma (reduce)
    # Bu, TP performansının kritik darboğazıdır
    if dist.is_initialized():
        dist.all_reduce(local_output, op=dist.ReduceOp.SUM)
        
    return local_output

# Örnek kurulum (bağlam için sözde kod)
# 2 GPU varsayılıyor, rank 0 W[0]'ı, rank 1 W[1]'i tutuyor
# input_tensor = x
# final_output = tensor_parallel_linear(x, [W0, W1], rank)

Bağlantıları ve Ağları Optimize Etme

Dağıtık çıkarımın performansı, ağ gecikmesine ve bant genişliğine büyük ölçüde bağlıdır. Düğüm içi iletişim için (aynı sunucudaki GPU'lar), NVLink 900 GB/s hızlar sağlayarak Tensör Paralelliğini uygulanabilir kılar. Çoklu düğüm kurulumları için InfiniBand veya yüksek hızlı Ethernet gereklidir. Yaygın bir hata, iletişim maliyetini hafife almaktır; ağınız çok yavaşsa, Tensör Paralelliği, modelin tek bir, daha büyük bellek biriminde sıralı olarak çalıştırılmasından (mümkünse) aslında daha yavaş olacaktır.

Başlamak İçin Araçlar

Sıfırdan özel iletişim kodu yazmanıza gerek yok. İşte endüstri standardı araçlar:

  • vLLM: Toplu çıkarım ve bellek verimliliği için optimize edilir, tensör paralelliğini kutudan çıktığı gibi destekler.
  • DeepSpeed: Dağıtık eğitim ve çıkarım için kullanımı kolay API'ler sunan Microsoft'un çerçevesi.
  • Triton Inference Server: Sunum katmanını yönetir, istekleri farklı dağıtık arka uçlara yönlendirir.

Sonuç

Dağıtık çıkarım, artık yalnızca araştırma laboratuvarları için niş bir teknik değildir; üretimde en son LLM'leri dağıtmayı hedefleyen her kuruluş için bir gerekliliktir. Tensör ve işlem hattı paralelliği arasında stratejik seçimler yaparak ve yüksek performanslı ağlardan yararlanarak, yapay zeka altyapınızı herhangi bir boyuttaki modelleri işlemek için ölçeklendirebilirsiniz. Donanım evrildikçe ve bağlantı hızları arttıkça, gerçek zamanlı olarak sunulabilecek sınırlar genişlemeye devam edecektir.

Share: