vLLM基础:高吞吐量推理引擎
--- title: "vLLM基础:高吞吐量推理引擎" description: "介绍vLLM的核心特性和使用方法,实现高性能LLM服务部署" tags: ["vLLM", "推理优化", "PagedAttention", "服务部署"] category: "llm" icon: "🧠"
vLLM基础:高吞吐量推理引擎
vLLM简介
vLLM是一个高吞吐量的LLM推理和服务引擎,通过PagedAttention等技术显著提升推理效率,是生产环境部署LLM的首选方案之一。
安装vLLM
# 基础安装
pip install vllm
# 需要CUDA 11.8+
nvidia-smi # 检查GPU驱动
# 验证安装
python -c "import vllm; print(vllm.__version__)"
快速启动
OpenAI兼容服务器
# 启动API服务器
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-hf \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 1
# 使用量化模型
python -m vllm.entrypoints.openai.api_server \
--model TheBloke/Llama-2-7B-Chat-GPTQ \
--quantization gptq \
--host 0.0.0.0 \
--port 8000
Python调用
from openai import OpenAI
# vLLM提供OpenAI兼容接口
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed"
)
response = client.chat.completions.create(
model="meta-llama/Llama-2-7b-hf",
messages=[
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "什么是机器学习?"}
],
temperature=0.7,
max_tokens=500
)
print(response.choices[0].message.content)
流式输出
def stream_chat(prompt, model="meta-llama/Llama-2-7b-hf"):
"""流式输出"""
stream = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
stream=True
)
full_response = ""
for chunk in stream:
if chunk.choices[0].delta.content:
content = chunk.choices[0].delta.content
print(content, end="", flush=True)
full_response += content
print()
return full_response
# 使用
# stream_chat("写一个Python快速排序算法")
核心特性
1. PagedAttention
# PagedAttention通过分页管理KV Cache
# 类似操作系统的虚拟内存管理
# 大幅减少显存浪费
# 关键参数
engine_args = {
"model": "meta-llama/Llama-2-7b-hf",
"block_size": 16, # 块大小
"gpu_memory_utilization": 0.9, # GPU内存使用率
"max_num_batched_tokens": 8192, # 最大批处理token数
"max_num_seqs": 256 # 最大序列数
}
2. Continuous Batching
# 连续批处理:动态合并请求
# 比静态批处理效率更高
# vLLM自动处理连续批处理
# 无需额外配置
3. 张量并行
# 多GPU张量并行
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-70b-hf \
--tensor-parallel-size 4 \
--host 0.0.0.0 \
--port 8000
# 4个GPU并行推理70B模型
高级配置
模型配置
from vllm import LLM, SamplingParams
# 初始化LLM引擎
llm = LLM(
model="meta-llama/Llama-2-7b-hf",
tensor_parallel_size=1,
gpu_memory_utilization=0.9,
max_model_len=4096,
dtype="auto",
quantization=None, # 或 "awq", "gptq"
trust_remote_code=True
)
# 采样参数
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.9,
max_tokens=500,
stop=["\n\n"]
)
# 批量生成
prompts = [
"What is machine learning?",
"Explain quantum computing",
"Write a Python function for sorting"
]
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
print(f"Prompt: {output.prompt[:50]}...")
print(f"Output: {output.outputs[0].text[:100]}...\n")
性能调优
# 优化配置
llm = LLM(
model="model-name",
tensor_parallel_size=2, # GPU数量
pipeline_parallel_size=1, # 流水线并行
max_num_batched_tokens=8192, # 批处理大小
max_num_seqs=256, # 并发序列数
block_size=16, # KV Cache块大小
gpu_memory_utilization=0.9, # GPU内存使用率
swap_space=4, # CPU交换空间(GB)
cpu_offload_gb=0, # CPU卸载(GB)
enforce_eager=True, # 强制eager模式(调试)
enable_prefix_caching=True # 启用前缀缓存
)
多模态支持
# vLLM支持多模态模型
# 如LLaVA(视觉语言模型)
from vllm import LLM
llm = LLM(
model="llava-hf/llava-1.5-7b-hf",
trust_remote_code=True
)
# 图像+文本输入
# 需要使用特定的输入格式
批量处理
def batch_process(prompts, batch_size=32):
"""高效批量处理"""
llm = LLM(model="meta-llama/Llama-2-7b-hf")
sampling_params = SamplingParams(temperature=0.7, max_tokens=200)
# 分批处理
results = []
for i in range(0, len(prompts), batch_size):
batch = prompts[i:i+batch_size]
outputs = llm.generate(batch, sampling_params)
results.extend([o.outputs[0].text for o in outputs])
return results
# 使用
prompts = [f"Explain topic {i}" for i in range(100)]
results = batch_process(prompts)
监控与调试
# vLLM提供内置监控
# 启动时启用指标
python -m vllm.entrypoints.openai.api_server \
--model model-name \
--host 0.0.0.0 \
--port 8000 \
--disable-log-requests # 禁用请求日志
# 访问 Prometheus 指标
# http://localhost:8000/metrics
与其他方案对比
# 性能对比(大致数据)
comparison = {
"vLLM": {
"吞吐量": "高",
"延迟": "低",
"显存效率": "高(PagedAttention)",
"易用性": "高(OpenAI兼容)"
},
"TGI": {
"吞吐量": "高",
"延迟": "低",
"显存效率": "中",
"易用性": "高"
},
"llama.cpp": {
"吞吐量": "中",
"延迟": "中",
"显存效率": "高(量化)",
"易用性": "中"
}
}
for engine, specs in comparison.items():
print(f"\n{engine}:")
for k, v in specs.items():
print(f" {k}: {v}")
最佳实践
# 1. 选择合适的量化格式
# AWQ/GPTQ 4-bit: 平衡性能和质量
# FP16: 最高质量
# 2. 配置GPU内存
# gpu_memory_utilization=0.9: 生产环境推荐
# 3. 启用前缀缓存
# enable_prefix_caching=True: 提升重复前缀性能
# 4. 监控关键指标
# - 吞吐量 (tokens/s)
# - 延迟 (TTFT, TPS)
# - GPU利用率
总结
vLLM是目前最高效的LLM推理引擎之一,通过PagedAttention和Continuous Batching等技术,实现了高吞吐量和低延迟的推理服务。其OpenAI兼容接口使得迁移和集成变得简单。