3、环境搭建与部署:硬件要求、Python环境配置、vLLM安装、启动服务、验证部署
好,咱们直接进入正题。这一章我带你亲手把vLLM跑起来。
说实话,很多人在大模型部署上栽跟头,不是因为模型多复杂,而是环境没搭对。我见过太多人花了两天装包,最后发现CUDA版本对不上——那种感觉,嗯,挺难受的。
所以这一章,我会把每一步拆开揉碎。你跟着做就行。
3.1 硬件要求:别让GPU拖后腿
先说说硬件。vLLM对GPU的要求其实不算苛刻,但有几个硬指标你得心里有数。
| 组件 | 最低要求 | 推荐配置 | 备注 |
|---|---|---|---|
| GPU | NVIDIA T4 (16GB) | A100 80GB / H100 | 显存决定你能跑多大的模型 |
| CPU | 8核 | 16核以上 | CPU负责调度,别太弱 |
| 内存 | 32GB | 64GB+ | 模型加载时内存消耗不小 |
| 磁盘 | 50GB SSD | 200GB NVMe | 模型文件动辄几十GB |
| CUDA | 11.8 | 12.1+ | vLLM对CUDA版本敏感 |
我个人习惯是:先看模型大小,再选GPU。模型参数量(B)× 2(FP16)≈ 显存需求。比如7B模型就是14GB,再加20%的余量,大概17GB。所以T4(16GB)其实有点悬。
3.2 Python环境配置:虚拟环境是底线
Python环境这块,我踩过太多坑了。以前我图省事直接在base环境里装,结果项目一多,依赖冲突到怀疑人生。
所以,请务必用虚拟环境。我推荐conda,当然venv也行。
# 创建虚拟环境,Python 3.10以上
conda create -n vllm_env python=3.10 -y
# 激活环境
conda activate vllm_env
# 升级pip
pip install --upgrade pip
然后安装PyTorch。这里有个关键点:CUDA版本必须和你的驱动匹配。
# 查看CUDA版本
nvidia-smi
# 根据CUDA版本安装PyTorch
# CUDA 12.1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# CUDA 11.8
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
验证一下PyTorch能不能看到GPU:
python -c "import torch; print(torch.cuda.is_available())"
如果输出 True,恭喜,环境第一步走通了。
3.3 vLLM安装:两种方式,任你选
vLLM的安装有两种主流方式。我两种都用过,给你说说区别。
方式一:pip安装(推荐新手)
pip install vllm
就这么简单。它会自动拉取对应的CUDA版本。不过要注意,pip安装的是预编译的wheel包,对CUDA版本有严格限制。我试过在CUDA 11.8上装vLLM 0.4.0,结果报错说找不到libcuda.so——后来发现是版本不匹配。
方式二:源码安装(推荐进阶用户)
如果你需要定制化,或者想用最新的特性,那就源码编译。
git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .
编译过程大概10-20分钟,取决于你的机器。我第一次编译时等了半小时,还以为死机了……其实它在编译CUDA kernel,正常现象。
3.4 启动服务:一行命令搞定
环境搭好了,咱们来启动vLLM服务。这里我用一个经典的模型做演示:meta-llama/Llama-2-7b-chat-hf。
# 启动vLLM服务
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-chat-hf \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.9 \
--max-num-seqs 256 \
--port 8000
参数说明:
--model:模型路径或Hugging Face模型名--tensor-parallel-size:GPU数量,单卡就写1--gpu-memory-utilization:显存利用率,0.9表示留10%给其他进程--max-num-seqs:最大并发请求数,这个值直接影响吞吐量--port:服务端口
huggingface-cli 下载好,避免服务启动时卡住。
启动成功后,你会看到类似这样的输出:
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000
看到这个,说明服务已经跑起来了。
3.5 验证部署:用curl测一下
服务启动了,怎么知道它是不是真的能用?我习惯用curl发一个请求试试。
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Llama-2-7b-chat-hf",
"messages": [
{"role": "user", "content": "Hello, how are you?"}
],
"max_tokens": 100,
"temperature": 0.7
}'
如果返回了类似下面的JSON,说明部署成功:
{
"id": "cmpl-xxx",
"object": "chat.completion",
"created": 1234567890,
"model": "meta-llama/Llama-2-7b-chat-hf",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! I'm doing well, thank you for asking. How can I assist you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 18,
"total_tokens": 28
}
}
看到 finish_reason": "stop" 了吗?这说明模型正常生成了回复。
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="none")
response = client.chat.completions.create(
model="meta-llama/Llama-2-7b-chat-hf",
messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)
3.6 知识体系总览
这一章的内容,我用一张图给你总结一下。从硬件到部署,每一步都是环环相扣的。
这张图把整个流程串起来了。你会发现,从硬件到部署,每一步都影响最终的性能。尤其是显存利用率和批处理大小,这两个参数直接决定了你的吞吐量能到多少。
好了,环境搭好了,服务也跑起来了。下一章我会带你深入vLLM的批处理策略,看看它是怎么把GPU的算力压榨到极致的。
公众号:蓝海资料掘金营,微信deep3321