vLLM — быстрейший способ развернуть LLM. Экономия VRAM, 10x throughput.
pip install vllm # vLLM использует PagedAttention — управление KV-кэшем как страницами ОС # Это даёт near-zero waste VRAM и x10+ пропускную способность
# Команда в терминале (не в 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
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="")
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)
# 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