vLLM
Ein Open-Weight-LLM mit vLLM auf einer Node-Lodge-Maschine bereitstellen. Installation mit uv, OpenAI-kompatibler Server, Abfrage über einen SSH-Tunnel.
Stellen Sie ein Open-Weight-Modell hinter einer OpenAI-kompatiblen API bereit.
GPU: 24 GB VRAM oder mehr für das 7B-Modell unten. Zur Dimensionierung siehe LLM-Inferenz.
1. GPU prüfen
nvidia-smi
Die Kopfzeile zeigt den Treiber und die höchste CUDA-Version, die er unterstützt.
2. Installation
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
--torch-backend=auto wählt den PyTorch-Build, der zum installierten Treiber passt.
3. Server starten
Starten Sie den Server in tmux, damit er Verbindungsabbrüche übersteht:
tmux new -s vllm
source .venv/bin/activate
vllm serve Qwen/Qwen2.5-7B-Instruct --max-model-len 8192
Mit Ctrl+b d lösen Sie sich von der tmux-Sitzung. Beim ersten Start werden die Gewichte nach ~/.cache/huggingface heruntergeladen. Der Server ist bereit, sobald er meldet, dass er auf Port 8000 lauscht.
Nützliche Optionen:
| Flag | Zweck |
|---|---|
--tensor-parallel-size 2 |
Verteilt das Modell bei Multi-GPU-Angeboten auf 2 GPUs |
--max-model-len 8192 |
Begrenzt die Kontextlänge, damit der KV-Cache in den VRAM passt |
--gpu-memory-utilization 0.90 |
Anteil des VRAM, den vLLM nutzen darf |
--api-key <secret> |
Verlangt bei jeder Anfrage ein Bearer-Token |
Zugangsbeschränkte Modelle (Llama, Gemma) benötigen ein Hugging-Face-Token:
export HF_TOKEN=hf_...
4. Abfrage auf der Maschine
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-7B-Instruct",
"messages": [{"role": "user", "content": "Say hello in five words."}],
"max_tokens": 32
}'
5. Abfrage von Ihrem Computer
Eingehend ist nur SSH offen. Leiten Sie Port 8000 weiter:
ssh -N -L 8000:localhost:8000 ubuntu@203.0.113.42
Richten Sie dann einen beliebigen OpenAI-kompatiblen Client auf http://localhost:8000/v1:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")
reply = client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct",
messages=[{"role": "user", "content": "Say hello in five words."}],
)
print(reply.choices[0].message.content)
Setzen Sie api_key auf Ihr Secret, wenn Sie den Server mit --api-key gestartet haben.
6. Abschluss
Kopieren Sie, was Sie brauchen, und wählen Sie dann End session. Heruntergeladene Gewichte werden mit der Maschine gelöscht.
Referenz: vLLM-Dokumentation.
Teil eines Anwendungsfalls: LLM-Inferenz, mit dem, was eine Sitzung garantiert.