vLLM 部署大模型手册
以Qwen2.5-32B-Instruct 为例子
基本命令:
python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --enable-prefix-caching --disable-log-requests --model /data --gpu-memory-utilization 0.90 -tp 8 --port 8000 --served-model-name Qwen2.5-32B-Instruct --max-model-len 32768
vLLM常见参数配置说明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| --model 挂载模型目录(与【挂载地址】保持一致)
-tp 卡数(部署模型需要几张卡就写几张)
--port 端口(默认8000即可)
--max-model-len 最大上下文长度
--served-model-name 模型名称
--gpu-memory-utilization 0.90
--max_num_seqs batch 里面的最大输入序列个数
--enforce_eager 禁用图捕获优化参数,能节省一些显存
--pipeline_parallel_size 一般是多节点部署时,按照这个参数去拆分模型层,多个节点构成流水线,但是会增加延迟
--max_num_batched_tokens = batch_size * max_model_len, 是一个batch 中总的token 数
--enable_expert_parallel 对部分MOE 专家模型,启用专家并行
--kv-transfer-config '{"kv_connector":"MooncakeConnector","kv_role":"kv_consumer"}' 安装mooncake-transfer-engine 可以通过多级缓存和RDMA 来加速kv cache 传输,优化推理
-dcp 这个计算公式是 tp数/(kv 头数*节点数) ,可以保持同个节点上不会重复载入
注:预估 tp 的值(卡数),简单预算公式(单位GB):模型文件总大小 * 1.2 <= GPU显存大小
|
多节点部署
mp 运行时
1
2
3
4
5
6
| # master 节点
python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --enable-prefix-caching --disable-log-requests --model /data --gpu-memory-utilization 0.90 -tp 2 --port 8000 --served-model-name Qwen2.5-32B-Instruct # 注意下面这几行
--nnodes 2 \
--node-rank 0 \ # 不同节点这个就这个rank 数不同,master 用0
--master-addr 192.168.0.101 \
--distributed-executor-backend mp
|
ray 计算后端
1
2
3
4
5
6
7
8
| # 首先,先在master 节点
ray start --head --port=6379
# 然后其他worker 节点
ray start --address=${master_ip}:6379
# 这时候ray 集群通信就建立起来了
python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --enable-prefix-caching --disable-log-requests --model /data --gpu-memory-utilization 0.90 --port 8000 -tp 8 --pipeline-parallel-size 2 --served-model-name Qwen2.5-32B-Instruct \
# 注意下面这个
--distributed-executor-backend ray
|
使用vllm 的示例脚本简化上述过程
1
2
3
4
5
| # master
bash /vllm-workspace/examples/online_serving/multi-node-serving.sh leader --ray_cluster_size=2
python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --enable-prefix-caching --disable-log-requests --model /data --gpu-memory-utilization 0.90 --port 8000 -tp 8 --pipeline-parallel-size 2 --served-model-name Qwen2.5-32B-Instruct
# worker
bash /vllm-workspace/examples/online_serving/multi-node-serving.sh worker --ray_cluster_size=2
|
Volcano 分布式任务编排
其实Volcano 本质上是对不同分布式任务运行时的编排调度管理工具,所以按照上面两种分布式运行时后端,创建job 时适配command 命令就行,volcano 会按照工作组做资源分配管理
参照 Volcano Kthena 在 Kubernetes 上部署多节点LLM推理