Büyük Dil Modeli (LLM) uygulamaları mı geliştiriyorsunuz ve yavaş çıkarım hızları veya bellek sınırlamalarıyla mı mücadele ediyorsunuz? vLLM, önde gelen API ve arka uç mühendislerinin LLM hizmetini hızlandırmak, yüksek eşzamanlılığı yönetmek ve altyapı maliyetlerini düşürmek için benimsediği çözümdür. Bu uygulamalı kılavuz, vLLM'in ne olduğunu, nasıl çalıştığını, nasıl kurulacağını ve hem toplu hem de gerçek zamanlı API çıkarımı için nasıl kullanılacağını açıklayarak ekibinizin hızlı ve güvenilir yapay zeka özelliklerini büyük ölçekte sunmasını sağlayacaktır.
vLLM Nedir? LLM API'leri İçin Neden Önemli?
vLLM, büyük dil modellerine hizmet vermek için tasarlanmış açık kaynaklı, yüksek verimli, bellek açısından verimli bir çıkarım motorudur. Önde gelen araştırmacılar ve mühendisler tarafından geliştirilen bu motor, LLM dağıtımlarının karşılaştığı en büyük iki zorluğun üstesinden gelir:
- Yavaş çıkarım hızları: Özellikle birçok eşzamanlı kullanıcı veya büyük toplu işlerde.
- Yüksek bellek kullanımı: Geleneksel dikkat mekanizmaları GPU belleğini boşa harcayarak sunabileceğiniz model boyutunu ve sayısını sınırlar.
vLLM'in temel yenilikleri:
- PagedAttention: Sanal bellek benzeri bir sayfalama sistemi kullanarak anahtar-değer (KV) önbelleğini optimize eder, bellek israfını önemli ölçüde azaltır.
- Sürekli gruplama (Continuous batching): İstekleri geldikçe dinamik olarak gruplandırır, GPU kullanımını en üst düzeye çıkarır ve kullanıcı bekleme sürelerini en aza indirir.
vLLM'i, özellikle ölçeklenebilir, üretime hazır çıkarım ihtiyacı olan geliştiriciler için LLM API'leri için turboşarjlı bir arka uç motoru olarak düşünün.
API Geliştiricileri ve Arka Uç Mühendisleri Neden vLLM'i Tercih Ediyor?
vLLM, teknik ekipler için hızla tercih edilen LLM çıkarım motoru haline geliyor çünkü şunları sunuyor:
- Son teknoloji verim: Saniyede daha fazla kullanıcı isteğine hizmet verin, daha büyük veri kümelerini daha hızlı işleyin.
- Verimli GPU kullanımı: Daha büyük modelleri GPU'larınıza sığdırın veya mevcut iş yükleri için donanım maliyetlerini azaltın.
- Dinamik gruplama: Artık statik bekleme süreleri yok; vLLM gerçek trafiğe uyum sağlayarak GPU'larınızı meşgul tutar.
- OpenAI uyumlu API: OpenAI uç noktalarını kendi barındırdığınız modellerle sorunsuz bir şekilde değiştirin veya tamamlayın.
- Basit, esnek API'ler: Hem çevrimdışı toplu işler hem de canlı hizmet için.
- Geniş model desteği: Hugging Face ve ModelScope'dan Llama, Mistral, Qwen, OPT, Falcon ve daha fazlası.
- Aktif açık kaynak geliştirme: Sık güncellemeler, büyüyen topluluk ve son teknoloji özellikler.
vLLM belgelerinde desteklenen modellerin tam listesine bakın.
İpucu: LLM destekli API'ler oluşturuyor veya test ediyorsanız, Apidog ile entegrasyonu düşünebilirsiniz. Apidog, vLLM, OpenAI veya özel arka uçlar kullanıyor olsanız da LLM uç noktalarınızı tasarlamanızı, test etmenizi ve belgelemenizi kolaylaştırarak ekiplerin API işbirliğini ve Kalite Güvencesini (KG) kolaylaştırmasına yardımcı olur.
Desteklenen LLM'ler: Hangi Modeller vLLM ile Çalışır?
vLLM, aşağıdakiler dahil olmak üzere geniş bir transformatör tabanlı model yelpazesini doğal olarak destekler:
- Llama serisi: Llama, Llama 2, Llama 3
- Mistral ve Mixtral
- Qwen ve Qwen2
- GPT-2, GPT-J, GPT-NeoX
- OPT
- Bloom
- Falcon
- MPT
- Ve çok modlu modeller dahil daha fazlası
Liste büyümeye devam ediyor. En güncel uyumluluk için resmi vLLM Desteklenen Modeller Listesi'ni kontrol edin.
Not: Modeliniz listede olmasa ancak desteklenen bir modelle aynı mimariye sahip olsa bile çalışabilir; dikkatlice test edin. Özel mimariler, yukarı akışa kod katkısında bulunmayı gerektirebilir.
Temel Kavramlar: PagedAttention ve Sürekli Gruplama
Bu iki kavramı anlamak, LLM dağıtımlarınızı optimize etmenize yardımcı olacaktır:
PagedAttention
- Sorun: Geleneksel dikkat mekanizması, KV önbelleği için bitişik bellek kullanır, bu da parçalanmaya ve boşa harcanan GPU VRAM'ine neden olur.
- Çözüm: PagedAttention, işletim sistemlerindeki sanal bellek gibi KV önbelleğini esnek "sayfalara" böler. Bu, bellek yükünü %90'a kadar azaltabilir ve ortak dizi önekleri için bellek paylaşımını mümkün kılar.
Sürekli Gruplama
- Sorun: Statik gruplama (başlamadan önce tam bir grubun beklenmesi) boşta kalan GPU süresine ve yüksek gecikmeye yol açar.
- Çözüm: Sürekli gruplama, GPU kaynakları boşaldığı anda yeni istekleri anında işler, verimi en üst düzeye çıkarır ve kullanıcı bekleme sürelerini en aza indirir.
Bu optimizasyonlar, vLLM'in diğer birçok LLM sunum çerçevesinden daha iyi performans göstermesinin nedenidir.
Önkoşullar: vLLM Kurulumundan Önce İhtiyacınız Olanlar
Başlamadan önce ortamınızın bu gereksinimleri karşıladığından emin olun:
- İşletim Sistemi: Linux önerilir (WSL2 ve macOS mümkün, ancak Linux en iyi şekilde desteklenir).
- Python: 3.9, 3.10, 3.11 veya 3.12. Sanal bir ortam kullanın.
- CUDA'lı NVIDIA GPU: En iyi performans için. (vLLM CUDA'ya bağlıdır; yalnızca CPU ve diğer hızlandırıcıların sınırlı veya deneysel desteği vardır.)
- PyTorch: vLLM uyumlu bir sürümü otomatik olarak kurar, ancak özel CUDA sürümleri için önceden kurabilirsiniz.
vLLM Nasıl Kurulur: Adım Adım
1. pip Kullanımı (Önerilen)
python -m venv vllm-env
source vllm-env/bin/activate
# On Windows: vllm-env\\Scripts\\activate
pip install vllm
Bu, vLLM'i ve bağımlılıklarını (PyTorch dahil) kurar.
2. Conda Kullanımı
conda create -n vllm-env python=3.11 -y
conda activate vllm-env
pip install vllm
İpucu: Özel CUDA sürümleri için önce conda ile PyTorch'u kurun, ardından vLLM'i kurun.
3. uv Kullanımı (süper hızlı kurulumlar için)
uv venv vllm-env --python 3.12 --seed
source vllm-env/bin/activate
uv pip install vllm
4. Kurulumu Doğrulayın
python -c "import vllm; print(vllm.__version__)"
vllm --help
Kurulu sürümü ve komut satırı yardımını görmelisiniz.
vLLM ile Çevrimdışı Toplu Çıkarım
Toplu çıkarım, bir komut listesi üzerinde tahminler yürütmek için idealdir; değerlendirme, veri kümesi oluşturma veya toplu işleme için harikadır.
Örnek: Toplu Çıkarım Betiği
from vllm import LLM, SamplingParams
# 1. Define prompts
prompts = [
"The capital of France is",
"Explain the theory of relativity in simple terms:",
"Write a short poem about a rainy day:",
"Translate 'Hello, world!' to German:",
]
# 2. Set sampling parameters
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.95,
max_tokens=150,
stop=["\n", " Human:", " Assistant:"]
)
# 3. Initialize vLLM engine (choose a model your GPU can handle)
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.1")
# 4. Generate outputs
outputs = llm.generate(prompts, sampling_params)
# 5. Display results
for output in outputs:
print("-" * 20)
print(f"Prompt: {output.prompt!r}")
print(f"Generated Text: {output.outputs[0].text!r}")
print("-" * 20)
İpuçları:
- vLLM varsayılan olarak Hugging Face Hub modellerini kullanır. ModelScope için `VLLM_USE_MODELSCOPE=1` olarak ayarlayın.
- Bir modelin üretim yapılandırmasını geçersiz kılmak için `LLM` yapıcısında `generation_config="vllm"` kullanın.
- Kuantize edilmiş modeller (AWQ, GPTQ vb.) için vLLM belgelerini ve Hugging Face model kartlarını kontrol edin.
vLLM'i OpenAI Uyumlu Bir API Sunucusu Olarak Çalıştırma
LLM'leri OpenAI benzeri bir API aracılığıyla sunmak mı istiyorsunuz? vLLM, uç noktaları değiştirmeyi, yeni modelleri test etmeyi ve sorunsuz tasarım, sahte ve Kalite Güvencesi (KG) iş akışları için Apidog gibi API araçlarıyla entegre olmayı kolaylaştırır.
vLLM Sunucusunu Başlatın
source vllm-env/bin/activate
vllm serve mistralai/Mistral-7B-Instruct-v0.1
# Or, for another model:
# vllm serve Qwen/Qwen2-1.5B-Instruct
Temel seçenekler:
--model <model_adı_veya_yolu>: Sunulacak model (gerekli)--host 0.0.0.0: Tüm arayüzlere bağlan (uzaktan erişim için)--port 8000: Bağlantı noktasını belirtin--tensor-parallel-size <N>: Modeli N GPU'ya dağıtın--api-key <anahtar>: İstekler için API anahtarı gerektir (üretim için kullanışlıdır)--generation-config vllm: vLLM'in varsayılan üretim parametrelerini kullanın--chat-template <yol>: Özel sohbet şablonu (gelişmiş kullanım için)
Sunucu varsayılan olarak `http://localhost:8000` adresinde çalışır.
Completions API Uç Noktasını Kullanma
cURL Örneği:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.1",
"prompt": "San Francisco is a city in",
"max_tokens": 50,
"temperature": 0.7
}'
Python Örneği (OpenAI İstemcisi):
from openai import OpenAI
client = OpenAI(
api_key="EMPTY", # Or your API key if set
base_url="http://localhost:8000/v1"
)
completion = client.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.1",
prompt="Explain the benefits of using vLLM:",
max_tokens=150,
temperature=0.5
)
print(completion.choices[0].text)
Chat Completions API Uç Noktasını Kullanma
cURL Örneği:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.1",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the main advantage of PagedAttention in vLLM?"}
],
"max_tokens": 100,
"temperature": 0.7
}'
Python Örneği:
chat_response = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.1",
messages=[
{"role": "system", "content": "You are a helpful programming assistant."},
{"role": "user", "content": "Write a simple Python function to calculate factorial."}
],
max_tokens=200,
temperature=0.5
)
print(chat_response.choices[0].message.content)
Apidog ile bu API uç noktalarını hızlı bir şekilde tasarlayabilir, modelleyebilir ve test edebilir, böylece LLM destekli ürünleriniz için sorunsuz entegrasyon ve otomatik Kalite Güvencesi (KG) sağlayabilirsiniz.
vLLM Dikkat Arka Uçları: FlashAttention, xFormers ve FlashInfer
vLLM, optimum hız ve bellek verimliliği için birden fazla dikkat hesaplama arka ucunu destekler:
- FlashAttention (1 ve 2): Çoğu modern NVIDIA GPU için en hızlısı, bellek kullanımını en aza indirir.
- xFormers: Geniş uyumluluk; eski veya daha az yaygın donanımlar için iyi bir yedek.
- FlashInfer: Gelişmiş, yakın zamanda eklendi; manuel kurulum gerektirir.
Otomatik seçim: vLLM, donanımınız ve modeliniz için varsayılan olarak en iyi arka ucu seçer.
Manuel geçersiz kılma: Bir arka ucu zorlamak istiyorsanız vLLM'i çalıştırmadan önce `VLLM_ATTENTION_BACKEND` ortam değişkenini `FLASH_ATTN`, `XFORMERS` veya `FLASHINFER` olarak ayarlayın.
Yaygın vLLM Sorunlarını Giderme
1. CUDA Bellek Yetersizliği Hataları
- Daha küçük bir model deneyin (örn. OPT-1.3B)
- Eşzamanlı istekleri veya toplu iş boyutunu azaltın
- Kuantize edilmiş modeller kullanın (AWQ, GPTQ vb.)
- Birden çok GPU'ya dağıtın (`--tensor-parallel-size`)
- `nvidia-smi` ile diğer GPU işlemlerini kontrol edin
2. Kurulum ve Uyumluluk Sorunları
- CUDA, PyTorch ve NVIDIA sürücülerinin uyumlu olduğundan emin olun (bkz. PyTorch uyumluluk matrisi)
- Gerekirse PyTorch'u önceden kurun
- Sorunsuz kurulum için resmi vLLM Docker görüntülerini kullanın
3. Model Yükleme Hataları
- Model adını iki kez kontrol edin (örn. `mistralai/Mistral-7B-Instruct-v0.1`)
- Model gerektiriyorsa `trust_remote_code=True` kullanın
- Önceden indirilmiş modeller için yerel yolları kullanın
- Disk alanını ve internet bağlantısını kontrol edin
4. Yavaş Çıkarım
- GPU kullanımını izleyin (`nvidia-smi`)
- vLLM'i, bağımlılıkları ve sürücüleri güncelleyin
- Farklı dikkat arka uçlarını deneyin
- Örnekleme parametrelerini ayarlayın (`max_tokens` vb.)
5. Beklenmedik veya Anlamsız Çıktı
- Doğru komut biçimlendirmesini sağlayın (model kartına bakın)
- Örnekleme parametrelerini ayarlayın (`temperature`, `top_p`)
- Sorunu yalıtmak için farklı bir model deneyin
- Sunucudaki sohbet şablonu kullanımını kontrol edin
Sonraki Adımlar: LLM API İş Akışınızı Geliştirin
vLLM ile LLM destekli API'leri daha hızlı dağıtabilir ve ölçeklendirebilirsiniz; Apidog ile ise API tasarımı, testi ve dokümantasyonu için eksiksiz bir araç seti elde edersiniz. Bu kombinasyon, ekiplere şunları yapma gücü verir:
- Gerçek dünya trafik desenleriyle LLM uç noktalarını geliştirin, modelleyin ve test edin
- Hem vLLM hem de OpenAI uyumlu API'ler için Kalite Güvencesini (KG) otomatikleştirin
- Açık, güncel API belgeleriyle ekipler arasında işbirliği yapın
vLLM'in gelişmiş özelliklerini (niceleme, çoklu LoRA, dağıtılmış hizmet, spekülatif kod çözme) resmi belgelerde keşfedin ve sorunsuz API yönetimi için Apidog ile LLM geliştirme yaşam döngünüzü hızlandırın.
