vLLM Quickstart: Högpresterande LLM-server – 2026
Snabb LLM-inferens med OpenAI API
vLLM är en höggenomströmningsbar, minneseffektiv inferens- och servermotor för stora språkmodeller (LLM) utvecklad av UC Berkeley’s Sky Computing Lab.
Med sin revoluerande PagedAttention-algoritm uppnår vLLM 14-24 gånger högre genomströmning än traditionella servermetoder, vilket gör det till det förutsägbara valet för produktionsdistribution av LLM.

Vad är vLLM?
vLLM (virtuell LLM) är en öppen källkodsbibliotek för snabb LLM-inferens och server som snabbt har blivit industristandarden för produktionsdistribution. Utgivet 2023 introducerade det PagedAttention, en revolutionerande minneshanteringsmetod som dramatiskt förbättrar servereffektiviteten.
Viktiga funktioner
Hög genomströmningseffektivitet: vLLM levererar 14-24 gånger högre genomströmning jämfört med HuggingFace Transformers med samma hårdvara. Den stora prestandavinsten kommer från kontinuerlig batchning, optimerade CUDA-kärnor och PagedAttention-algoritmen som eliminerar minnesfragmentering.
OpenAI API-kompatibilitet: vLLM innehåller en inbyggd API-server som är helt kompatibel med OpenAI:s format. Detta möjliggör en sömlös migration från OpenAI till självvärd infrastruktur utan att behöva ändra applikationskod. Enkelt peka din API-klient till vLLM:s endpoint och det fungerar transparent.
PagedAttention-algoritm: Den centrala innovationen bakom vLLM:s prestanda är PagedAttention, som tillämpar konceptet av virtuell minnespaging på uppmärksamhetsmekanismer. Istället för att tilldela kontinuerliga minnesblock för KV-cache (vilket leder till fragmentering), delar PagedAttention minnet i fasta storleksblock som kan tilldelas efter behov. Detta minskar minnesförluster upp till 4 gånger och möjliggör mycket större batchstorlekar.
Kontinuerlig batchning: Skiljer sig från statisk batchning där du väntar på att alla sekvenser ska slutföras, använder vLLM kontinuerlig (rollande) batchning. När en sekvens är klar kan en ny läggas till batchen. Detta maximiserar GPU-användning och minskar latens för inkommande förfrågningar.
Stöd för flera GPU:er: vLLM stöder tensorparallellitet och pipelineparallellitet för att distribuera stora modeller över flera GPU:er. Den kan effektivt servera modeller som inte får plats i en enskild GPU:s minne, stödjer konfigurationer från 2 till 8+ GPU:er.
Brett modellstöd: Kompatibel med populära modellarkitekturer inklusive LLaMA, Mistral, Mixtral, Qwen, Phi, Gemma och många andra. Stöder både instruktionstunade och basmodeller från HuggingFace Hub.
När att använda vLLM
vLLM är utmärkt i specifika scenarier där dess styrkor skenar:
Produktions-API-tjänster: När du behöver servera en LLM till många samtidiga användare via API, gör vLLM:s höga genomströmning och effektiva batchningar det bästa valet. Företag som kör chatbotar, kodassistenters eller innehållsgenererande tjänster fördelar sig av dess förmåga att hantera hundratals förfrågningar per sekund.
Höghalvårsbelastade arbetsbelastningar: Om din applikation har många samtidiga användare som gör förfrågningar, gör vLLM:s kontinuerliga batchning och PagedAttention möjligt att servera fler användare med samma hårdvara jämfört med alternativ.
Kostnadsminimering: När GPU-kostnader är en oro, ger vLLM:s överlägsna genomströmning möjlighet att servera samma trafik med färre GPU:er, vilket direkt minskar infrastrukturkostnader. Den 4 gånger större minneseffektiviteten från PagedAttention gör det också möjligt att använda mindre, billigare GPU-instanser.
Kubernetes-distributioner: vLLM:s statlösa design och containervänliga arkitektur gör det idealiskt för Kubernetes-kluster. Den konsekventa prestandan under belastning och enkel resurshantering integrerar väl med molnstandardiserad infrastruktur.
När inte att använda vLLM: För lokal utveckling, experiment eller enskilda användarfall, ger verktyg som Ollama bättre användarupplevelse med enklare installation. vLLM:s komplexitet motiveras när du behöver dess prestandaavancer för produktionsarbetsbelastningar.
Hur att installera vLLM
Förutsättningar
Innan du installerar vLLM, se till att din system uppfyller dessa krav:
- GPU: NVIDIA GPU med beräkningskapacitet 7.0+ (V100, T4, A10, A100, H100, RTX 20/30/40 serie)
- CUDA: Version 11.8 eller högre
- Python: 3.8 till 3.11
- VRAM: Minst 16 GB för 7B-modeller, 24 GB+ för 13B, 40 GB+ för större modeller
- Drivrutin: NVIDIA-drivrutin 450.80.02 eller nyare
Installation via pip
Den enklaste installationsmetoden är att använda pip. Detta fungerar på system med CUDA 11.8 eller nyare:
# Skapa en virtuell miljö (rekommenderas)
python3 -m venv vllm-env
source vllm-env/bin/activate
# Installera vLLM
pip install vllm
# Verifiera installation
python -c "import vllm; print(vllm.__version__)"
För system med olika CUDA-versioner, installera den lämpliga wheel:
# För CUDA 12.1
pip install vllm==0.4.2+cu121 -f https://github.com/vllm-project/vllm/releases
# För CUDA 11.8
pip install vllm==0.4.2+cu118 -f https://github.com/vllm-project/vllm/releases
Installation med Docker
Docker ger den mest pålitliga distributionsmetoden, särskilt för produktionsanvändning:
# Hämta den officiella vLLM-bilden
docker pull vllm/vllm-openai:latest
# Kör vLLM med GPU-stöd
docker run --runtime nvidia --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model mistralai/Mistral-7B-Instruct-v0.2
Flaggan --ipc=host är viktig för flera GPU-konfigurationer eftersom den möjliggör korrekt interprocesskommunikation.
Bygg från källkoden
För de senaste funktionerna eller anpassningar, bygg från källkoden:
git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .
Snabbstartsguide för vLLM
Kör din första modell
Starta vLLM med en modell med kommandoradsgränssnittet:
# Ladda ner och servera Mistral-7B med OpenAI-kompatibel API
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mistral-7B-Instruct-v0.2 \
--port 8000
vLLM kommer automatiskt ladda ner modellen från HuggingFace Hub (om den inte är cachelagrad) och starta servern. Du kommer se utskrift som visar att servern är redo:
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000
Gör API-förfrågningar
När servern körs kan du göra förfrågningar med OpenAI Python-klienten eller curl:
Använd curl:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.2",
"prompt": "Förklara vad vLLM är i en mening:",
"max_tokens": 100,
"temperature": 0.7
}'
Använd OpenAI Python-klient:
from openai import OpenAI
# Peka till din vLLM-server
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed" # vLLM kräver inte autentisering som standard
)
response = client.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
prompt="Förklara vad vLLM är i en mening:",
max_tokens=100,
temperature=0.7
)
print(response.choices[0].text)
Chat Completions API:
response = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
messages=[
{"role": "system", "content": "Du är en hjälpsam assistent."},
{"role": "user", "content": "Vad är PagedAttention?"}
],
max_tokens=200
)
print(response.choices[0].message.content)
Avancerad konfiguration
vLLM erbjuder många parametrar för att optimera prestanda:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mistral-7B-Instruct-v0.2 \
--port 8000 \
--gpu-memory-utilization 0.95 \ # Använd 95% av GPU-minnet
--max-model-len 8192 \ # Maximal sekvenslängd
--tensor-parallel-size 2 \ # Använd 2 GPU:er med tensorparallellitet
--dtype float16 \ # Använd FP16 precision
--max-num-seqs 256 # Maximal batchstorlek
Förklaring av viktiga parametrar:
--gpu-memory-utilization: Hur mycket GPU-minne som ska användas (0.90 = 90%). Högre värden tillåter större batchar men lämnar mindre marginal för minnesstigning.--max-model-len: Maximal kontextlängd. Att minska detta sparer minne för större batchar.--tensor-parallel-size: Antal GPU:er att dela modellen över.--dtype: Datatyp för vikter (float16, bfloat16 eller float32). FP16 är vanligtvis optimal.--max-num-seqs: Maximalt antal sekvenser att bearbeta i en batch.
Jämförelse mellan vLLM och Ollama
Såväl vLLM som Ollama är populära alternativ för lokal LLM-värd, men de riktar sig till olika användningsscenarier. Förstå när att använda varje verktyg kan betydligt påverka din projektens framgång.
Prestanda och genomströmning
vLLM är utformad för maximal genomströmning i flera användarscenarier. Dess PagedAttention och kontinuerlig batchning möjliggör att servera hundratals samtidiga förfrågningar effektivt. Benchmarks visar att vLLM uppnår 14-24 gånger högre genomströmning än standardimplementeringar och 2-4 gånger högre än Ollama under hög koncurrent.
Ollama optimerar för enskild användare interaktivt användning med fokus på låg latens för enskilda förfrågningar. Även om det inte matchar vLLM:s flera användar genomströmning, ger det utmärkt prestanda för utveckling och personlig användning med snabbare kallstartstider och lägre ideliga resurshantering.
Enkelhet att använda
Ollama vinner tydligt på enkelhet. Installationen är en enda kommando (curl | sh), och körning av modeller är lika enkel som ollama run llama2. Den innehåller en modellbibliotek med kvantiserade versioner optimerade för olika hårdvaruprofiler. Användarupplevelsen liknar Docker – ladda ner, kör och gå.
vLLM kräver mer konfiguration: Python-miljöhantering, CUDA-installation, förståelse för serverparametrar och manuell modellspecificering. Lärkurvan är stigande, men du får finkontrollerad kontroll över prestandaoptimering. Den här komplexiteten är motiverad för produktionsdistributioner där du behöver pressa ut maximal prestanda från din hårdvara.
API och integration
vLLM tillhandahåller OpenAI-kompatibla REST-API:er som standard, vilket gör det till en drop-in ersättning för OpenAI:s API i befintliga applikationer. Detta är avgörande för att migrera produktions tjänster från molnleverantörer till självvärd infrastruktur utan kodändringar.
Ollama tillhandahåller en enklare REST-API och en dedikerad Python/JavaScript-bibliotek. Även om det fungerar, är det inte OpenAI-kompatibelt, vilket kräver kodändringar vid integration med applikationer som förväntar sig OpenAI:s format. Dock finns communityprojekt som Ollama-OpenAI-adapter som fyller detta gap.
Minneshantering
vLLM:s PagedAttention-algoritm ger överlägsen minneseffektivitet för samtidiga förfrågningar. Den kan servera 2-4 gånger fler samtidiga användare med samma VRAM jämfört med naiva implementeringar. Detta översätts direkt till kostnadsbesparingar i produktionsdistributioner.
Ollama använder enklare minneshantering som är lämplig för enskilda användarfall. Den hanterar modellens laddning/avläsning automatiskt beroende på aktivitet, vilket är bekvämt för utveckling men inte optimalt för högkoncurrent produktionsanvändning.
Stöd för flera GPU:er
vLLM utmärker sig med inbyggd tensorparallellitet och pipelineparallellitet, som effektivt distribuerar modeller över 2-8+ GPU:er. Detta är avgörande för att servera stora modeller som 70B parameter LLM:er som inte får plats i en enskild GPU.
Ollama har begränsat stöd för flera GPU:er, främst fungerar bäst med en enda GPU. Detta gör det mindre lämpligt för mycket stora modeller som kräver distribuerad inferens.
Rekommendationer för användning
Välj vLLM när:
- Du serverar produktions-API:er med många samtidiga användare
- Du optimerar kostnad per förfrågan i moln distributioner
- Du kör i Kubernetes eller containerorchestratorplattformar
- Du behöver OpenAI API-kompatibilitet för befintliga applikationer
- Du serverar stora modeller som kräver flera GPU-stöd
- Prestanda och genomströmning är kritiska krav
Välj Ollama när:
- Du gör lokal utveckling och experiment
- Du använder enskilda användare interaktivt (personliga assistenter, chatbotar)
- Du gör snabb prototyper och modellbedömning
- Du lär dig om LLM:er utan infrastrukturkomplexitet
- Du kör på personliga arbetsstationer eller laptopar
- Enkelhet och enkelhet är prioriteringar
Många team använder båda: Ollama för utveckling och experiment, sedan vLLM för produktionsdistribution. Detta kombination ger utvecklare produktivitet samtidigt som produktionsprestanda behålls.
Jämförelse mellan vLLM och Docker Model Runner
Docker har nyligen introducerat Model Runner (tidigare GenAI Stack) som deras officiella lösning för lokal AI-modelldistribution. Hur jämförs det med vLLM?
Arkitekturfilosofi
Docker Model Runner syftar till att vara “Docker för AI” – en enkel, standardiserad sätt att köra AI-modeller lokalt med samma enkelhet som att köra behållare. Den abstraherar bort komplexitet och ger en konsekvent gränssnitt över olika modeller och ramverk.
vLLM är en specialiserad inferensmotor fokuserad endast på LLM-servering med maximal prestanda. Det är ett lägre nivåverktyg som du behåller i Docker, snarare än ett komplett plattform.
Setup och start
Docker Model Runner installation är enkel för Docker-användare:
docker model pull llama3:8b
docker model run llama3:8b
Den här likheten med Docks imagearbetsflöde gör det omedelbart bekant för utvecklare som redan använder behållare.
vLLM kräver mer initial konfiguration (Python, CUDA, beroenden) eller använda förinstallerade Docker-bilder:
docker pull vllm/vllm-openai:latest
docker run --runtime nvidia --gpus all vllm/vllm-openai:latest --model <model-name>
Prestandakarakteristika
vLLM levererar överlägsen genomströmning för flera användarfall tack vare PagedAttention och kontinuerlig batchning. För produktions-API-tjänster som hanterar hundratals förfrågningar per sekund, ger vLLM:s optimeringar 2-5 gånger bättre genomströmning än generiska servermetoder.
Docker Model Runner fokuserar på enkelhet snarare än maximal prestanda. Det är lämpligt för lokal utveckling, testning och måttliga arbetsbelastningar, men implementerar inte de avancerade optimeringarna som gör att vLLM utmärker sig vid skala.
Modellstöd
Docker Model Runner tillhandahåller en urvalmodellbibliotek med enkommandotillgång till populära modeller. Den stöder flera ramverk (inte bara LLM:er) inklusive Stable Diffusion, Whisper och andra AI-modeller, vilket gör den mer mångsidig för olika AI-arbetsbelastningar.
vLLM specialiserar sig på LLM-inferens med djup stöd för transformerbaserade språkmodeller. Den stöder alla HuggingFace-kompatibla LLM:er men inte utökar till andra AI-modelltyper som bildgenerering eller talsyntes.
Produktionsdistribution
vLLM har testats i produktion vid företag som Anthropic, Replicate och många andra som serverar miljarder token dagligen. Dess prestandakarakteristika och stabilitet vid tung belastning gör det till den etablerade standarden för produktionsdistribution av LLM:er.
Docker Model Runner är nyare och positionerar sig mer för utveckling och lokalt testscenario. Även om det kan servera produktionstrafik, saknar det den beprövade historiken och prestandaoptimeringarna som produktionsdistributioner kräver.
Integrationsekosystem
vLLM integrerar med produktionsinfrastrukturverktyg: Kubernetes operatorer, Prometheus-mått, Ray för distribuerad servering och omfattande OpenAI API-kompatibilitet för befintliga applikationer.
Docker Model Runner integrerar naturligt med Docks ekosystem och Docker Desktop. För team som redan standardiserats på Docker, ger denna integration en sammanhängande upplevelse men färre specialiserade LLM-serverfunktioner.
När att använda varje
Använd vLLM för:
- Produktions-API-tjänster för LLM
- Höggenomströmningsbara, flera användar distributioner
- Kostnadssänkta moln distributioner som behöver maximal effektivitet
- Kubernetes och molnstandardiserade miljöer
- När du behöver beprövad skalan och prestanda
Använd Docker Model Runner för:
- Lokal utveckling och testning
- Kör olika AI-modelltyper (inte bara LLM:er)
- Team som starkt investerat i Docker-ekosystemet
- Snabb experimentering utan infrastrukturkonfiguration
- Lärande och pedagogiska syften
Hybridansats: Många team utvecklar med Docker Model Runner lokalt för bekvämlighet, sedan distribuerar med vLLM i produktion för prestanda. Docker Model Runner-bilder kan också användas för att köra vLLM-behållare, kombinerar båda tillvägagångssätten.
Bästa praxis för produktionsdistribution
Docker-distribution
Skapa en produktionsklar Docker Compose-konfiguration:
version: '3.8'
services:
vllm:
image: vllm/vllm-openai:latest
runtime: nvidia
environment:
- CUDA_VISIBLE_DEVICES=0,1
volumes:
- ~/.cache/huggingface:/root/.cache/huggingface
- ./logs:/logs
ports:
- "8000:8000"
command: >
--model mistralai/Mistral-7B-Instruct-v0.2
--tensor-parallel-size 2
--gpu-memory-utilization 0.90
--max-num-seqs 256
--max-model-len 8192
restart: unless-stopped
shm_size: '16gb'
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 2
capabilities: [gpu]
Kubernetes-distribution
Distribuera vLLM på Kubernetes för produktionsstora:
apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-server
spec:
replicas: 2
selector:
matchLabels:
app: vllm
template:
metadata:
labels:
app: vllm
spec:
containers:
- name: vllm
image: vllm/vllm-openai:latest
args:
- --model
- mistralai/Mistral-7B-Instruct-v0.2
- --tensor-parallel-size
- "2"
- --gpu-memory-utilization
- "0.90"
resources:
limits:
nvidia.com/gpu: 2
ports:
- containerPort: 8000
volumeMounts:
- name: cache
mountPath: /root/.cache/huggingface
volumes:
- name: cache
hostPath:
path: /mnt/huggingface-cache
---
apiVersion: v1
kind: Service
metadata:
name: vllm-service
spec:
selector:
app: vllm
ports:
- port: 80
targetPort: 8000
type: LoadBalancer
Övervakning och insikter
vLLM exponerar Prometheus-mått för övervakning:
import requests
# Hämta mått
metrics = requests.get("http://localhost:8000/metrics").text
print(metrics)
Viktiga mått att övervaka:
vllm:num_requests_running- Aktiva förfrågningarvllm:gpu_cache_usage_perc- KV-cacheanvändningvllm:time_to_first_token- Latensmåttvllm:time_per_output_token- Genereringshastighet
Prestandatuning
Optimera GPU-minnesanvändning: Starta med --gpu-memory-utilization 0.90 och justera baserat på observerad beteende. Högre värden tillåter större batchar men riskerar OOM-fel under trafikspikar.
Justera maximal sekvenslängd: Om din användningsscenarie inte kräver full kontextlängd, minska --max-model-len. Detta frigör minne för större batchar. Till exempel, om du bara behöver 4K kontext, sätt --max-model-len 4096 istället för att använda modellens maximala (ofta 8K-32K).
Välj lämplig kvantisering: För modeller som stöder det, använd kvantiseringade versioner (8-bit, 4-bit) för att minska minne och öka genomströmning:
--quantization awq # För AWQ kvantiseringade modeller
--quantization gptq # För GPTQ kvantiseringade modeller
Aktivera prefixcachning: För applikationer med upprepade promptar (som chatbotar med systemmeddelanden), aktivera prefixcachning:
--enable-prefix-caching
Detta cachelagrar KV-värdena för vanliga prefix, vilket minskar beräkning för förfrågningar som delar samma promptprefix.
Felsökning vanliga problem
Minnesfel
Symtom: Servern kraschar med CUDA minnesfel.
Lösningar:
- Minska
--gpu-memory-utilizationtill 0.85 eller 0.80 - Minska
--max-model-lenom din användningsscenarie tillåter det - Lägg ned
--max-num-seqsför att minska batchstorlek - Använd en kvantiseringad modellversion
- Aktivera tensorparallellitet för att distribuera över fler GPU:er
Låg genomströmning
Symtom: Servern hanterar färre förfrågningar än förväntat.
Lösningar:
- Öka
--max-num-seqsför att tillåta större batchar - Höj
--gpu-memory-utilizationom du har utrymme - Kontrollera om CPU är begränsad med
htop– överväg snabbare CPU:er - Verifiera GPU-användning med
nvidia-smi– bör vara 95%+ - Aktivera FP16 om du använder FP32:
--dtype float16
Lång första tokenstid
Symtom: Hög latens innan genereringen börjar.
Lösningar:
- Använd mindre modeller för latenskritiska applikationer
- Aktivera prefixcachning för upprepade promptar
- Minska
--max-num-seqsför att prioritera latens över genomströmning - Överväg spekulative dekodning för stödda modeller
- Optimera tensorparallellitet konfiguration
Modellbelastningsfel
Symtom: Servern kan inte starta, kan inte ladda modellen.
Lösningar:
- Verifiera att modellnamnet matchar HuggingFace-formatet exakt
- Kontrollera nätverksanslutningen till HuggingFace Hub
- Se till att det finns tillräckligt med diskutrymme i
~/.cache/huggingface - För låsta modeller, sätt
HF_TOKENmiljövariabel - Försök manuellt ladda ner med
huggingface-cli download <model>
Avancerade funktioner
Spekulativ dekodning
vLLM stöder spekulativ dekodning, där en mindre draftmodell föreslår token som en större målmall verifierar. Detta kan accelerera genereringen med 1,5-2 gånger:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-70b-chat-hf \
--speculative-model meta-llama/Llama-2-7b-chat-hf \
--num-speculative-tokens 5
LoRA-adapter
Servera flera LoRA-adapter på toppen av en basmodell utan att ladda flera fulla modeller:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-hf \
--enable-lora \
--lora-modules sql-lora=./path/to/sql-adapter \
code-lora=./path/to/code-adapter
Sedan specifiera vilken adapter att använda per förfrågan:
response = client.completions.create(
model="sql-lora", # Använd SQL-adaptern
prompt="Konvertera detta till SQL: Visa mig alla användare skapade denna månad"
)
Multi-LoRA-servering
vLLM:s multi-LoRA-servering möjliggör att värd flera finjusterade adapter med minimal minnesöverbelastning. Detta är idealiskt för att servera kundspecifika eller uppgiftsspecifika modellvarianter:
# Förfrågan med specifik LoRA-adapter
response = client.chat.completions.create(
model="meta-llama/Llama-2-7b-hf",
messages=[{"role": "user", "content": "Skriv SQL-fråga"}],
extra_body={"lora_name": "sql-lora"}
)
Prefixcachning
Aktivera automatisk prefixcachning för att undvika återberäkning av KV-cache för upprepade promptprefix:
--enable-prefix-caching
Detta är särskilt effektivt för:
- Chatbotar med fasta systempromptar
- RAG-applikationer med konsekventa kontextmallar
- Fåshot learning promptar som upprepas över förfrågningar
Prefixcachning kan minska tid till första token med 50-80% för förfrågningar som delar promptprefix.
Integrationsexempel
LangChain-integration
from langchain.llms import VLLMOpenAI
llm = VLLMOpenAI(
openai_api_key="EMPTY",
openai_api_base="http://localhost:8000/v1",
model_name="mistralai/Mistral-7B-Instruct-v0.2",
max_tokens=512,
temperature=0.7,
)
response = llm("Förklara PagedAttention enkelt")
print(response)
LlamaIndex-integration
from llama_index.llms import VLLMServer
llm = VLLMServer(
api_url="http://localhost:8000/v1",
model="mistralai/Mistral-7B-Instruct-v0.2",
temperature=0.7,
max_tokens=512
)
response = llm.complete("Vad är vLLM?")
print(response)
FastAPI-applikation
from fastapi import FastAPI
from openai import AsyncOpenAI
app = FastAPI()
client = AsyncOpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed"
)
@app.post("/generate")
async def generate(prompt: str):
response = await client.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
prompt=prompt,
max_tokens=200
)
return {"result": response.choices[0].text}
Prestandabenchmärkningar
Verkliga prestandadata hjälper till att illustrera vLLM:s fördelar:
Genomströmningsskillnad (Mistral-7B på A100 GPU):
- vLLM: ~3 500 token/sekund med 64 samtidiga användare
- HuggingFace Transformers: ~250 token/sekund med samma koncurrent
- Ollama: ~1 200 token/sekund med samma koncurrent
- Resultat: vLLM ger 14 gånger förbättring jämfört med grundläggande implementeringar
Minneseffektivitet (LLaMA-2-13B):
- Standardimplementering: 24 GB VRAM, 32 samtidiga sekvenser
- vLLM med PagedAttention: 24 GB VRAM, 128 samtidiga sekvenser
- Resultat: 4 gånger fler samtidiga förfrågningar med samma minne
Latens under belastning (Mixtral-8x7B på 2xA100):
- vLLM: P50-latens 180 ms, P99-latens 420 ms vid 100 req/s
- Standardservering: P50-latens 650 ms, P99-latens 3 200 ms vid 100 req/s
- Resultat: vLLM behåller konsekvent latens under hög belastning
Dessa benchmärkningar visar varför vLLM har blivit den etablerade standarden för produktionsservering av LLM där prestanda är avgörande.
Kostnadsanalys
Förstå kostnadsaspekterna av att välja vLLM:
Scenario: Servera 1M förfrågningar/dag
Med standardservering:
- Krävs: 8x A100 GPU:er (80 GB)
- AWS kostnad: ~$32/timme × 24 × 30 = $23 040/månad
- Kostnad per 1M token: ~$0,75
Med vLLM:
- Krävs: 2x A100 GPU:er (80 GB)
- AWS kostnad: ~$8/timme × 24 × 30 = $5 760/månad
- Kostnad per 1M token: ~$0,19
- Sparing: $17 280/månad (75% minskning)
Denna kostnadsfördel växer med skala. Organisationer som serverar miljarder token per månad sparar hundratals tusen dollar genom att använda vLLM:s optimerade servering istället för naiva implementeringar.
Säkerhetsaspekter
Autentisering
vLLM innehåller inte autentisering som standard. För produktionsanvändning, implementera autentisering på omvänd proxy-nivå:
# Nginx-konfiguration
location /v1/ {
auth_request /auth;
proxy_pass http://vllm-backend:8000;
}
location /auth {
proxy_pass http://auth-service:8080/verify;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
Eller använd API-gateways som Kong, Traefik eller AWS API Gateway för företagsnivå autentisering och ratelimiting.
Nätverksisolation
Kör vLLM i privata nätverk, inte direkt exponerat till internet:
# Kubernetes NetworkPolicy-exempel
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: vllm-access
spec:
podSelector:
matchLabels:
app: vllm
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: api-gateway
ports:
- protocol: TCP
port: 8000
Ratelimiting
Implementera ratelimiting för att förhindra missbruk:
# Exempel med Redis för ratelimiting
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
import redis
from datetime import datetime, timedelta
app = FastAPI()
redis_client = redis.Redis(host='localhost', port=6379)
@app.middleware("http")
async def rate_limit_middleware(request, call_next):
client_ip = request.client.host
key = f"rate_limit:{client_ip}"
requests = redis_client.incr(key)
if requests == 1:
redis_client.expire(key, 60) # 60 sekunders fönster
if requests > 60: # 60 förfrågningar per minut
raise HTTPException(status_code=429, detail="Rate limit exceeded")
return await call_next(request)
Modellåtkomstkontroll
För flera hyresgästers distributioner, kontrollera vilka användare som får åtkomst till vilka modeller:
ALLOWED_MODELS = {
"user_tier_1": ["mistralai/Mistral-7B-Instruct-v0.2"],
"user_tier_2": ["mistralai/Mistral-7B-Instruct-v0.2", "meta-llama/Llama-2-13b-chat-hf"],
"admin": ["*"] # Alla modeller
}
def verify_model_access(user_tier: str, model: str) -> bool:
allowed = ALLOWED_MODELS.get(user_tier, [])
return "*" in allowed or model in allowed
Migreringsguide
Från OpenAI till vLLM
Migrera från OpenAI till självvärd vLLM är enkel tack vare API-kompatibilitet:
Före (OpenAI):
from openai import OpenAI
client = OpenAI(api_key="sk-...")
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "Hej"}]
)
Efter (vLLM):
from openai import OpenAI
client = OpenAI(
base_url="https://your-vllm-server.com/v1",
api_key="your-internal-key" # Om du läggt till autentisering
)
response = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
messages=[{"role": "user", "content": "Hej"}]
)
Endast två ändringar behövs: uppdatera base_url och model namn. All annan kod förblir identisk.
Från Ollama till vLLM
Ollama använder ett annat API-format. Här är konverteringen:
Ollama API:
import requests
response = requests.post('http://localhost:11434/api/generate',
json={
'model': 'llama2',
'prompt': 'Varför är himlen blå?'
})
vLLM ekvivalent:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
response = client.completions.create(
model="meta-llama/Llama-2-7b-chat-hf",
prompt="Varför är himlen blå?"
)
Du måste uppdatera API-anropen genom hela din kodbas, men OpenAI-klientbiblioteken ger bättre felhantering och funktioner.
Från HuggingFace Transformers till vLLM
Direkt Python-användning migrering:
HuggingFace:
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
inputs = tokenizer("Hej", return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=100)
result = tokenizer.decode(outputs[0])
vLLM:
from vllm import LLM, SamplingParams
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.2")
sampling_params = SamplingParams(max_tokens=100)
outputs = llm.generate("Hej", sampling_params)
result = outputs[0].outputs[0].text
vLLM:s Python-API är enklare och mycket snabbare för batchinferens.
Framtiden för vLLM
vLLM fortsätter snabb utveckling med spännande funktioner på vägen:
Delade servering: Att separera prefill (promptbearbetning) och decode (tokengenerering) till olika GPU:er för att optimera resurshantering. Prefill är beräkningsbegränsad medan decode är minnesbegränsad, så att köras på specialiserad hårdvara förbättrar effektiviteten.
Multi-nod inferens: Att distribuera mycket stora modeller (100B+ parametrar) över flera maskiner, vilket möjliggör servering av modeller som är för stora för enskilda nodkonfigurationer.
Förbättrad kvantisering: Stöd för nya kvantiseringformer som GGUF (används av llama.cpp) och förbättrad AWQ/GPTQ-integration för bättre prestanda med kvantiseringade modeller.
Spekulativ dekodning förbättringar: Mer effektiva draftmodeller och anpassade spekulativa strategier för att uppnå högre hastighetsförbättringar utan att förlora noggrannhet.
Uppmärksamhetsoptimeringar: FlashAttention 3, ringuppmärksamhet för extremt långa kontexter (100K+ token) och andra avancerade uppmärksamhetsmekanismer.
Bättre modellomfattning: Utvidga stöd till multimodella modeller (bild-språkmodeller), ljudmodeller och specialiserade arkitekturer som de kommer.
vLLM-projektet upprätthåller aktiv utveckling med bidrag från UC Berkeley, Anyscale och den bredare öppen källkodsgemenskapen. Medan LLM-distribution blir allt mer kritisk för produktionsystem, fortsätter vLLM:s roll som prestandastandard att växa.
Några användbara länkar
Relaterade artiklar på den här sidan
-
Lokalt LLM-värd: Komplett 2026-guide – Ollama, vLLM, LocalAI, Jan, LM Studio & Mer – Omfattande jämförelse av 12+ lokala LLM-värdverktyg inklusive detaljerad analys av vLLM tillsammans med Ollama, LocalAI, Jan, LM Studio och andra. Omfattar API-mognad, stöd för verktygsanrop, GGUF-kompatibilitet och prestandabenchmark för att hjälpa till att välja rätt lösning.
-
Ollama CheatSheet – Komplett Ollama kommandoreferens och cheat sheet som täcker installation, modellhantering, API-användning och bästa praxis för lokal LLM-distribution. Nödvändigt för utvecklare som använder Ollama tillsammans med eller istället för vLLM.
-
Docker Model Runner vs Ollama: Vilket ska man välja? – In-depth jämförelse av Dockers Model Runner och Ollama för lokal LLM-distribution, analyserar prestanda, GPU-stöd, API-kompatibilitet och användningsfall. Hjälper till att förstå den konkurrenskraftiga landskaps som vLLM opererar i.
-
Docker Model Runner CheatSheet: Kommandon & Exempel – Praktisk Docker Model Runner cheat sheet med kommandon och exempel för AI-modelldistribution. Användbart för team som jämför Dockers metod med vLLMs specialiserade LLM-serverfunktioner.
Externa resurser och dokumentation
-
vLLM GitHub-repo – Officiell vLLM-repo med källkod, omfattande dokumentation, installationsguider och aktiva gemenskapsdiskussioner. Nödvändigt resurs för att hålla sig uppdaterad med de senaste funktionerna och felsöka problem.
-
vLLM Dokumentation – Officiell dokumentation som täcker alla aspekter av vLLM från grundläggande konfiguration till avancerad inställning. Inkluderar API-referenser, prestandatuningsguider och distributionsbästa praxis.
-
PagedAttention Paper – Akademiskt papper som introducerar PagedAttention-algoritmen som driver vLLMs effektivitet. Nödvändigt läsning för att förstå de tekniska innovationerna bakom vLLMs prestanda.
-
vLLM Blog – Officiell vLLM-blogg med utgivningsannonser, prestandabenchmark, tekniska djupdyk och gemenskapsfallstudier från produktionsdistributioner.
-
HuggingFace Model Hub – Omfattande databas av öppen källkod LLM som fungerar med vLLM. Sök efter modeller efter storlek, uppgift, licens och prestandaegenskaper för att hitta rätt modell för din användningssituation.
-
Ray Serve Dokumentation – Ray Serve ramverk dokumentation för att bygga skalbara, distribuerade vLLM-distributioner. Ray tillhandahåller avancerade funktioner som autoskalning, flermodellservering och resurshantering för produktionsystem.
-
NVIDIA TensorRT-LLM – NVIDIA:s TensorRT-LLM för mycket optimerad inferens på NVIDIA-GPU:er. Alternativ till vLLM med olika optimeringsstrategier, användbart för jämförelse och förståelse av inferensoptimeringslandskapet.
-
OpenAI API Referens – Officiell OpenAI API-dokumentation som vLLM:s API är kompatibel med. Referera till detta när du bygger appar som behöver fungera med både OpenAI och självvärdade vLLM-slutpunkter.