GLM-5模型基于ModelArts轻量算力节点适配NPU推理指导
方案概览
本文主要介绍如何在ModelArts的轻量算力节点环境中,部署GLM-5模型并使用NPU卡Snt9b23进行推理。
GLM-5是智谱AI发布的新一代开源旗舰大模型,主打复杂系统工程与长程智能体任务,在编程与Agent能力上获得开源SOTA表现。
获取镜像
约束限制
- 确保容器可以访问公网。
步骤一:准备环境
- 请参考轻量算力节点资源开通,购买轻量算力节点资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。
当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。
- SSH登录机器后,检查NPU设备状态。运行如下命令,返回NPU设备信息。
npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数
如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。
- 检查docker是否安装。
docker -v #检查docker是否安装
如尚未安装,运行以下命令安装docker。
yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64
- 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。
sysctl -p | grep net.ipv4.ip_forward
如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward
步骤三:启动容器镜像
- Snt9b23启动容器镜像。启动前请先按照参数说明修改${}中的参数。
export work_dir="自定义挂载的工作目录" export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称或ID" // 启动一个容器去运行镜像 docker run -itd --shm-size=500g \ --net=host \ --privileged=true \ -u root \ -w /home/models \ --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ --device=/dev/devmm_svm \ --entrypoint=bash \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ -v /etc/ascend_install.info:/etc/ascend_install.info \ -v /usr/local/sbin:/usr/local/sbin \ -v /etc/hccn.conf:/etc/hccn.conf \ -v /usr/bin/hccn_tool:/usr/bin/hccn_tool \ -v ${work_dir}:${container_work_dir} \ --name ${container_name} \ ${image_name}
参数说明:
- -v ${work_dir}:${container_work_dir}:代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下可存放项目所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同。
driver及npu-smi需同时挂载至容器。
- --name ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。
- ${image_name}:容器镜像的名称,获取地址参见表1。
- -v ${work_dir}:${container_work_dir}:代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下可存放项目所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同。
- Snt9b23需要使用root权限进入容器中。
docker exec -itu root ${container_name} bash
步骤四:下载模型权重
步骤五:启动GLM5推理服务
# 挂载到的容器中的工作目录,,具体配置值以挂载到容器的工作目录为准
container_work_dir="/xxx/"
# 环境变量配置
export HCCL_OP_EXPANSION_MODE="AIV"
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=10
export VLLM_USE_V1=1
export HCCL_BUFFSIZE=200
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export VLLM_ASCEND_BALANCE_SCHEDULING=1
export VLLM_LOGGING_CONFIG_PATH=//home/ma-user/AscendCloud/logging_config.json
export VALIDATORS_CONFIG_PATH=/home/ma-user/AscendCloud/validator_without_gd.json
# 启动推理服务
vllm serve ${container_work_dir}/GLM5-w4a8 \
--host 0.0.0.0 \
--port 8077 \
--data-parallel-size 1 \
--tensor-parallel-size 16 \
--enable-expert-parallel \
--seed 1024 \
--served-model-name glm-5 \
--max-num-seqs 8 \
--max-model-len 131072 \
--max-num-batched-tokens 4096 \
--trust-remote-code \
--gpu-memory-utilization 0.95 \
--quantization ascend \
--enable-chunked-prefill \
--enable-prefix-caching \
--tool-call-parser glm47 \
--reasoning-parser glm45 \
--async-scheduling \
--enable-auto-tool-choice \
--middleware vllm.entrypoints.middleware.param_check.ValidateSamplingParams \
--additional-config '{"multistream_overlap_shared_expert":true}' \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY"}' \
--speculative-config '{"num_speculative_tokens": 3, "method": "deepseek_mtp"}'
参数解释如下:
- model_path:模型权重路径,当前设置为 ${container_work_dir}/GLM5-w4a8
- served-model-name:模型名称
- max-model-len:模型支持的最大长度
步骤六:查看GLM5推理结果
通过以下命令可以请求服务推理
curl http://127.0.0.1:8077/v1/chat/completions -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "我想去洗车,洗车店距离我家50米,你说我应该开车过去还是走过去?"}], "model": "glm-5"}' | jq