ABC

vLLM: production-инференс LLM

vLLM — быстрейший способ развернуть LLM. Экономия VRAM, 10x throughput.

📊 Средний ⏱ 10 мин

# 1. УСТАНОВКА vLLM

pip install vllm
# vLLM использует PagedAttention — управление KV-кэшем как страницами ОС
# Это даёт near-zero waste VRAM и x10+ пропускную способность

# 2. ЗАПУСК МОДЕЛИ КАК OPENAI-СОВМЕСТИМОГО СЕРВЕРА

# Команда в терминале (не в Python):
python -m vllm.entrypoints.openai.api_server     --model "meta-llama/Llama-3.1-8B-Instruct"     --host 0.0.0.0 --port 8000     --max-model-len 8192     --gpu-memory-utilization 0.90     --tensor-parallel-size 2

# 3. КЛИЕНТ НА OPENAI SDK — полная совместимость

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed",  # vLLM игнорирует ключ по умолчанию
)

# Стриминг-запрос — точно как к OpenAI API
stream = client.chat.completions.create(
    model="meta-llama/Llama-3.1-8B-Instruct",
    messages=[{"role": "user", "content": "Explain attention mechanism in 3 sentences."}],
    max_tokens=256,
    temperature=0.7,
    stream=True,
)

for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")

# 4. ПРОГРАММНЫЙ ЗАПУСК ЧЕРЕЗ LLM КЛАСС (без отдельного сервера)

from vllm import LLM, SamplingParams

# Загрузка модели в VRAM один раз — как синглтон
llm = LLM(
    model="mistralai/Mistral-7B-Instruct-v0.3",
    max_model_len=4096,
    gpu_memory_utilization=0.85,
    trust_remote_code=True,
)

# Continuous batching: передаём список промптов → vLLM батчит динамически
prompts = [
    "Summarize: AI agents are autonomous systems that perceive...",
    "Translate to Russian: The quick brown fox jumps over the lazy dog.",
    "Write a Python function to calculate Fibonacci numbers recursively.",
]
sampling_params = SamplingParams(
    temperature=0.6,
    max_tokens=128,
    top_p=0.9,
)

outputs = llm.generate(prompts, sampling_params)
for i, output in enumerate(outputs):
    print(f"--- Ответ {i+1} ---")
    print(output.outputs[0].text)

# 5. DOCKER-ДЕПЛОЙ В ПРОДАКШЕН

# Dockerfile для vLLM сервера:
# FROM vllm/vllm-openai:latest
# ENV VLLM_MODEL="meta-llama/Llama-3.1-8B-Instruct"
# ENV VLLM_MAX_MODEL_LEN=8192
# ENV VLLM_GPU_MEMORY_UTIL=0.90

# Запуск Docker-контейнера с поддержкой GPU:
docker run --gpus all -p 8000:8000     -e "HF_TOKEN=$HF_TOKEN"     -v ~/models:/models     vllm/vllm-openai:latest     --model "/models/Llama-3.1-8B"     --served-model-name "llama-8b"     --enable-chunked-prefill     --max-num-seqs 128

# Health-check: сервер отвечает на /v1/models как OpenAI API
curl http://localhost:8000/v1/models | python -m json.tool

# Производительность: continuous batching даёт ~10x токенов/с против HF Transformers
# PagedAttention: до 24x более эффективное использование VRAM

🔗 Полезные ссылки

📖 vLLM Docs⭐ GitHub🐳 Docker Hub