DEV Community

Cover image for vLLM Nedir? Hızlı ve Ölçeklenebilir API'ler İçin LLM Çıkarımını Güçlendirme
Tobias Hoffmann
Tobias Hoffmann

Posted on • Originally published at apidog.com

vLLM Nedir? Hızlı ve Ölçeklenebilir API'ler İçin LLM Çıkarımını Güçlendirme

Büyük Dil Modeli (LLM) uygulamaları geliştiriyorsanız ve çıkarım gecikmesi, GPU bellek sınırları veya yüksek eşzamanlı kullanıcı trafiğiyle uğraşıyorsanız, vLLM üretime yakın LLM servisleri için güçlü bir çıkarım motorudur. Bu rehberde vLLM’in ne işe yaradığını, nasıl kurulduğunu, toplu çıkarımda nasıl kullanıldığını ve OpenAI uyumlu bir API sunucusu olarak nasıl çalıştırılacağını adım adım göreceksiniz.

Apidog'u bugün deneyin

vLLM Nedir? LLM API'leri İçin Neden Önemli?

vLLM, büyük dil modellerini yüksek verimle sunmak için geliştirilmiş açık kaynaklı bir çıkarım motorudur. Özellikle API ve arka uç ekipleri için iki temel problemi hedefler:

  • Yavaş çıkarım: Çok sayıda eşzamanlı istek veya büyük toplu işler altında gecikme artar.
  • Yüksek GPU bellek kullanımı: Geleneksel dikkat mekanizmaları KV önbelleği nedeniyle VRAM’i verimsiz kullanabilir.

vLLM’in öne çıkan iki optimizasyonu:

  • PagedAttention: KV önbelleğini sayfalara bölerek bellek parçalanmasını ve boşa harcanan VRAM’i azaltır.
  • Sürekli gruplama (continuous batching): İstekleri dinamik olarak gruplar; GPU boş kaldığında yeni istekleri hemen işleme alır.

Pratik olarak vLLM’i, kendi barındırdığınız LLM modelleri için yüksek performanslı bir API arka ucu gibi düşünebilirsiniz.

API Geliştiricileri ve Arka Uç Mühendisleri Neden vLLM Kullanıyor?

vLLM, LLM servislerini üretime taşırken şu avantajları sağlar:

  • Daha yüksek verim: Aynı donanımla daha fazla isteğe yanıt verebilirsiniz.
  • Daha verimli GPU kullanımı: Daha büyük modelleri çalıştırabilir veya mevcut iş yükünüz için donanım maliyetini azaltabilirsiniz.
  • Dinamik istek işleme: Statik batch bekleme süreleri yerine gerçek trafiğe uyum sağlar.
  • OpenAI uyumlu API: OpenAI istemcileriyle benzer uç noktalar üzerinden kendi modelinizi sunabilirsiniz.
  • Toplu ve gerçek zamanlı kullanım: Hem offline batch inference hem de canlı API servisleri için uygundur.
  • Geniş model desteği: Hugging Face ve ModelScope üzerindeki Llama, Mistral, Qwen, OPT, Falcon gibi birçok modeli destekler.
  • Aktif açık kaynak ekosistemi: Sık güncellemeler ve genişleyen model/özellik desteği sunar.

Desteklenen modellerin güncel listesi için vLLM belgelerindeki desteklenen modeller sayfasına bakın.

İpucu: LLM destekli API’ler geliştiriyor veya test ediyorsanız, Apidog ile uç noktalarınızı tasarlayabilir, test edebilir ve dokümante edebilirsiniz. vLLM, OpenAI veya özel bir arka uç kullanıyor olmanız fark etmeksizin API işbirliği ve kalite güvence süreçlerini daha yönetilebilir hale getirir.

Desteklenen LLM'ler: Hangi Modeller vLLM ile Çalışır?

vLLM, birçok transformer tabanlı modeli destekler. Yaygın örnekler:

  • Llama serisi: Llama, Llama 2, Llama 3
  • Mistral ve Mixtral
  • Qwen ve Qwen2
  • GPT-2, GPT-J, GPT-NeoX
  • OPT
  • Bloom
  • Falcon
  • MPT
  • Çok modlu modeller dahil diğer modeller

Uyumluluk sürekli değiştiği için üretim öncesinde resmi vLLM Desteklenen Modeller Listesi'ni kontrol edin.

Not: Modeliniz listede yoksa ancak desteklenen bir modelle aynı mimariye sahipse çalışabilir. Yine de önce küçük bir test ortamında doğrulayın. Özel mimariler için vLLM’e kod katkısı gerekebilir.

Temel Kavramlar: PagedAttention ve Sürekli Gruplama

vLLM’i doğru kullanmak için iki kavramı bilmek önemlidir.

PagedAttention

Problem: Geleneksel dikkat mekanizmaları KV önbelleğini bitişik bellek bloklarında tutar. Bu, GPU belleğinde parçalanmaya ve gereksiz VRAM kullanımına yol açabilir.

Çözüm: PagedAttention, işletim sistemlerindeki sanal bellek mantığına benzer şekilde KV önbelleğini sayfalara böler. Böylece bellek daha esnek yönetilir, ortak önekler paylaşılabilir ve bellek kullanımı ciddi şekilde azalabilir.

Sürekli Gruplama

Problem: Statik batch yaklaşımında sistem, batch dolana kadar bekleyebilir. Bu da hem gecikmeyi artırır hem de GPU’nun boş kalmasına neden olabilir.

Çözüm: Sürekli gruplama, GPU kaynakları uygun oldukça yeni istekleri işleme dahil eder. Bu yaklaşım, özellikle gerçek zamanlı API trafiğinde verimi artırır.

Önkoşullar: vLLM Kurulumundan Önce Gerekenler

Başlamadan önce ortamınızı kontrol edin:

  • İşletim sistemi: Linux önerilir. WSL2 ve macOS mümkün olsa da Linux en iyi desteklenen ortamdır.
  • Python: 3.9, 3.10, 3.11 veya 3.12.
  • Sanal ortam: Proje bağımlılıklarını izole etmek için venv, conda veya uv kullanın.
  • NVIDIA GPU + CUDA: En iyi performans için gereklidir. CPU ve diğer hızlandırıcı destekleri sınırlı veya deneysel olabilir.
  • PyTorch: vLLM uyumlu PyTorch sürümünü kurabilir. Özel CUDA senaryolarında PyTorch’u önce manuel kurmanız gerekebilir.

GPU durumunu kontrol etmek için:

nvidia-smi
Enter fullscreen mode Exit fullscreen mode

Python sürümünü kontrol etmek için:

python --version
Enter fullscreen mode Exit fullscreen mode

vLLM Nasıl Kurulur?

1. pip ile Kurulum

En basit yöntem:

python -m venv vllm-env
source vllm-env/bin/activate

# Windows:
# vllm-env\Scripts\activate

pip install vllm
Enter fullscreen mode Exit fullscreen mode

Kurulum, vLLM ve gerekli bağımlılıkları yükler.

2. Conda ile Kurulum

Conda kullanıyorsanız:

conda create -n vllm-env python=3.11 -y
conda activate vllm-env

pip install vllm
Enter fullscreen mode Exit fullscreen mode

Özel CUDA sürümü kullanıyorsanız önce uyumlu PyTorch sürümünü kurup ardından vLLM’i yükleyin.

3. uv ile Kurulum

Daha hızlı kurulum için uv kullanabilirsiniz:

uv venv vllm-env --python 3.12 --seed
source vllm-env/bin/activate

uv pip install vllm
Enter fullscreen mode Exit fullscreen mode

4. Kurulumu Doğrulama

Kurulumdan sonra şu komutları çalıştırın:

python -c "import vllm; print(vllm.__version__)"
vllm --help
Enter fullscreen mode Exit fullscreen mode

Sürüm bilgisi ve CLI yardım çıktısı görünüyorsa kurulum başarılıdır.

vLLM ile Çevrimdışı Toplu Çıkarım

Toplu çıkarım; değerlendirme, veri kümesi üretimi veya çok sayıda prompt’u tek seferde işlemek için uygundur.

Aşağıdaki örnek, bir prompt listesi için çıktı üretir.

from vllm import LLM, SamplingParams

# 1. Prompt listesini tanımlayın
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. Örnekleme parametrelerini ayarlayın
sampling_params = SamplingParams(
    temperature=0.7,
    top_p=0.95,
    max_tokens=150,
    stop=["\n", " Human:", " Assistant:"]
)

# 3. vLLM motorunu başlatın
# GPU belleğinize uygun bir model seçin
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.1")

# 4. Çıktıları üretin
outputs = llm.generate(prompts, sampling_params)

# 5. Sonuçları yazdırın
for output in outputs:
    print("-" * 20)
    print(f"Prompt: {output.prompt!r}")
    print(f"Generated Text: {output.outputs[0].text!r}")
    print("-" * 20)
Enter fullscreen mode Exit fullscreen mode

Pratik ipuçları:

  • vLLM varsayılan olarak Hugging Face Hub modellerini kullanır.
  • ModelScope kullanmak için ortam değişkeni ayarlayın:
export VLLM_USE_MODELSCOPE=1
Enter fullscreen mode Exit fullscreen mode
  • Modelin kendi generation ayarlarını geçersiz kılmak için:
llm = LLM(
    model="mistralai/Mistral-7B-Instruct-v0.1",
    generation_config="vllm"
)
Enter fullscreen mode Exit fullscreen mode
  • AWQ, GPTQ gibi kuantize modeller için hem vLLM belgelerini hem de Hugging Face model kartını kontrol edin.

vLLM'i OpenAI Uyumlu Bir API Sunucusu Olarak Çalıştırma

vLLM’i OpenAI benzeri bir API sunucusu olarak çalıştırabilirsiniz. Bu yaklaşım, mevcut OpenAI istemcileriyle entegrasyonu kolaylaştırır ve model değişimini daha pratik hale getirir.

vLLM Sunucusunu Başlatın

source vllm-env/bin/activate

vllm serve mistralai/Mistral-7B-Instruct-v0.1
Enter fullscreen mode Exit fullscreen mode

Başka bir model için:

vllm serve Qwen/Qwen2-1.5B-Instruct
Enter fullscreen mode Exit fullscreen mode

Varsayılan sunucu adresi:

http://localhost:8000
Enter fullscreen mode Exit fullscreen mode

Yaygın seçenekler:

vllm serve mistralai/Mistral-7B-Instruct-v0.1 \
  --host 0.0.0.0 \
  --port 8000 \
  --api-key my-secret-key
Enter fullscreen mode Exit fullscreen mode

Kullanışlı parametreler:

  • --model <model_adı_veya_yolu>: Sunulacak model.
  • --host 0.0.0.0: Uzaktan erişim için tüm arayüzlere bağlanır.
  • --port 8000: Sunucu portunu belirler.
  • --tensor-parallel-size <N>: Modeli N GPU’ya dağıtır.
  • --api-key <anahtar>: API anahtarı zorunluluğu ekler.
  • --generation-config vllm: vLLM varsayılan üretim parametrelerini kullanır.
  • --chat-template <yol>: Özel sohbet şablonu tanımlar.

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
  }'
Enter fullscreen mode Exit fullscreen mode

API anahtarı kullandıysanız:

curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer my-secret-key" \
  -d '{
    "model": "mistralai/Mistral-7B-Instruct-v0.1",
    "prompt": "Explain the benefits of using vLLM:",
    "max_tokens": 100,
    "temperature": 0.5
  }'
Enter fullscreen mode Exit fullscreen mode

Python Örneği

from openai import OpenAI

client = OpenAI(
    api_key="EMPTY",
    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)
Enter fullscreen mode Exit fullscreen mode

API anahtarı kullanıyorsanız:

client = OpenAI(
    api_key="my-secret-key",
    base_url="http://localhost:8000/v1"
)
Enter fullscreen mode Exit fullscreen mode

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
  }'
Enter fullscreen mode Exit fullscreen mode

Python Örneği

from openai import OpenAI

client = OpenAI(
    api_key="EMPTY",
    base_url="http://localhost:8000/v1"
)

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)
Enter fullscreen mode Exit fullscreen mode

Apidog ile bu uç noktaları tanımlayabilir, örnek istekler oluşturabilir, response şemalarını dokümante edebilir ve ekip içinde test senaryolarını paylaşabilirsiniz.

vLLM Dikkat Arka Uçları: FlashAttention, xFormers ve FlashInfer

vLLM, hız ve bellek verimliliği için farklı dikkat arka uçlarını destekler:

  • FlashAttention 1/2: Modern NVIDIA GPU’larda genellikle hızlı ve bellek açısından verimlidir.
  • xFormers: Daha geniş uyumluluk sağlayabilir; bazı donanımlarda iyi bir yedektir.
  • FlashInfer: Gelişmiş bir seçenek olarak kullanılabilir; manuel kurulum gerekebilir.

vLLM çoğu durumda donanım ve modele göre uygun arka ucu otomatik seçer.

Bir arka ucu manuel zorlamak için sunucuyu çalıştırmadan önce VLLM_ATTENTION_BACKEND değişkenini ayarlayın:

export VLLM_ATTENTION_BACKEND=FLASH_ATTN
vllm serve mistralai/Mistral-7B-Instruct-v0.1
Enter fullscreen mode Exit fullscreen mode

Alternatifler:

export VLLM_ATTENTION_BACKEND=XFORMERS
Enter fullscreen mode Exit fullscreen mode
export VLLM_ATTENTION_BACKEND=FLASHINFER
Enter fullscreen mode Exit fullscreen mode

Yaygın vLLM Sorunlarını Giderme

1. CUDA Bellek Yetersizliği Hataları

Belirti:

CUDA out of memory
Enter fullscreen mode Exit fullscreen mode

Deneyebileceğiniz çözümler:

  • Daha küçük bir model kullanın.
  • max_tokens değerini azaltın.
  • Eşzamanlı istek sayısını düşürün.
  • Kuantize edilmiş modelleri değerlendirin: AWQ, GPTQ vb.
  • Modeli birden fazla GPU’ya dağıtın:
vllm serve mistralai/Mistral-7B-Instruct-v0.1 \
  --tensor-parallel-size 2
Enter fullscreen mode Exit fullscreen mode
  • GPU’da başka işlem var mı kontrol edin:
nvidia-smi
Enter fullscreen mode Exit fullscreen mode

2. Kurulum ve Uyumluluk Sorunları

Kontrol listesi:

3. Model Yükleme Hataları

Kontrol edin:

  • Model adı doğru mu?
mistralai/Mistral-7B-Instruct-v0.1
Enter fullscreen mode Exit fullscreen mode
  • Model özel kod gerektiriyorsa trust_remote_code=True kullanmanız gerekebilir.
  • Önceden indirilmiş model kullanıyorsanız yerel yolu doğru verdiğinizden emin olun.
  • Disk alanını ve internet bağlantısını kontrol edin.

4. Yavaş Çıkarım

İzleme ve optimizasyon adımları:

  • GPU kullanımını izleyin:
nvidia-smi
Enter fullscreen mode Exit fullscreen mode
  • vLLM, CUDA sürücüleri ve bağımlılıkları güncelleyin.
  • Farklı dikkat arka uçlarını deneyin.
  • max_tokens, temperature, top_p gibi parametreleri gözden geçirin.
  • Gerekiyorsa daha küçük veya kuantize model kullanın.

5. Beklenmedik veya Anlamsız Çıktı

Kontrol listesi:

  • Prompt formatı model kartındaki öneriye uygun mu?
  • Chat modeli kullanıyorsanız doğru chat template uygulanıyor mu?
  • temperature ve top_p değerleri çok yüksek mi?
  • Aynı prompt’u farklı bir modelle test ederek sorunu izole 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 bu API’leri tasarlama, test etme ve dokümante etme sürecini daha düzenli yönetebilirsiniz.

Pratik bir iş akışı şöyle olabilir:

  1. vLLM ile modeli lokal veya sunucu ortamında çalıştırın.
  2. /v1/completions ve /v1/chat/completions uç noktalarını test edin.
  3. API istek/yanıt örneklerini Apidog’da tanımlayın.
  4. Takım içinde test senaryolarını ve dokümantasyonu paylaşın.
  5. Trafik ve GPU kullanımına göre model, batch ve sampling ayarlarını optimize edin.

vLLM’in gelişmiş özellikleri için kuantizasyon, çoklu LoRA, dağıtılmış servis ve spekülatif kod çözme gibi konuları resmi belgelerde inceleyebilirsiniz.

Top comments (0)