本文应该是全网第一篇关于多节点多卡部署llama3.1-405B的文章,踩了很多坑,自己使用的集群环境也缺少权限,相当于戴着镣铐跳舞,千难万难总算是部署成功了,与单节点推理相比,多节点推理的难度要大得多。关于部署的多种方式,我娓娓道来,一一列举吧。
部署条件:2节点,每个节点具有8张80G*A800
一、vllm ray多节点多卡部署
1.创建集群环境
两个节点上分别创建容器。因为环境变量有很多个级别:
a. 机器启动时(或容器启动时)设置的环境变量
b. shell 命令设置的环境变量
c. 程序执行期间设置的环境变量
而ray actor 进程仅在我们创建集群时继承环境变量,所以在创建容器时需要设置环境变量:
(1)我所使用的集群环境,只能申请创建容器,因此在创建容器时,我在配置文件中写入了环境变量:
env:
- name: GLOO_SOCKET_IFNAME
value: "eth0"
- name: NCCL_SOCKET_IFNAME
value: "eth0"
“eth0”是我机器用于通信的网卡id,使用“ifconfig”命令可以查看。
(2)对于两台可以通信的物理机来说,我们可以在每台机器上分别创建docker容器:
vllm官方有支持,可以下载vllm的github代码,创建头节点和工作节点,在/example/下:
bash run_cluster.sher.sh \
vllm/vllm-openai \
ip_of_head_node \
--head \
/path/to/the/huggingface/home/in/this/node \
-e 'GLOO_SOCKET_IFNAME=eth0,NCCL_SOCKET_IFNAME=eth0'
工作节点:
bash run_cluster.sh \
vllm/vllm-openai \
ip_of_head_node \
--worker \
/path/to/the/huggingface/home/in/this/node \
-e 'GLOO_SOCKET_IFNAME=eth0,NCCL_SOCKET_IFNAME=eth0'
接着分别安装好conda环境,conda环境包含:
pip install vllm
pip install ray
2.部署openai API形式的api推理服务
在主节点上输入:
python -m vllm.entrypoints.openai.api_server --model /Meta-Llama-3.1-405B-Instruct/ --trust-remote-code --tensor-parallel-size 16 --served-model-name llama3.1_405b --dtype bfloat16 --engine-use-ray
有两个点需要注意下,这种方式的ray集群启动,不能添加pipeline-parallel-size参数,而应在tensor-parallel-size中写入总的GPU数量。启动命令必须是“python -m vllm.entrypoints.openai.api_server”,不能是“vllm serve”或者是“python -m vllm.entrypoints.api_server”,不然在调用api时会报404和500错误。
api启动之后,推理服务的ip地址是0.0.0.0:8000,在调用的时候调用主节点ip会有响应,工作节点ip不行。