Hochdurchsatz-Serving mit vLLM auf Ubuntu

laptop_mac macOS Sonoma Intermediate schedule 8 min read
Author by Alex Rivera • May 14, 2024

Wenn Sie eine Anwendung mit mehreren gleichzeitigen Benutzern entwickeln, werden Ollama und LM Studio nicht ausreichen. Sie benötigen eine unternehmenstaugliche Inferenz-Engine. Sie benötigen vLLM.

Step 1 Einführung

vLLM ist eine hochdurchsatzfähige und speichereffiziente LLM-Serving-Engine. Sie verwendet eine Technik namens PagedAttention, um Attention-Keys und -Values effektiv zu verwalten, was einen 2–4-fach höheren Durchsatz gegenüber Standard-HuggingFace-Transformers erzielt.

Dieser Leitfaden setzt voraus, dass Sie einen Linux-Server mit mindestens einer High-End-NVIDIA-GPU betreiben (z. B. RTX 3090, 4090 oder A100).

Step 2 Voraussetzungen

vLLM erfordert Python und CUDA. Wir empfehlen dringend die Verwendung einer virtuellen Umgebung wie conda oder dem standardmäßigen venv.

Terminal
sudo apt update
sudo apt install python3-pip python3-venv

# Create and activate environment
python3 -m venv vllm-env
source vllm-env/bin/activate

Step 3 Installation von vLLM

Installieren Sie vLLM direkt von PyPI. Dadurch werden PyTorch und die notwendigen CUDA-Abhängigkeiten automatisch heruntergeladen.

Terminal
pip install vllm

Step 4 Betrieb eines OpenAI-kompatiblen Servers

vLLM unterstützt nativ das OpenAI-API-Protokoll. Sie können ein Modell direkt über die Kommandozeile bereitstellen. Als Beispiel verwenden wir Llama 3 8B.

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-8B-Instruct   --dtype auto   --api-key your-secret-key   --port 8000

Erläuterung der wichtigsten Parameter: - --model: Die HuggingFace-Repository-ID. vLLM lädt das Modell automatisch herunter. - --dtype auto: Verwendet automatisch bfloat16 oder float16 für maximale Performance. - --api-key: Sichert Ihren Endpunkt ab, sodass beliebige Internetnutzer Ihre GPU nicht missbrauchen können.

Step 5 Verbindung zur API herstellen

Sie können diesen Server nun mit dem standardmäßigen OpenAI Python SDK ansprechen – lediglich durch das Austauschen der base_url.

Terminal
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="your-secret-key"
)

response = client.chat.completions.create(
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    messages=[
        {"role": "user", "content": "Explain PagedAttention."}
    ],
)

print(response.choices[0].message.content)

Step 6 Optimierung für den Produktionsbetrieb

Wenn Sie über mehrere GPUs verfügen (z. B. zwei RTX 3090), können Sie ein großes 70B-Modell mithilfe von Tensor-Parallelismus auf diese aufteilen. Fügen Sie dazu einfach das Flag --tensor-parallel-size hinzu:

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-70B-Instruct   --tensor-parallel-size 2

Mit dem laufenden vLLM ist Ihr Linux-Server nun in der Lage, Dutzende gleichzeitiger Anfragen ohne jegliche Latenzeinbußen zu verarbeiten.