使用vLLM优化大语言模型服务:从0.68到10请求/秒的性能飞跃

本文详细介绍了如何使用vLLM优化大语言模型服务,通过PagedAttention内存管理、前缀缓存和连续批处理技术,在相同硬件配置下将处理速度从0.68请求/秒提升至10请求/秒,实现14倍性能提升。

LLM推理成本

现代GPU对于运行大语言模型至关重要。NVIDIA H100等企业级GPU价格高达3-4万美元。低效的内存管理会导致昂贵的GPU集群只能服务少量用户,而不是数十个用户。

内存布局

  • 模型权重:占用GPU内存约70%
  • 临时激活:占用5-10%,用于提示词的中间计算
  • KV缓存:占用20-25%,用于存储令牌的键值缓存,避免重复计算

推理过程

LLM推理是顺序过程,模型基于输入提示和先前生成的输出令牌逐个生成令牌。这个过程使用KV缓存,服务吞吐量取决于这个关键内存段的管理效率。

PagedAttention

传统方法为每个请求预分配最大序列长度的连续内存块,导致大量内存浪费。UC Berkeley研究人员引入了基于操作系统内存管理技术的新算法PagedAttention,将KV缓存分成固定大小的块,允许多个请求共享内存空间。

vLLM

vLLM是高性能的服务和推理引擎,其优势包括:

  • 使用PagedAttention进行高效的KV缓存管理
  • 支持前缀缓存避免重复计算
  • 连续批处理传入请求提高吞吐量

vLLM提供完整的推理堆栈:

  • 兼容OpenAI API的HTTP服务器
  • 与流行的Hugging Face模型集成
  • 支持多种计算基础设施

基准测试

配置

  • Tesla V100 Tensor Core GPU(2个)
  • 10核CPU
  • 45 GB RAM
  • 32 GB GPU VRAM
  • 测试模型:gpt2-large

对比测试

创建了基于Flask的HTTP服务器作为基线,与vLLM服务器进行对比:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 自定义服务器代码
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
from flask import Flask, request, jsonify

app = Flask(__name__)

model_name = "gpt2-large"
tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.float16,
    device_map="auto"
)

@app.route('/generate', methods=['POST'])
def generate():
    data = request.json
    prompt = data['prompt']

    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
    outputs = model.generate(**inputs, max_new_tokens=50)
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)

    return jsonify({'response': response})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=6000, threaded=False)

启动vLLM服务器:

1
2
3
4
5
python3 -m vllm.entrypoints.openai.api_server \
--model gpt2-large \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.7 \
--port 8000

测试结果

  • 自定义顺序服务器:处理50个请求耗时约74秒
  • vLLM服务器:处理50个请求耗时约5秒

性能提升:从0.68请求/秒提升至10请求/秒,实现约14倍的吞吐量改进。

结论

vLLM通过PagedAttention、前缀缓存和连续批处理的组合,成为了极其高效的LLM服务和推理引擎。在我们的测试中实现了14倍的吞吐量提升:在相同硬件上从0.68请求/秒提升至10请求/秒。

对于运行昂贵H100 GPU集群的企业来说,这种效率直接转化为投资回报率:vLLM使得在相同基础设施上能够服务数十个用户,而不是仅仅几个用户。在GPU年成本可能超过数百万的生产环境中,vLLM的内存优化确实改变了游戏规则。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计