部署LLama3.1 405B模型

介于405B模型参数的大小,以及找不到相应的部署过程,因此撰写一篇文章来记录部署的流程以及遇到的问题。

设备条件:k8s集群环境中两个节点,每个节点具有8张80G*A800显卡

注意:将两个节点分为,主节点和工作节点,可任意指定,但需要牢记两者分别为哪个机器

1. 部署流程

1.1. k8s启动容器

        使用k8s汲取进行容器启动时需要配置config参数,包括nccl和gloo(后面讲解原因,以及为何需要容器启动时配置) ,本人采用在集群中配置因此两个节点都需要配置NCCL和GLOO以便多机之间的通讯

    spec:
      containers:
        - name: determined-container
          resources:
             limits:
               memory: 128Gi
               cpu: 128
             requests:
               memory: 64Gi
               cpu: 64
          volumeMounts:
            - mountPath: /data
              name: data
          env:
            - name: GLOO_SOCKET_IFNAME
              value: "eth0"
            - name: NCCL_SOCKET_IFNAME
              value: "eth0"

        “eth0”是机器用于通信的网卡id,使用“ifconfig”可以查看

1.2. 容器启动

        官方也提供直接使用容器启动链接为:分布式推理和服务 — vLLM

        官方配置有简易的启动脚本链接如下:vllm/examples/run_cluster.sh at main · vllm-project/vllm (github.com)

###1. clone vllm 官方代码
git clone https://github.com/vllm-project/vllm.git

###2. 进入指定目录
cd /vllm/examples/

        进入指定目录之后在主节点中启动:

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'

        之后,将获得一个容器的 ray 群集。请注意,您需要使运行这些命令的 shell 保持活动状态,以保存集群。任何 shell 断开连接都将终止集群。

请注意,参数应该是主节点的 IP 地址,所有工作节点都可以访问该地址。

一个常见的误解是使用工作节点的 IP 地址,这是不正确的。

2. 创建环境

        使用conda环境

conda create -n xxx python=3.10
conda activate xxx
pip install vllm
pip install ray

请注意:在主节点和工作节点中尽量选择一个相同环境,以便产生不必要的麻烦

3. 启动ray集群

若采用k8s启动容器,需要在容器中进行ray集群配置

        在主节点中启动ray

ray start --head --port=6379

        在工作节点链接主节点(主节点启动后会有对应的ip和端口号)

ray start --address='<主节点-ip>:6379'

        查看ray节点集群状态

ray status

4. 启动405B模型

        在主节点中使用命令

python -m vllm.entrypoints.openai.api_server --model /data/models/Meta-Llama-3.1-405B-Instruct/  --trust-remote-code --tensor-parallel-size 16 --served-model-name llama3.1_405b --dtype bfloat16 --engine-use-ray

        部分参数详解见文章:https://blog.csdn.net/baiyipiao/article/details/141930442?spm=1001.2014.3001.5502icon-default.png?t=O83Ahttps://blog.csdn.net/baiyipiao/article/details/141930442?spm=1001.2014.3001.5502        终端实现如下即为部署成功:

 5. API调用命令

import openai

client = openai.OpenAI(
    base_url="http://主节点ip:8000/v1",
    api_key="可以任意指定",
)

def generate_response(user_input):
    # print("Generating response for engine: ", engine)
    response = client.chat.completions.create(
        messages=[  
            {"role": "system", "content": ''},
            {"role": "user", "content": user_input}
        ],
        model="llama3.1_405b",
    )
    response = response.choices[0].message.content
    return response
source_text="你是谁"
generate_response(source_text)

2. 常见问题

1. api调用显示404和500

        使用ray集群启动,不能添加pipeline-parallel-size参数,而应在tensor-parallel-size中写入总的GPU数量,如在多级多卡的情况下,应该写--tensor-parallel-size 16。

        启动命令必须是“python -m vllm.entrypoints.openai.api_server”,不能是“vllm serve”或者是“python -m vllm.entrypoints.api_server”

        修改启动命令即可解决

2. ray假死

        具体表现为,卡在此处不动

        ray 服务启动添加参数 --num-cpus=16 --num-gpus=8

3. API调用报错

        在调用时需要通过主节点的IP调用才会有响应,工作节点ip不行。

4. 多节点问题

与vllm单节点部署不同的一点在于,vllm的多节点配置,具体原因参考Issue:

[其他]:在多节点服务中设置环境变量 ·期刊 #6803 ·vllm-project/vllm (github.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值