Büyük Dil Modellerini (LLM) ölçeklendirilmiş şekilde dağıtmak, model mimarisinden çok altındaki altyapıya bağlıdır. Organizasyonlar kavram kanıtından üretime geçtiğinde, darboğaz model boyutundan verimlilik ve gecikmeye kayar. Eğitim için yapılandırılmış bir sunucu nadiren çıktı için optimize edilmiştir. Bu yazıda, yüksek verimli LLM çıktısı için GPU kullanımını en üst düzeye çıkarmak için gereken kritik ölçümleri ve yapılandırmaları keşfediyoruz.
Metriklerinizi Tanımlayın: Verimlilik vs. Gecikme
Donanım seçmeden önce, "yüksek verimliliğin" belirli kullanım durumunuz için ne anlama geldiğini tanımlamalısınız. Birinci Token'a Zaman (TTFT) gecikmesi gerektiren bir sohbet botu mu, yoksa saniyedeki token sayısını (TPS) önceliklendiren otomatik içerik oluşturma hattı mı oluşturuyorsunuz?
Saf verimlilik için, hesaplama kullanımını en üst düzeye çıkarmalısınız. Bu genellikle istekleri dinamik olarak gruplandırmayı içerir. Ancak agresif gruplandırma, bireysel isteklerde gecikmeyi artırır. Amaç, GPU belleğinin aktif gruplar tarafından tamamen kullanıldığı ancak aşırı kuyruk gecikmelerine neden olmayan "tatlı nokta"yı bulmaktır.
Yazılım Yığını: Doğru Çıktı Motorunu Seçme
Varsayılan Hugging Face `transformers` kütüphanesi prototipleme için mükemmeldir, ancak sayfalı bellek yönetimi ve sürekli gruplandırma eksikliği nedeniyle üretim için verimsizdir. Yüksek verimlilik için vLLM veya TensorRT-LLM gibi özel motorları düşünün.
En önemli kazançlardan biri, geleneksel dikkat mekanizmalarında bulunan bellek parçalanması sorununu çözen PagedAttention kullanmaktan gelir. Bu, daha fazla diziyi GPU belleğine aynı anda yerleştirmenize olanak tanır ve doğrudan verimliliği artırır.
Donanım Seçimi ve NVLink Topolojileri
Kümedeki tüm GPU'lar eşit değildir. LLM çıktısında, bellek bant genişliği genellikle saf FLOPs'tan daha fazla sınırlayıcı faktördür. Tek bir GPU belleğini aşan modelleri (örneğin 70B parametre) çalıştırdığınızda, modeli birden fazla GPU'ya bölmeniz gerekir.
Ara bağlantı önemlidir. PCIe 4.0 üzerinden bağlanmış dört A100 GPU'ya sahip bir sunucu, tensör paralelliği sırasında iletişim yükünden muzdarip olabilir. Buna karşılık, NVLink veya NVSwitch (HGX platformu gibi) ile donatılmış sunucular, GPU'lar arasında bellek hızına yakın veri aktarımına olanak tanır. Ölçeklendirme, her zaman gecikme cezasını nicelendirmek için PCIe bağlantılı yapılandırmaları NVLink bağlantılı yapılandırmalarla karşılaştırmalıdır.
vLLM ile Pratik Ölçeklendirme
Sunucu yapılandırmanızı ölçmek için gerçek dünya trafiğini simüle eden araçları kullanın. Aşağıdaki Python betiği, `vLLM` kütüphanesini kullanarak bir modeli ölçerken hem gecikmeyi hem de verimliliği ölçmenin nasıl yapılacağını gösterir.
import vllm
from vllm import LLM, SamplingParams
# Modeli ve tokenizer'ı tanımlayın
model_name = "meta-llama/Llama-2-7b-chat-hf"
# Spekülatif kod çözme ve tensör paralelliği ile LLM'yi yapılandırın
llm = LLM(
model=model_name,
tensor_parallel_size=4, # GPU sayınıza göre ayarlayın
dtype="float16",
max_num_batched_tokens=8192,
max_num_seqs=256
)
# Örnek istemleri oluşturun
prompts = ["Hello, my name is", "The capital of France is"]
# Örnekleme parametrelerini tanımlayın
sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=100)
# Ölçeklendirmeyi çalıştırın
outputs = llm.generate(prompts, sampling_params)
# Sonuçları yazdırın
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated: {generated_text!r}")
Bu ölçümü çalıştırırken, GPU kullanımını `nvidia-smi` veya `nvtop` kullanarak izleyin. %90'ın üzerinde sürekli kullanım görmelisiniz. Kullanım düşükse, darboğaz büyük olasılıkla GPU kendisi değil, I/O (istemleri diskten yükleme) veya CPU sınırlı tokenizasyondur.
Sonuç
LLM çıktısı için GPU sunucu yapılandırmalarının ölçeklendirilmesi iteratif bir süreçtir. vLLM gibi optimize edilmiş bir çıktı motoru seçerek başlayın, ardından bellek bant genişliği veya ara bağlantı gecikmesindeki darboğazları belirlemek için donanımınızı aşırı yük testiyle çalıştırın. Donanım topolojinizi verimlilik gereksinimlerinize uyumlu hale getirerek, yüksek performans korurken çıktı maliyetlerini önemli ölçüde azaltabilirsiniz.