4、vLLM安装与部署:环境要求、pip安装、源码编译、Docker部署、验证安装
聊到vLLM的安装,我得先跟你交个底——这玩意儿对环境的挑剔程度,比我家猫对猫粮还高。搞不对环境,后面所有优化都是空中楼阁。我自己踩过的坑,今天全给你抖出来。
4.1 环境要求:别让硬件拖后腿
先说说硬件。vLLM的核心是PagedAttention,这玩意儿极度依赖GPU显存。我建议你至少准备一块24GB显存的卡,比如A10G或A100。为什么?因为连续批处理的核心就是塞更多请求进显存,显存小了,你连个7B模型都跑不爽。
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| GPU | NVIDIA T4 (16GB) | A100 80GB / H100 |
| CUDA版本 | 11.8 | 12.1+ |
| Python版本 | 3.8 | 3.10 - 3.12 |
| 系统内存 | 32GB | 64GB+ |
软件方面,我强烈建议你用Ubuntu 22.04。CentOS?嗯,我劝你放弃。曾经有个客户非要在CentOS 7上跑,结果光折腾gcc版本就花了两天,最后还得切Ubuntu。何必呢?
4.2 pip安装:最省心的方式
说白了,pip安装就是一行命令的事。但这里有个坑——vLLM的PyPI包名是vllm,不是vLLM。大小写敏感,别搞错了。
# 基础安装
pip install vllm
# 如果你需要特定版本
pip install vllm==0.4.0
# 我习惯加上镜像源,国内下载快很多
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,你可以跑个简单的验证:
python -c "from vllm import LLM; print('vLLM installed successfully')"
如果没报错,恭喜你,最顺利的情况。但说实话,我遇到十次里有三次会卡在torch的依赖上。这时候别慌,手动装一下对应CUDA版本的PyTorch就行。
4.3 源码编译:当pip满足不了你时
为什么要源码编译?两个场景:一是你想用最新的特性,PyPI还没发版;二是你要针对特定硬件做优化。我自己就经常编译,因为有些patch需要提前测试。
编译前,先把依赖装齐:
# 系统依赖
sudo apt-get update
sudo apt-get install -y build-essential cmake
# 克隆源码
git clone https://github.com/vllm-project/vllm.git
cd vllm
# 安装Python依赖
pip install -r requirements.txt
# 开始编译(这步比较慢)
pip install -e .
编译时间取决于你的机器。我拿48核的机器编译,大概要15分钟。如果你用笔记本,建议泡杯咖啡等着。曾经有个同事用4核的虚拟机编译,等了快一小时,最后还报了个OOM——嗯,编译时内存不够也会挂。
--no-cache-dir参数减少缓存占用。
4.4 Docker部署:生产环境的首选
我个人习惯用Docker。为什么?因为环境隔离做得干净,不会污染宿主机。而且K8s上跑服务,Docker镜像是最自然的载体。
vLLM官方提供了Docker镜像,直接拉就行:
# 拉取官方镜像
docker pull vllm/vllm-openai:latest
# 启动服务(挂载模型目录)
docker run --gpus all \
-v /path/to/models:/models \
-p 8000:8000 \
vllm/vllm-openai:latest \
--model /models/llama-7b \
--tensor-parallel-size 2
这里有个关键参数--tensor-parallel-size。如果你有多张卡,这个参数决定了模型切分到几张卡上。我建议先设成1,跑通了再加。别一上来就搞4卡并行,出了问题排查起来很痛苦。
如果你想自己构建镜像,Dockerfile也很简单:
FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04
RUN apt-get update && apt-get install -y python3 python3-pip
RUN pip install vllm
ENTRYPOINT ["python3", "-m", "vllm.entrypoints.openai.api_server"]
--dtype auto参数。它会自动选择最适合你GPU的数据类型,省心又高效。
4.5 验证安装:跑个Hello World
装完了,怎么知道它真的能干活?我一般跑个简单的推理测试:
from vllm import LLM, SamplingParams
# 加载模型(这里用个小模型测试)
llm = LLM(model="facebook/opt-125m")
# 设置采样参数
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.9,
max_tokens=100
)
# 跑推理
prompts = ["Hello, how are you?"]
outputs = llm.generate(prompts, sampling_params)
# 看结果
for output in outputs:
print(output.outputs[0].text)
如果顺利输出了文本,说明安装成功了。但别高兴太早——我建议你再测一下连续批处理功能:
# 模拟多个并发请求
prompts = [
"What is AI?",
"Explain Kubernetes",
"Tell me a joke"
]
# 同时发送,vLLM会自动做连续批处理
outputs = llm.generate(prompts, sampling_params)
for i, output in enumerate(outputs):
print(f"Request {i}: {output.outputs[0].text[:50]}...")
看到三个请求都快速返回了吗?这就是连续批处理的威力。如果其中一个特别慢,可能是显存不够或者模型切分有问题。
- 环境检查是第一步,别跳过
- pip安装最快,但源码编译更灵活
- Docker部署是生产环境标配
- 验证时一定要测并发场景
好了,安装部署这块就这些。记住一个原则:环境越干净,问题越少。我见过太多人因为环境乱七八糟,最后花几小时排查一个根本不是代码的问题。你想想看,是不是这个理?