Büyük Dil Modelleri (LLM) ekosistemi olgunlaştıkça, darboğaz model eğitiminden çıkarım dağıtımına kaymıştır. Tüketiciler için uygun veya kurumsal donanımlarda modelleri yerel olarak çalıştırmak isteyen geliştiriciler ve veri bilimciler için geleneksel sunum çerçeveleri genellikle bellek verimsizliği ve düşük veri akışıyla mücadele eder. vLLM sahneye çıkıyor; yüksek veri akışı ve bellek verimliliği sunan LLM sunumu için özel olarak tasarlanmış açık kaynaklı bir kütüphanedir.
Bu yazı, vLLM'in arkasındaki mimariyi, neden Hugging Face'in Transformers veya Hugging Face Text Generation Inference (TGI) gibi mevcut çözümlerden daha iyi performans gösterdiğini ve bunu yerel AI iş akışınıza nasıl entegre edebileceğinizi inceler.
Neden vLLM? Verimlilik Mimarisi
vLLM sadece bir sarmalayıcı (wrapper) değildir; otoregresif dil modellerinin spesifik bellek erişim desenlerini hedefleyen birkaç temel yenilikle birlikte temel sunum mantığının yeniden yazılmış halidir. Performansının üç temel direği şunlardır:
- PagedAttention: Standart KV-bellek yönetiminin aksine, PagedAttention KV önbelleğini bir bellek sayfası kümesi olarak ele alır. Bu, dinamik bellek tahsisine olanak tanır, sabit boyutlu arabellekleri önceden tahsis etme yükünü ortadan kaldırır ve GPU bellek kullanımını %24'e kadar artırır.
- Sürekli Toplu İşleme (Continuous Batching): Geleneksel toplu işleme, bir sonraki yinelemeye başlamadan önce toplu işteki en uzun dizinin tamamlanmasını bekler. vLLM, tamamlanan dizeleri atar ve her adımda yenilerini ekleyen sürekli toplu işleme kullanır; bu da GPU doluluğunu maksimize eder.
- Optimize Edilmiş CUDA Çekirdekleri: Altta yatan çekirdekler, LLM çıkarımında kullanılan spesifik veri yapıları için ince ayar yapılmıştır ve gecikmeyi azaltır.
Kurulum ve Ayar
vLLM ile başlamak, uyumlu bir NVIDIA GPU ve doğru sürücülere sahip olduğunuz sürece basittir. Kütüphane pip aracılığıyla kullanılabilir ve CUDA'nın yüklü olmasını gerektirir.
# vLLM'in en son sürümünü yükleyin
pip install vllm
# Kurulumu doğrulayın
python -c "import vllm; print(vllm.__version__)"
Sisteminizde uygun NVIDIA sürücüsünün ve CUDA araç takımının yüklü olduğundan emin olun. GPU kullanılabilirliğini aşağıdaki kod parçacığıyla doğrulayabilirsiniz:
import torch
print(torch.cuda.is_available()) # True döndürmelidir
Pratik Uygulama: Llama-3'ü Yerel Olarak Sunma
Meta'nın Llama-3 modelini sunma konusunda pratik bir örneğe bakalım. Varolan istemcilerle uyumluluk sağlayan OpenAI API formatını taklit eden bir REST API uç noktası oluşturmak için vLLM'in yerleşik sunucu arayüzünü kullanacağız.
from vllm import LLM, SamplingParams
# Modeli başlatın. 'meta-llama/Llama-3-8b-Instruct' temsilî bir modeldir.
# Birden fazla GPU'nuz varsa 'tensor_parallel_size' değerini ayarlayın.
llm = LLM(model="meta-llama/Llama-3-8b-Instruct")
# Örnekleme parametrelerini tanımlayın
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.9,
max_tokens=512
)
# Örnek istem (prompt)
prompt = "Kuantum bilgisayarlamayı basit terimlerle açıklayın:"
# Çıktıyı oluştur
outputs = llm.generate([prompt], sampling_params)
# Sonuçları yazdır
for output in outputs:
generated_text = output.outputs[0].text
print(generated_text)
Kalıcı bir sunucuya ihtiyacınız olan üretim benzeri senaryolar için vLLM sunucusunu doğrudan komut satırından başlatabilirsiniz:
vllm serve meta-llama/Llama-3-8b-Instruct --host 127.0.0.1 --port 8000
Çalıştıktan sonra standart HTTP istemcilerini kullanarak sorgulayabilirsiniz:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Llama-3-8b-Instruct",
"prompt": "Fransa'nın başkenti nedir?",
"max_tokens": 7,
"temperature": 0
}'
Yerel Dağıtım İçin En İyi Uygulamalar
- Quantization (Niceleme): Bellek kısıtlamanız varsa, vLLM'in AWQ (Aktivasyon Bilinçli Ağırlık Nicelemesi) veya GPTQ desteğini kullanmayı düşünün. Bu, kalitede minimum kayıpla 4-bit nicelemeli modellerin çalıştırılmasına olanak tanır.
- Tensor Paralellik: 70 milyar parametreden büyük modeller için, modeli birden fazla GPU'ya yaymak üzere tensor paralelliğinden yararlanın. Yapılandırmanızda
tensor_parallel_sizedeğerini mevcut GPU sayısına ayarlayın. - İzleme:
nvidia-smiveyanvtopgibi araçları kullanarak GPU bellek kullanımını takip edin. vLLM'in PagedAttention parçalanmayı iyi yönetse de, izleme toplu iş boyutlarını ayarlamak için yardımcı olur.
Sonuç
vLLM, güçlü LLM'lerin yerel dağıtım için erişilebilirliğinde önemli bir sıçrama temsil eder. Bellek parçalanması ve verimsiz toplu işleme gibi temel sorunları çözerek geliştiricilerin, daha önce yetersiz kabul edilen donanımlarda büyük modeller çalıştırmasına olanak tanır. Yerel bir RAG hattı, yapay zeka destekli bir kod asistanı veya özel bir sohbet botu oluşturuyor olun, vLLM üretim kalitesinde güvenilirlik için gerekli performans temelini sağlar. Yerel AI alanı gelişmeye devam ettikçe, vLLM geliştiricinin araç setinde kritik bir araç olarak kalmaya hazırlanmaktadır.