3、vLLM部署与配置:服务启动参数详解、常用配置项与环境变量
好,咱们进入实战环节。部署vLLM这件事,说白了就是启动一个推理服务。但参数怎么配,环境变量怎么设,这里面门道不少。我刚开始接触vLLM时,也踩过几个坑,今天把这些经验掰开揉碎了讲给你听。
3.1 服务启动参数详解
启动vLLM服务,最核心的命令就是 vllm serve。你可能会问,这么多参数,哪些是必须的?哪些可以忽略?
我个人习惯,先把必填参数搞清楚,再根据场景调整优化项。咱们先看一个最基础的启动命令:
vllm serve /path/to/model \
--port 8000 \
--host 0.0.0.0 \
--max-model-len 4096 \
--max-num-seqs 256 \
--gpu-memory-utilization 0.9
嗯,这里要注意,--port 和 --host 决定了服务监听地址。生产环境我建议 --host 0.0.0.0,这样容器内外都能访问。但如果你只在本地调试,用 127.0.0.1 更安全。
3.2 常用配置项深度解析
咱们挑三个最关键的参数聊。这三个参数,基本决定了你的服务能跑多快、能处理多大请求。
3.2.1 max_num_seqs:并发序列数
这个参数控制的是,vLLM一次最多能同时处理多少个请求序列。说白了,就是并发度。
我在项目中遇到过,有同事把这个值设得特别大,比如1024。结果呢?GPU显存直接爆了,服务频繁OOM。为什么会这样?因为每个序列都要占用显存来存KV Cache。
核心原则:max_num_seqs 越大,吞吐量越高,但显存消耗也越大。需要根据你的模型大小和显存容量来平衡。
我建议的调优思路:
- 小模型(7B以下):可以设到512甚至1024
- 中等模型(13B-34B):256到512比较稳妥
- 大模型(70B+):128以内,甚至64
小技巧:如果你不确定,可以先设一个保守值,比如128。然后通过Prometheus监控观察GPU显存使用率,再逐步调高。我曾经用这个方法,把一个70B模型的并发从64调到了128,吞吐量翻了一倍。
3.2.2 max_model_len:最大模型长度
这个参数决定了模型能处理的最大上下文长度。你想想看,如果你的模型支持32K上下文,但你只设了4K,那长文档推理就会报错。
但反过来,设得太大也有问题。每个请求都会预留最大长度的显存空间。我曾经见过一个案例,把 max_model_len 设成了128K,结果显存占用直接飙到80GB,小显存的卡根本跑不起来。
避坑指南:我曾经在生产环境遇到过,用户发了一个超长文本,因为max_model_len设得太小,服务直接返回400错误。后来我加了一个前置校验,在请求进来之前就检查长度,提前拒绝超长请求,而不是让vLLM去处理。
我的建议:
- 如果业务场景主要是短文本(对话、问答),设4K-8K就够了
- 如果需要处理长文档(论文、代码库),根据模型支持的最大长度来设
- 不要超过模型训练时的最大长度,否则推理质量会下降
3.2.3 gpu_memory_utilization:GPU显存利用率
这个参数控制vLLM占用多少比例的GPU显存。默认是0.9,也就是90%。
你可能会问,为什么不直接用100%?嗯,这里要注意,GPU显存除了给模型权重和KV Cache用,还要留一部分给CUDA kernel、中间计算结果等。设成1.0,很容易触发OOM。
| 设置值 | 适用场景 | 风险 |
|---|---|---|
| 0.7 - 0.8 | 显存紧张,需要留空间给其他进程 | 吞吐量较低 |
| 0.85 - 0.9 | 大多数生产场景,推荐值 | 适中 |
| 0.95 - 0.98 | 显存充足,追求极致吞吐 | 容易OOM |
我的经验:如果你用的是A100 80GB跑70B模型,设0.9比较稳妥。如果是H100,可以试试0.95。但记住,每次调整后都要用Prometheus监控显存使用峰值,确保不会溢出。
3.3 环境变量设置
除了启动参数,环境变量也是配置vLLM的重要手段。有些配置只能通过环境变量来设,比如CUDA相关的优化。
我常用的几个环境变量:
# 设置CUDA可见设备,指定用哪几块GPU
export CUDA_VISIBLE_DEVICES=0,1,2,3
# 设置vLLM的日志级别,调试时很有用
export VLLM_LOG_LEVEL=INFO
# 设置KV Cache的分配策略
export VLLM_USE_V1=0 # 使用v0版本,更稳定
export VLLM_USE_V1=1 # 使用v1版本,性能更好但可能有bug
小技巧:调试阶段,我建议把 VLLM_LOG_LEVEL 设为 DEBUG。这样可以看到每个请求的详细处理过程,包括KV Cache的分配、调度决策等。生产环境再改回 INFO 或 WARNING,避免日志刷屏。
还有一个容易被忽略的:VLLM_USE_V1。这个环境变量决定了vLLM使用哪个版本的调度器。v0版本经过大量验证,稳定性好;v1版本引入了新的调度算法,吞吐量更高,但还在迭代中。
我个人建议:
- 生产环境:先用v0,稳定第一
- 测试环境:可以试试v1,看看性能提升
- 如果遇到奇怪的bug,先切回v0试试
3.4 知识体系总览
为了让你更直观地理解这些配置之间的关系,我画了一张图:
这张图把三个核心参数和环境变量的关系梳理清楚了。你配置的时候,记住一个原则:先保稳定,再求性能。用Prometheus盯着显存和延迟,慢慢调优。
最后提醒:每次修改配置后,一定要重启服务。vLLM不支持热加载配置。我曾经犯过这个错,改了环境变量没重启,排查了半天才发现问题。
好了,这一章的内容就到这里。配置参数这块,多试几次就有感觉了。下一章咱们聊聊怎么用Prometheus把这些参数的效果监控起来。
公众号:蓝海资料掘金营,微信deep3321