Yapay Zeka
LLM Dağıtımını Optimize Etme: vLLM PagedAttention ve Verimli Yapay Zeka Hizmetinin Geleceği

Gerçek dünya uygulamalarına dağıtılan Büyük Dil Modelleri (LLM'ler), özellikle hesaplama kaynakları, gecikme süresi ve maliyet etkinliği açısından benzersiz zorluklar sunar. Bu kapsamlı kılavuzda, LLM hizmetlerinin kapsamını inceleyeceğiz ve özellikle de bu güçlü modelleri dağıtma ve onlarla etkileşim kurma şeklimizi yeniden şekillendiren bir çözüm olan vLLM'ye (Vektör Dil Modeli) odaklanacağız.
Büyük Dil Modellerini Sunmanın Zorlukları
Spesifik çözümlere dalmadan önce, LLM'yi karmaşık bir görev haline getiren temel zorlukları inceleyelim:
Hesaplamalı Kaynaklar
LLM'ler milyarlarca ila yüz milyarlarca arasında değişen muazzam parametre sayılarıyla ünlüdür. Örneğin, GPT-3 175 milyar parametreye sahipken, daha yeni modeller şöyle: GPT 4 daha fazlasına sahip olduğu tahmin ediliyor. Bu büyük boyut, çıkarım için önemli hesaplama gereksinimleri anlamına gelir.
Örnek:
Nispeten mütevazı düşünün Yüksek Lisans LLaMA-13B gibi 13 milyar parametreyle. Bu model bile şunları gerektirir:
– Sadece model parametrelerini saklamak için yaklaşık 26 GB bellek (16 bit hassasiyet varsayılarak)
– Aktivasyonlar, dikkat mekanizmaları ve ara hesaplamalar için ek bellek
– Gerçek zamanlı çıkarım için önemli GPU hesaplama gücü
Gecikme
Sohbet robotları veya gerçek zamanlı içerik oluşturma gibi birçok uygulamada, iyi bir kullanıcı deneyimi için düşük gecikme süresi çok önemlidir. Ancak yüksek lisansların karmaşıklığı, özellikle daha uzun diziler için önemli işlem sürelerine yol açabilir.
Örnek:
Yüksek Lisans tarafından desteklenen bir müşteri hizmetleri sohbet robotu hayal edin. Her yanıtın oluşturulması birkaç saniye sürerse, konuşma kullanıcılar için doğal olmayacak ve sinir bozucu olacaktır.
Ücret
Yüksek Lisans'ları uygun ölçekte çalıştırmak için gereken donanım son derece pahalı olabilir. Üst düzey GPU'lar veya TPU'lar sıklıkla gereklidir ve bu sistemlerin enerji tüketimi oldukça yüksektir.
Örnek:
Bir NVIDIA A100 GPU kümesini çalıştırmak (genellikle Yüksek Lisans çıkarımı için kullanılır), bulut bilişim ücretlerinde günde binlerce dolara mal olabilir.
LLM Hizmetine Geleneksel Yaklaşımlar
Daha gelişmiş çözümleri keşfetmeden önce, LLM'lere hizmet vermenin bazı geleneksel yaklaşımlarına kısaca göz atalım:
Sarılma Yüz Transformatörleri ile Basit Dağıtım
Hugging Face Transformers kütüphanesi LLM'leri dağıtmanın basit bir yolunu sağlar, ancak yüksek verimli sunum için optimize edilmemiştir.
Örnek kod:
from transformers import AutoModelForCausalLM, AutoTokenizer import torch model_name = "meta-llama/Llama-2-13b-hf" model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto") tokenizer = AutoTokenizer.from_pretrained(model_name) def generate_text(prompt, max_length=100): inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=max_length) return tokenizer.decode(outputs[0], skip_special_tokens=True) print(generate_text("The future of AI is"))
Bu yaklaşım işe yarıyor olsa da kaynakların verimsiz kullanımı ve hizmet sunumunda optimizasyon eksikliği nedeniyle yüksek trafikli uygulamalar için uygun değildir.
TorchServe veya Benzer Çerçeveleri Kullanma
TorchServe gibi çerçeveler, yük dengeleme ve model sürümleme gibi daha güçlü hizmet yetenekleri sunar. Ancak, büyük modeller için verimli bellek yönetimi gibi LLM hizmetinin kendine özgü zorluklarını hâlâ ele almıyorlar.
Yüksek Lisans Hizmetinde Bellek Yönetimini Anlamak
Etkin bellek yönetimi, gerekli kapsamlı hesaplama kaynakları nedeniyle büyük dil modellerine (LLM'ler) hizmet vermek için kritik öneme sahiptir. Aşağıdaki resimler, LLM performansını optimize etmenin ayrılmaz bir parçası olan bellek yönetiminin çeşitli yönlerini göstermektedir.
Bölümlenmiş ve Sayfalanmış Bellek
Bu iki diyagram, işletim sistemlerinde (OS) yaygın olarak kullanılan bölümlenmiş bellek ve sayfalanmış bellek yönetimi tekniklerini karşılaştırır.
- Parçalı Bellek: Bu teknik, belleği her biri farklı bir programa veya işleme karşılık gelen farklı bölümlere ayırır. Örneğin, bir LLM hizmet bağlamında, modelin tokenizasyon, yerleştirme ve dikkat mekanizmaları gibi çeşitli bileşenlerine farklı bölümler tahsis edilebilir. Her segment bağımsız olarak büyüyebilir veya küçülebilir; bu da esneklik sağlar ancak segmentler düzgün yönetilmezse potansiyel olarak parçalanmaya yol açabilir.
- Sayfalanmış Bellek: Burada bellek, fiziksel belleğe eşlenen sabit boyutlu sayfalara bölünür. Sayfalar gerektiğinde açılıp çıkarılabilir, bu da bellek kaynaklarının verimli kullanılmasına olanak tanır. LLM hizmetinde bu, model ağırlıklarının ve ara hesaplamaların depolanması için gereken büyük miktardaki belleğin yönetilmesi açısından çok önemli olabilir.
İşletim Sisteminde Bellek Yönetimi ve vLLM Karşılaştırması
Bu görüntü, geleneksel işletim sistemi bellek yönetimini vLLM'de kullanılan bellek yönetimi yaklaşımıyla karşılaştırıyor.
- İşletim Sistemi Bellek Yönetimi: Geleneksel işletim sistemlerinde işlemlere (örn. İşlem A ve İşlem B) fiziksel bellekte bellek sayfaları (Sayfa 0, Sayfa 1 vb.) tahsis edilir. Bu ayırma, işlemler talep ettikçe ve belleği serbest bıraktıkça zaman içinde parçalanmaya yol açabilir.
- vLLM Bellek Yönetimi: vLLM çerçevesi, belleği daha verimli bir şekilde yönetmek için bir Anahtar-Değer (KV) önbelleği kullanır. İstekler (örneğin, İstek A ve İstek B), KV önbelleğinin tahsis edilmiş bloklarıdır (KV Blok 0, KV Blok 1, vb.). Bu yaklaşım, parçalanmanın en aza indirilmesine yardımcı olur ve bellek kullanımını optimize ederek daha hızlı ve daha verimli model sunumuna olanak tanır.
Yüksek Lisansta Dikkat Mekanizması
Dikkat mekanizması, yüksek lisansta yaygın olarak kullanılan transformatör modellerinin temel bir bileşenidir. Bu şema dikkat formülünü ve bileşenlerini göstermektedir:
- Sorgu (S): Yeni bir jeton kod çözücü adımı veya modelin gördüğü son jeton.
- Anahtar (K): Modelin ilgilenmesi gereken önceki bağlam.
- Değer (V): Önceki bağlama göre ağırlıklı toplam.
Formül, sorgunun tuşlarla nokta çarpımını alarak, anahtar boyutun kareköküne göre ölçeklendirerek, softmax fonksiyonunu uygulayarak ve son olarak değerlerle nokta çarpımını alarak dikkat puanlarını hesaplar. Bu süreç, modelin her bir jetonu oluştururken girdi dizisinin ilgili bölümlerine odaklanmasını sağlar.
Sunum Performansı Karşılaştırması
Bu görüntü, farklı çerçeveler (HF, TGI ve vLLM) arasındaki hizmet veriminin bir karşılaştırmasını sunar. LLaMA modelleri farklı donanım kurulumlarında.
- LLaMA-13B, A100-40GB: vLLM, HuggingFace Transformers'tan (HF) 14 kat – 24 kat daha yüksek verim ve HuggingFace Metin Oluşturma Çıkarımından (TGI) 2.2 kat – 2.5 kat daha yüksek verim elde eder.
- LLaMA-7B, A10G: vLLM'nin hem HF hem de TGI'dan önemli ölçüde daha iyi performans göstermesiyle benzer eğilimler gözlenmektedir.
vLLM: Yeni Bir Yüksek Lisans Hizmet Mimarisi
vLLM tarafından geliştirilen UC Berkeley'deki araştırmacılar, LLM hizmet teknolojisinde önemli bir sıçramayı temsil ediyor. Temel özelliklerini ve yeniliklerini inceleyelim:
PagedDikkat
vLLM'nin merkezinde, işletim sistemlerindeki sanal bellek yönetiminden ilham alan yeni bir dikkat algoritması olan PagedAttention yer alır. İşte çalışma şekli:
- Anahtar-Değer (KV) Önbellek Bölümleme: PagedAttention, KV önbelleğinin tamamını bellekte bitişik olarak depolamak yerine onu sabit boyutlu bloklara böler.
- Bitişik Olmayan Depolama: Bu bloklar bellekte bitişik olmayan bir şekilde saklanabilir, böylece daha esnek bellek yönetimi sağlanır.
- Talep Üzerine Tahsis: Bloklar yalnızca ihtiyaç duyulduğunda tahsis edilir, böylece bellek israfı azalır.
- Verimli Paylaşım: Çoklu diziler blokları paylaşarak paralel örnekleme ve ışın arama gibi teknikler için optimizasyonlara olanak tanır.
İllüstrasyon:
"
Geleneksel KV Önbelleği:
[Jeton 1 KV][Jeton 2 KV][Jeton 3 KV]…[Jeton N KV]
(Bitişik hafıza tahsisi)
PagedAttention KV Önbelleği:
[Blok 1] -> Fiziksel Adres A
[Blok 2] -> Fiziksel Adres C
[Blok 3] -> Fiziksel Adres B
...
(Bitişik olmayan bellek tahsisi)
"
Bu yaklaşım, bellek parçalanmasını önemli ölçüde azaltır ve GPU belleğinin çok daha verimli kullanılmasına olanak tanır.
Sürekli Gruplama
vLLM, sabit boyutlu gruplar oluşturmayı beklemek yerine, istekleri geldikçe dinamik olarak işleyen sürekli toplu işlem uygular. Bu, daha düşük gecikme süresine ve daha yüksek aktarım hızına yol açar.
Örnek:
Gelen isteklerin bir akışını hayal edin:
"
Süre 0ms: A İsteği gelir
Süre 10 ms: İstek A'yı işlemeye başlayın
Süre 15ms: B isteğinin gelmesi
Süre 20 ms: İstek B'yi işlemeye başlayın (A'ya paralel olarak)
Süre 25ms: C isteğinin gelmesi
...
"
Sürekli toplu işlemle vLLM, her isteği önceden tanımlanmış gruplar halinde gruplandırmayı beklemek yerine hemen işlemeye başlayabilir.
Verimli Paralel Örnekleme
Her komut için birden fazla çıktı örneği gerektiren uygulamalar (örneğin, yaratıcı yazarlık asistanları) için vLLM'nin bellek paylaşım yetenekleri öne çıkar. KV önbelleğini paylaşılan önekler için yeniden kullanırken birden fazla çıktı üretebilir.
vLLM kullanan örnek kod:
from vllm import LLM, SamplingParams
llm = LLM(model="meta-llama/Llama-2-13b-hf")
prompts = ["The future of AI is"]
# Generate 3 samples per prompt
sampling_params = SamplingParams(n=3, temperature=0.8, max_tokens=100)
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
print(f"Prompt: {output.prompt}")
for i, out in enumerate(output.outputs):
print(f"Sample {i + 1}: {out.text}")
Bu kod, vLLM'nin optimizasyonlarından yararlanarak verilen komut için birden fazla örneği verimli bir şekilde üretir.
vLLM Performansının Karşılaştırılması
vLLM'nin etkisini gerçekten takdir edebilmek için bazı performans karşılaştırmalarına bakalım:
Verim Karşılaştırması
Sağlanan bilgilere göre vLLM, diğer hizmet çözümlerinden önemli ölçüde daha iyi performans gösteriyor:
– Hugging Face Transformers'a kıyasla 24 kata kadar daha yüksek verim
– Hugging Face Text Generation Inference'a (TGI) göre 2.2 ila 3.5 kat daha yüksek verim
İllüstrasyon:
"
Verim (Jeton/saniye)
|
| ****
| ****
| ****
| **** ****
| **** **** ****
| **** **** ****
|————————
HF TGI vLLM
"
Bellek Verimliliği
vLLM'nin PagedAttention'ı neredeyse optimum bellek kullanımıyla sonuçlanır:
– Geleneksel sistemlerdeki %4-60 ile karşılaştırıldığında yalnızca %80 civarında bellek israfı
– Bu verimlilik, daha büyük modellerin sunulmasına veya aynı donanımla daha fazla eşzamanlı talebin karşılanmasına olanak tanır
vLLM'ye Başlarken
vLLM'nin faydalarını keşfettiğimize göre, şimdi onu kurma ve projelerinizde kullanma sürecine geçelim.
6.1 Kurulumu
vLLM'yi yüklemek pip kullanarak basittir:
!pip install vllm
6.2 Çevrimdışı Çıkarım İçin Temel Kullanım
İşte çevrimdışı metin üretimi için vLLM kullanımına dair basit bir örnek:
from vllm import LLM, SamplingParams
# Initialize the model
llm = LLM(model="meta-llama/Llama-2-13b-hf")
# Prepare prompts
prompts = [
"Write a short poem about artificial intelligence:",
"Explain quantum computing in simple terms:"
]
# Set sampling parameters
sampling_params = SamplingParams(temperature=0.8, max_tokens=100)
# Generate responses
outputs = llm.generate(prompts, sampling_params)
# Print the results
for output in outputs:
print(f"Prompt: {output.prompt}")
print(f"Generated text: {output.outputs[0].text}\n")
Bu komut dosyası, bir modelin nasıl yükleneceğini, örnekleme parametrelerinin nasıl ayarlanacağını ve birden fazla bilgi istemi için nasıl metin oluşturulacağını gösterir.
6.3 vLLM Sunucusunun Kurulumu
Çevrimiçi hizmet için vLLM, OpenAI uyumlu bir API sunucusu sağlar. Kurulumu şu şekildedir:
1. Sunucuyu başlatın:
python -m vllm.entrypoints.openai.api_server --model meta-llama/Llama-2-13b-hf
2. Sunucuyu curl kullanarak sorgulayın:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Llama-2-13b-hf",
"prompt": "The benefits of artificial intelligence include:",
"max_tokens": 100,
"temperature": 0.7
}'
Bu kurulum, LLM'nizi OpenAI'nin API'siyle uyumlu bir arayüzle sunmanıza olanak tanır ve mevcut uygulamalara entegrasyonu kolaylaştırır.
vLLM'de İleri Konular
vLLM, LLM hizmetinde önemli iyileştirmeler sunarken, dikkate alınması gereken ek hususlar ve keşfedilecek ileri düzey konular vardır:
7.1 Model Niceleme
Özellikle sınırlı belleğe sahip donanımlarda daha verimli hizmet sunmak için nicemleme teknikleri kullanılabilir. vLLM şu anda nicemlemeyi desteklemese de, nicemlenmiş modellerle birlikte kullanılabilir:
from transformers import AutoModelForCausalLM, AutoTokenizer import torch # Load a quantized model model_name = "meta-llama/Llama-2-13b-hf" model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", load_in_8bit=True) tokenizer = AutoTokenizer.from_pretrained(model_name) # Use the quantized model with vLLM from vllm import LLM llm = LLM(model=model, tokenizer=tokenizer)
7.2 Dağıtılmış Çıkarım
Son derece büyük modeller veya yüksek trafikli uygulamalar için, birden fazla GPU veya makinede dağıtılmış çıkarım gerekebilir. vLLM bunu doğal olarak desteklemese de, Ray gibi çerçeveler kullanılarak dağıtılmış sistemlere entegre edilebilir:
import ray
from vllm import LLM
@ray.remote(num_gpus=1)
class DistributedLLM:
def __init__(self, model_name):
self.llm = LLM(model=model_name)
def generate(self, prompt, params):
return self.llm.generate(prompt, params)
# Initialize distributed LLMs
llm1 = DistributedLLM.remote("meta-llama/Llama-2-13b-hf")
llm2 = DistributedLLM.remote("meta-llama/Llama-2-13b-hf")
# Use them in parallel
result1 = llm1.generate.remote("Prompt 1", sampling_params)
result2 = llm2.generate.remote("Prompt 2", sampling_params)
# Retrieve results
print(ray.get([result1, result2]))
7.3 İzleme ve Gözlemlenebilirlik
Üretimde LLM'lere hizmet verirken izleme çok önemlidir. vLLM yerleşik izleme sağlamasa da, Prometheus ve Grafana gibi araçlarla entegre edebilirsiniz:
from prometheus_client import start_http_server, Summary
from vllm import LLM
# Define metrics
REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request')
# Initialize vLLM
llm = LLM(model="meta-llama/Llama-2-13b-hf")
# Expose metrics
start_http_server(8000)
# Use the model with monitoring
@REQUEST_TIME.time()
def process_request(prompt):
return llm.generate(prompt)
# Your serving loop here
Bu kurulum, Grafana kontrol panellerinde görselleştirilebilen istek işleme süresi gibi ölçümleri izlemenize olanak tanır.
Sonuç
Büyük Dil Modellerini verimli bir şekilde sunmak, yapay zeka çağında karmaşık ama çok önemli bir görevdir. vLLM, yenilikçi PagedAttention algoritması ve optimize edilmiş uygulamasıyla, LLM dağıtımını daha erişilebilir ve uygun maliyetli hale getirmede ileriye doğru atılmış önemli bir adımı temsil ediyor.
vLLM, verimi önemli ölçüde artırarak, bellek israfını azaltarak ve daha esnek hizmet seçenekleri sunarak, güçlü dil modellerini çok çeşitli uygulamalara entegre etmek için yeni olanaklar sunar. İster bir sohbet robotu, ister bir içerik oluşturma sistemi veya başka bir NLP destekli uygulama geliştiriyor olun, vLLM gibi araçları anlamak ve kullanmak başarının anahtarı olacaktır.














