vLLM hakkında kapsamlı rehbere hoş geldiniz! Büyük Dil Modelleri (LLM'ler) dünyasıyla ilgileniyorsanız, muhtemelen çıkarım hızı ve veriminin zorluklarıyla karşılaşmışsınızdır. Bu devasa modelleri verimli bir şekilde sunmak bir darboğaz olabilir. İşte vLLM'nin oyunun kurallarını değiştiren bir çözüm olarak devreye girdiği yer burasıdır. Bu eğitim, bir başlangıç olarak bilmeniz gereken her şeyi size anlatacaktır: vLLM nedir, neden önemlidir, nasıl kurulur ve hem çevrimdışı toplu işleme hem de çevrimiçi hizmet için nasıl kullanılır.
vLLM Tam Olarak Nedir?
Temelinde, vLLM, özellikle Büyük Dil Modeli (LLM) çıkarımı ve hizmeti için tasarlanmış, yüksek verimli ve bellek açısından verimli bir kütüphanedir. Mevcut hizmet sistemlerinin performans sınırlamalarını aşmayı amaçlayan araştırmacılar ve mühendisler tarafından geliştirilen vLLM, LLM'lerden tahmin (çıkarım) alma sürecini önemli ölçüde hızlandırır.
LLM çıkarımı için geleneksel yöntemler genellikle modelin dikkat mekanizmasının (özellikle KV önbelleği) büyük bellek ayak izini yönetmekte ve gelen istekleri verimli bir şekilde toplu hale getirmekte zorlanır. vLLM, bu zorlukları doğrudan ele almak için, en önemlisi PagedAttention olmak üzere yeni teknikler sunar. Birçok standart Hugging Face Transformers uygulamasından veya eşzamanlı isteklerle uğraşırken diğer hizmet çerçevelerinden daha yüksek verim (saniyede daha fazla işlenen istek) sağlar ve modelleri daha hızlı ve daha uygun maliyetli bir şekilde sunabilir.
vLLM'yi, önceden eğitilmiş LLM'leri çalıştırmak için son derece optimize edilmiş bir motor olarak düşünün. Modeli ve istemleri siz sağlarsınız ve vLLM, ister tek bir büyük istem toplu işi için isterse dağıtılmış bir modelle etkileşimde bulunan birçok eşzamanlı kullanıcı için olsun, metin oluşturma karmaşık görevini hızlı ve verimli bir şekilde halleder.
LLM Çıkarımı için Neden vLLM'yi Seçmelisiniz?
vLLM'yi LLM'lerle çalışan geliştiriciler ve kuruluşlar için tercih edilen bir seçim haline getiren birkaç zorlayıcı neden vardır:
- Son Teknoloji Performansı: vLLM, birçok temel uygulamaya kıyasla önemli ölçüde daha yüksek verim sağlar. Bu, aynı donanımla daha fazla kullanıcı isteğini aynı anda işleyebileceğiniz veya büyük veri kümelerini daha hızlı işleyebileceğiniz anlamına gelir.
- Verimli Bellek Yönetimi: Temel yenilik olan PagedAttention, KV önbelleğini daha etkili bir şekilde yöneterek bellek israfını önemli ölçüde azaltır. Bu, daha büyük modelleri GPU'larınıza sığdırmanıza veya mevcut modelleri daha az bellek yüküyle sunmanıza olanak tanır ve potansiyel olarak donanım maliyetlerini düşürür.
- Sürekli Toplu İşleme: Statik toplu işlemenin (sunucunun işleme başlamadan önce tam bir toplu işi beklemesi) aksine, vLLM sürekli toplu işlemeyi kullanır. İstekleri geldikçe dinamik olarak işler, GPU kullanımını önemli ölçüde iyileştirir ve bireysel istekler için gecikmeyi azaltır.
- OpenAI Uyumlu Sunucu: vLLM, OpenAI API'sini taklit eden yerleşik bir sunucu içerir. Bu, OpenAI Python istemcisi veya uyumlu araçlar kullanılarak zaten oluşturulmuş uygulamalar için vLLM'yi doğrudan bir yedek olarak kullanmayı inanılmaz derecede kolaylaştırır. Genellikle uç nokta URL'nizi ve API anahtarınızı değiştirebilirsiniz ve mevcut kodunuz kendi kendine barındırılan vLLM örneğinizle çalışacaktır.
- Kullanım Kolaylığı: Gelişmiş iç yapılarına rağmen, vLLM hem çevrimdışı çıkarım (
LLM
sınıfı) hem de çevrimiçi hizmet (vllm serve
komutu) için nispeten basit bir API sunar. - Geniş Model Uyumluluğu: vLLM, Hugging Face Hub'da (ve potansiyel olarak ModelScope'da) bulunan çok çeşitli popüler açık kaynaklı LLM'leri destekler.
- Aktif Geliştirme ve Topluluk: vLLM, devam eden iyileştirmeler, hata düzeltmeleri ve yeni modeller ve özellikler için destek sağlayan, aktif olarak bakımı yapılan, büyüyen bir topluluğa sahip bir açık kaynak projesidir.
- Optimize Edilmiş Çekirdekler: vLLM, çeşitli işlemler için son derece optimize edilmiş CUDA çekirdekleri kullanır ve NVIDIA GPU'larda performansı daha da artırır.
Hız, verimlilik ve ölçeklenebilirlik LLM uygulamanız için kritik öneme sahipse, vLLM ciddi olarak düşünmeniz gereken bir teknolojidir.
vLLM Hangi Modelleri Destekliyor?
vLLM, Hugging Face Hub'da barındırılan çok çeşitli popüler dönüştürücü tabanlı modelleri destekler. Bu, aşağıdakilerin birçok çeşidini içerir:
- Llama (Llama, Llama 2, Llama 3)
- Mistral & Mixtral
- Qwen & Qwen2
- GPT-2, GPT-J, GPT-NeoX
- OPT
- Bloom
- Falcon
- MPT
- Ve çok modlu modeller dahil olmak üzere daha birçok model.
Liste sürekli büyüyor. Resmi olarak desteklenen modellerin en güncel ve kapsamlı listesi için, her zaman resmi vLLM belgelerine bakın:
vLLM Desteklenen Modeller Listesi
Bir model açıkça listelenmemişse, mimarisi desteklenen bir modele benziyorsa yine de çalışabilir, ancak resmi destek veya test olmadan uyumluluk garanti edilmez. Yeni model mimarileri eklemek genellikle vLLM projesine kod katkıları gerektirir.
Bazı Temel vLLM Terminolojileri:
vLLM yüzeyde kullanımı kolay olsa da, birkaç temel kavramını anlamak, neden bu kadar etkili olduğunu takdir etmenize yardımcı olur:
- PagedAttention: Bu, vLLM'nin amiral gemisi özelliğidir. Geleneksel dikkat mekanizmalarında, Anahtar-Değer (KV) önbelleği (oluşturma için ara sonuçları depolar) bitişik bellek blokları gerektirir. Bu, parçalanmaya ve bellek israfına (dahili ve harici) yol açar. PagedAttention, işletim sistemlerindeki sanal bellek gibi çalışır. KV önbelleğini bitişik olmayan bloklara (sayfalara) böler ve çok daha esnek ve verimli bellek yönetimi sağlar. Bellek yükünü önemli ölçüde azaltır (geliştiriciler tarafından bildirilen bazı durumlarda %90'a kadar) ve bellek çoğaltma olmadan paylaşılan önekler gibi özellikler sağlar.
- Sürekli Toplu İşleme: Hesaplamaya başlamadan önce sabit sayıda isteğin gelmesini beklemek yerine (statik toplu işleme), sürekli toplu işleme, vLLM motorunun bir toplu iş içindeki eski diziler token oluşturmayı bitirir bitirmez yeni dizileri işlemeye başlamasına olanak tanır. Bu, GPU'yu sürekli meşgul tutar, verimi en üst düzeye çıkarır ve istekler için ortalama bekleme süresini azaltır.
Bu iki teknik, vLLM'nin etkileyici performans özelliklerini sağlamak için sinerjik olarak birlikte çalışır.
vLLM'ye Başlamadan Önce Kontrol Etmeniz Gerekenler:
vLLM'yi kurup çalıştırabilmeniz için, sisteminizin aşağıdaki gereksinimleri karşıladığından emin olun:
- İşletim Sistemi: Linux, birincil desteklenen işletim sistemidir. Diğer işletim sistemleri (Windows'ta WSL2 veya macOS gibi) için topluluk çabaları mevcut olabilirken, Linux en basit ve resmi olarak desteklenen deneyimi sağlar.
- Python Sürümü: vLLM, Python 3.9, 3.10, 3.11 veya 3.12 gerektirir. Python bağımlılıklarınızı yönetmek için bir sanal ortam kullanmanız şiddetle tavsiye edilir.
- CUDA'lı NVIDIA GPU: Optimum performans ve temel özelliklere erişim için, PyTorch tarafından desteklenen bir hesaplama yeteneğine sahip bir NVIDIA GPU'ya ve gerekli CUDA araç setinin yüklü olması gerekir. vLLM, optimize edilmiş çekirdekleri için yoğun olarak CUDA'ya güvenir. Yalnızca CPU çıkarımı ve diğer hızlandırıcılar (AMD GPU'lar veya AWS Inferentia/Trainium gibi) için destek mevcut veya geliştirme aşamasında olsa da, birincil yol NVIDIA donanımını içerir. Belirli GPU sürücü sürümünüzle CUDA uyumluluğu için resmi PyTorch web sitesini kontrol edin.
- PyTorch: vLLM, PyTorch üzerine kurulmuştur. Kurulum süreci genellikle uyumlu bir sürümü yüklemeyi halleder, ancak sorunlarla karşılaşırsanız CUDA sürümünüzle uyumlu çalışan bir PyTorch kurulumunuz olduğundan emin olun.
vLLM'yi Kurmak İçin Adım Adım Kılavuz
vLLM'yi kurmanın önerilen yolu, bir sanal ortamdaki bir paket yöneticisi kullanmaktır. Bu, diğer Python projeleriyle çakışmaları önler. İşte popüler araçları kullanan adımlar:
vLLM ile pip Kullanma
pip
, standart Python paket yükleyicisidir.
Sanal Bir Ortam Oluşturun ve Etkinleştirin (Önerilir):
python -m venv vllm-env
source vllm-env/bin/activate
# Windows'ta şunu kullanın: vllm-env\\\\Scripts\\\\activate
vLLM'yi Yükleyin:
pip install vllm
Bu komut, algılanan CUDA kurulumunuz (mümkünse) için uyumlu bir PyTorch sürümü dahil olmak üzere, vLLM'nin ve temel bağımlılıklarının en son kararlı sürümünü indirecek ve yükleyecektir.
Conda ile Conda Kullanma
Conda, özellikle veri bilimi topluluğunda başka bir popüler ortam ve paket yöneticisidir.
Bir Conda Ortamı Oluşturun ve Etkinleştirin:
conda create -n vllm-env python=3.11 -y # Veya 3.9, 3.10, 3.12 kullanın
conda activate vllm-env
Conda içinde pip kullanarak vLLM'yi yükleyin: En son uyumlu yapıyı kolayca elde ettiğinizden emin olmak için, bir Conda ortamında bile vLLM'yi yüklemek için genellikle pip
kullanmanız önerilir.
pip install vllm
Bu şekilde yönetmeyi tercih ederseniz, uyumluluğu sağlamak için önce PyTorch'u Conda aracılığıyla ayrı olarak yüklemeniz gerekebilir: conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
(CUDA sürümünü gerektiği gibi ayarlayın). Ardından pip install vllm
komutunu çalıştırın.
uv ile uv Kullanma
uv
, daha yeni, son derece hızlı bir Python paket yükleyicisi ve çözücüsüdür.
uv'yi Yükleyin (henüz yapmadıysanız): Resmi uv
belgelerindeki talimatları izleyin.
uv kullanarak bir Ortam Oluşturun ve Etkinleştirin:
uv venv vllm-env --python 3.12 --seed # Veya 3.9, 3.10, 3.11 kullanın
source vllm-env/bin/activate
# Windows'ta şunu kullanın: vllm-env\\\\Scripts\\\\activate
uv kullanarak vLLM'yi yükleyin:
uv pip install vllm
vLLM Kurulumunuzu Doğrulama
Kurulumdan sonra, bir Python yorumlayıcısında vLLM'yi içe aktarmayı veya temel bir komut çalıştırmayı deneyerek hızlıca doğrulayabilirsiniz:
# Önce sanal ortamınızı etkinleştirin (örneğin, source vllm-env/bin/activate)
python -c "import vllm; print(vllm.__version__)"
Bu, yüklü vLLM sürümünü hatasız yazdırmalıdır.
Alternatif olarak, sunucu için yardım komutunu deneyin (başarılı kurulum gerektirir):
vllm --help
vLLM ile Çevrimdışı Toplu Çıkarım Yapma
Çevrimdışı toplu çıkarım, önceden tanımlanmış bir giriş istemleri listesi için aynı anda metin oluşturmayı ifade eder. Bu, bir modeli değerlendirmek, bir veri kümesi için yanıtlar oluşturmak veya sonuçları önceden hesaplamak gibi görevler için kullanışlıdır. vLLM, bunu LLM
sınıfını kullanarak verimli hale getirir.
vLLM'nin LLM
Sınıfını Anlama
vllm.LLM
sınıfı, çevrimdışı çıkarım için ana giriş noktasıdır. Kullanmak istediğiniz modeli belirterek bunu başlatırsınız.
from vllm import LLM
# Hugging Face Hub'dan bir modelle LLM motorunu başlatın
# Seçilen model için yeterli GPU belleğiniz olduğundan emin olun!
# Örnek: OPT-125m gibi daha küçük bir model kullanma
llm = LLM(model="facebook/opt-125m")
# Örnek: Llama-3-8B-Instruct gibi daha büyük bir model kullanma (önemli GPU belleği gerektirir)
# llm = LLM(model="meta-llama/Meta-Llama-3-8B-Instruct")
print("vLLM motoru başlatıldı.")
Varsayılan olarak, vLLM modelleri Hugging Face Hub'dan indirir. Modeliniz ModelScope'ta barındırılıyorsa, Python betiğinizi çalıştırmadan önce VLLM_USE_MODELSCOPE=1
ortam değişkenini ayarlamanız gerekir.
vLLM Örnekleme Parametrelerini Yapılandırma
Metnin nasıl oluşturulduğunu kontrol etmek için, vllm.SamplingParams
sınıfını kullanırsınız. Bu, aşağıdaki gibi parametreleri ayarlamanıza olanak tanır:
temperature
: Rastgeleliği kontrol eder. Daha düşük değerler (örneğin, 0,2) çıktıyı daha belirleyici ve odaklanmış hale getirir; daha yüksek değerler (örneğin, 0,8) rastgeleliği artırır.top_p
(Çekirdek Örnekleme): Kümülatif olasılığıtop_p
'yi aşan yalnızca en olası tokenleri dikkate alır. Yaygın bir değer 0,95'tir.top_k
: Her adımda yalnızca en olasıtop_k
tokenini dikkate alır.max_tokens
: Her istem için oluşturulacak maksimum token sayısı.stop
: Oluşturulduğunda, o belirli istem için oluşturma işlemini durduracak bir dizeler listesi.
from vllm import SamplingParams
# Örnekleme parametrelerini tanımlayın
# Belirtilmezse, vLLM modelin generation_config.json dosyasındaki varsayılanları kullanabilir
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.9,
max_tokens=100, # Oluşturulan metnin uzunluğunu sınırlayın
stop=["\\\\n", " Human:", " Assistant:"] # Bu tokenler görünürse oluşturmayı durdurun
)
print("Örnekleme parametreleri yapılandırıldı.")
Önemli Not: Varsayılan olarak, vLLM, Hugging Face Hub'daki modelle ilişkili generation_config.json
dosyasından ayarları yüklemeye ve kullanmaya çalışır. Bunu yoksaymak ve SamplingParams
nesneniz tarafından geçersiz kılınmadığı sürece vLLM'nin varsayılan örnekleme parametrelerini kullanmak istiyorsanız, LLM
sınıfını şu şekilde başlatın: llm = LLM(model="...", generation_config="vllm")
. generate
yöntemine bir SamplingParams
nesnesi sağlarsanız, bu parametreler her zaman hem modelin yapılandırmasına hem de vLLM'nin varsayılanlarına göre öncelikli olacaktır.
İlk vLLM Toplu İşinizi Çalıştırma
Şimdi, metin oluşturmak için LLM
nesnesini, SamplingParams
'i ve bir istemler listesini birleştirelim.
from vllm import LLM, SamplingParams
# 1. Giriş istemlerinizi tanımlayın
prompts = [
"Fransa'nın başkenti",
"Görelilik teorisini basit terimlerle açıklayın:",
"Yağmurlu bir gün hakkında kısa bir şiir yazın:",
"'Merhaba, dünya!' kelimesini Almancaya çevirin:",
]
# 2. Örnekleme parametrelerini yapılandırın
sampling_params = SamplingParams(temperature=0.7, top_p=0.95, max_tokens=150)
# 3. vLLM motorunu başlatın (donanımınız için uygun bir model kullanın)
try:
# Nispeten küçük, yetenekli bir model kullanma
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.1")
# Veya daha küçük GPU'lar için:
# llm = LLM(model="facebook/opt-1.3b")
# llm = LLM(model="facebook/opt-125m")
except Exception as e:
print(f"LLM başlatılırken hata: {e}")
print("Lütfen yeterli GPU belleğiniz olduğundan ve CUDA'nın doğru şekilde kurulduğundan emin olun.")
exit()
# 4. İstemler için metin oluşturun
# generate yöntemi, istemler listesini ve örnekleme parametrelerini alır
print("Yanıtlar oluşturuluyor...")
outputs = llm.generate(prompts, sampling_params)
print("Oluşturma tamamlandı.")
# 5. Sonuçları yazdırın
# Çıktı, RequestOutput nesnelerinin bir listesidir
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text # İlk oluşturulan diziden metni alın
print("-" * 20)
print(f"İstem: {prompt!r}")
print(f"Oluşturulan Metin: {generated_text!r}")
print("-" * 20)
Bu komut dosyası, vLLM'yi başlatır, istemleri ve parametreleri tanımlar, oluşturma işlemini bir toplu işte verimli bir şekilde çalıştırır ve ardından her istem için çıktıyı yazdırır. llm.generate()
çağrısı, toplu işleme ve GPU yürütme karmaşıklıklarını dahili olarak halleder.
vLLM OpenAI Uyumlu Sunucusunu Kurma
vLLM'nin en güçlü özelliklerinden biri, OpenAI API'siyle aynı dili konuşan yüksek performanslı bir arka uç sunucusu olarak hareket etme yeteneğidir. Bu, kendi açık kaynak modellerinizi kolayca barındırmanıza ve bunları OpenAI için tasarlanmış uygulamalara entegre etmenize olanak tanır.
vLLM Sunucusunu Başlatma
Sunucuyu başlatmak, terminalinizdeki vllm serve
komutunu kullanarak basittir.
vLLM'nin yüklü olduğu sanal ortamınızı etkinleştirin.
source vllm-env/bin/activate
vllm serve
komutunu çalıştırın: Hizmet vermek istediğiniz modeli belirtmeniz gerekir.
# Mistral-7B-Instruct'u kullanan örnek
vllm serve mistralai/Mistral-7B-Instruct-v0.1
# Qwen2-1.5B-Instruct gibi daha küçük bir model kullanan örnek
# vllm serve Qwen/Qwen2-1.5B-Instruct
Bu komut şunları yapacaktır:
- Belirtilen modeli indirin (henüz önbelleğe alınmadıysa).
- Modeli GPU'larınıza yükleyin.
- Bir web sunucusu başlatın (varsayılan olarak Uvicorn'u kullanır).
- Gelen API isteklerini dinleyin, genellikle
http://localhost:8000
adresinde.
Yaygın Seçenekler:
-model <model_name_or_path>
: (Gerekli) Hizmet verilecek model.-host <ip_address>
: Sunucuyu bağlamak için IP adresi (örneğin, ağınızda erişilebilir hale getirmek için0.0.0.0
). Varsayılanlocalhost
'tur.-port <port_number>
: Dinlenecek bağlantı noktası. Varsayılan8000
'dir.-tensor-parallel-size <N>
: Çoklu GPU hizmeti için, modeli N GPU'ya böler.-api-key <your_key>
: Ayarlanırsa, sunucu gelen isteklerinAuthorization: Bearer <your_key>
başlığında bu API anahtarını bekleyecektir. AyrıcaVLLM_API_KEY
ortam değişkenini de ayarlayabilirsiniz.-generation-config vllm
: Modelingeneration_config.json
dosyası yerine vLLM'nin varsayılan örnekleme parametrelerini kullanın.-chat-template <path_to_template_file>
: Tokenizer yapılandırmasında tanımlanan yerine özel bir Jinja sohbet şablon dosyası kullanın.
Sunucu, çalıştığını ve istekleri kabul etmeye hazır olduğunu belirten günlükler çıkaracaktır.
vLLM Sunucusuyla Etkileşim: Tamamlama API'si
Sunucu çalıştıktan sonra, OpenAI'nin eski tamamlama API'sinde olduğu gibi, /v1/completions
uç noktasına istek gönderebilirsiniz.
curl
Kullanma:
curl <http://localhost:8000/v1/completions> \\\\
-H "Content-Type: application/json" \\\\
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.1",
"prompt": "San Francisco bir şehir",
"max_tokens": 50,
"temperature": 0.7
}'
("mistralai/Mistral-7B-Instruct-v0.1"
ifadesini hizmet verdiğiniz gerçek modelle değiştirin)
openai
Python Kütüphanesini Kullanma:
from openai import OpenAI
# İstemciyi vLLM sunucu uç noktanıza yönlendirin
client = OpenAI(
api_key="EMPTY", # --api-key ile bir tane ayarladıysanız "EMPTY" veya gerçek anahtarınızı kullanın
base_url="<http://localhost:8000/v1>"
)
print("vLLM sunucusuna istek gönderiliyor (Tamamlamalar)...")
try:
completion = client.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.1", # Model adı hizmet verilenle eşleşmelidir
prompt="vLLM kullanmanın faydalarını açıklayın:",
max_tokens=150,
temperature=0.5
)
print("Yanıt:")
print(completion.choices[0].text)
except Exception as e:
print(f"Bir hata oluştu: {e}")
(Farklı bir model hizmet veriyorsanız model adını değiştirmeyi unutmayın)
vLLM Sunucusuyla Etkileşim: Sohbet Tamamlama API'si
vLLM ayrıca, konuşmalı modeller ve yapılandırılmış mesaj formatları (sistem, kullanıcı, asistan rolleri) için uygun olan daha modern /v1/chat/completions
uç noktasını da destekler.
curl
Kullanma:
curl <http://localhost:8000/v1/chat/completions> \\\\
-H "Content-Type: application/json" \\\\
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.1",
"messages": [
{"role": "system", "content": "Yardımsever bir asistansınız."},
{"role": "user", "content": "vLLM'de PagedAttention'ın ana avantajı nedir?"}
],
"max_tokens": 100,
"temperature": 0.7
}'
(Model adını gerektiği gibi değiştirin)
openai
Python Kütüphanesini Kullanma:
from openai import OpenAI
# İstemciyi vLLM sunucu uç noktanıza yönlendirin
client = OpenAI(
api_key="EMPTY", # "EMPTY" veya gerçek anahtarınızı kullanın
base_url="<http://localhost:8000/v1>"
)
print("vLLM sunucusuna istek gönderiliyor (Sohbet Tamamlamaları)...")
try:
chat_response = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.1", # Model adı hizmet verilenle eşleşmelidir
messages=[
{"role": "system", "content": "Yardımsever bir programlama asistanısınız."},
{"role": "user", "content": "Faktöriyel hesaplamak için basit bir Python işlevi yazın."}
],
max_tokens=200,
temperature=0.5
)
print("Yanıt:")
print(chat_response.choices[0].message.content)
except Exception as e:
print(f"Bir hata oluştu: {e}")
(Gerekirse model adını değiştirmeyi unutmayın)
OpenAI uyumlu sunucuyu kullanmak, mevcut uygulama mantığınızda minimum değişikliklerle yüksek performanslı LLM çıkarım uç noktalarını dağıtmanın güçlü bir yoludur.
vLLM Dikkat Arka Uçları Hakkında Konuşalım
vLLM, dikkat mekanizmasını verimli bir şekilde hesaplamak için özel "arka uçlar" kullanır. Bu arka uçlar, öncelikle NVIDIA GPU'ları hedefleyen, farklı kütüphaneler veya teknikler kullanan optimize edilmiş uygulamalardır. Arka uç seçimi, performansı ve bellek kullanımını etkileyebilir. Ana olanlar şunlardır:
- FlashAttention: FlashAttention kütüphanesini (sürümler 1 ve 2) kullanır. FlashAttention, GPU Yüksek Bant Genişliği Belleğinde (HBM) büyük ara dikkat matrisini somutlaştırma ihtiyacını ortadan kaldırarak hesaplamayı önemli ölçüde hızlandıran ve bellek kullanımını azaltan, son derece optimize edilmiş bir dikkat algoritmasıdır. Genellikle birçok modern GPU (Ampere, Hopper mimarileri gibi) ve dizi uzunluğu için en hızlı seçenektir. vLLM genellikle FlashAttention desteğiyle önceden oluşturulmuş tekerlekler içerir.
- Xformers: Meta AI tarafından geliştirilen xFormers kütüphanesinden yararlanır. xFormers ayrıca bellek açısından verimli ve optimize edilmiş dikkat uygulamaları (
MemoryEfficientAttention
gibi) sağlar. Çeşitli GPU mimarilerinde geniş uyumluluk sunar ve FlashAttention belirli bir senaryo için mevcut değilse veya optimum değilse iyi bir alternatif veya yedek olabilir. vLLM'nin standart kurulumu genellikle xFormers için destek içerir. - FlashInfer: FlashInfer kütüphanesini kullanan daha yeni bir arka uç seçeneği. FlashInfer, LLM'leri dağıtmak için özel olarak tasarlanmış, spekülatif kod çözme ve sayfalı KV önbelleklerinin verimli işlenmesi gibi özellikler dahil olmak üzere çeşitli ön doldurma ve kod çözme senaryolarına odaklanan, son derece optimize edilmiş çekirdekler sağlar. Genellikle FlashInfer içeren önceden oluşturulmuş vLLM tekerlekleri yoktur, bu da vLLM'nin onu kullanabilmesi için ortamınızda ayrı olarak yüklemeniz gerektiği anlamına gelir. Bu arka ucu kullanmayı düşünüyorsanız, kurulum talimatları için FlashInfer resmi belgelerine veya vLLM Dockerfile'larına bakın.
Otomatik Arka Uç Seçimi: Varsayılan olarak, vLLM, donanımınıza (GPU mimarisi), yüklü kütüphanelerinize (FlashAttention/xFormers/FlashInfer mevcut mu?) ve kullanılan belirli modele göre en uygun ve performanslı dikkat arka ucunu otomatik olarak algılar. Uyumluluğu sağlamak için kontroller gerçekleştirir ve manuel yapılandırma olmadan kutudan çıkar çıkmaz en iyi performansı sağlamayı amaçlar.
Manuel Arka Uç Seçimi: Bazı gelişmiş kullanım durumlarında veya karşılaştırma amaçları için, vLLM'yi belirli bir arka ucu kullanmaya zorlamak isteyebilirsiniz. Bunu, vLLM işleminizi (çevrimdışı komut dosyası veya sunucu) başlatmadan önce VLLM_ATTENTION_BACKEND
ortam değişkenini ayarlayarak yapabilirsiniz.
# Örnek: FlashAttention'ı kullanmaya zorla (yüklüyse ve uyumluysa)
export VLLM_ATTENTION_BACKEND=FLASH_ATTN
python your_offline_script.py
# veya
# export VLLM_ATTENTION_BACKEND=FLASH_ATTN
# vllm serve your_model ...
# Örnek: xFormers'ı kullanmaya zorla
export VLLM_ATTENTION_BACKEND=XFORMERS
python your_offline_script.py
# Örnek: FlashInfer'i kullanmaya zorla (önceden kurulum gerektirir)
export VLLM_ATTENTION_BACKEND=FLASHINFER
python your_offline_script.py
Çoğu yeni başlayan için, vLLM'nin otomatik arka uç seçimine güvenmeniz önerilir. Arka ucu manuel olarak ayarlamak genellikle deneyler veya belirli performans sorunlarını gidermek için ayrılmıştır.
Yaygın vLLM Kurulumu ve Kullanım Sorunlarını Giderme
vLLM kullanım kolaylığı hedeflese de, özellikle kurulum sırasında bazı yaygın engellerle karşılaşabilirsiniz. İşte bazı sık karşılaşılan sorunlar ve olası çözümleri:
- CUDA Bellek Dışı (OOM) Hataları:
- Sorun:
torch.cuda.OutOfMemoryError: CUDA bellek dışı
gibi hatalar görüyorsunuz. - Neden: Yüklemeye çalıştığınız LLM, donanımınızda bulunanlardan daha fazla GPU VRAM gerektiriyor. Daha büyük modeller (örneğin, 7B