MindIE单机及多机服务化部署
摘要: 本文详细介绍了基于MindIE框架在昇腾AI处理器上的模型服务化部署流程。主要内容包括:1) 拉取官方Docker镜像并创建特权容器;2) 单机部署步骤,涉及配置参数修改、服务启停;3) 多机分布式部署方案,涵盖网络检查、rank_table_file配置、环境变量设置等关键操作;4) 重点参数说明如NPU设备选择、模型路径、通信安全设置等。文档提供了完整的命令行操作指引,并附带昇腾社区官
1 拉取镜像
官方镜像地址:mindie
注:根据设备型号选择对应版本
2 创建容器
docker run -itd -u root \
--ipc=host \
--network=host \
--privileged \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /var/log/npu/:/usr/slog \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
-v /usr/local/sbin:/usr/local/sbin \
-v /etc/hccn.conf:/etc/hccn.conf \
-v /weight:/weight \
--name mindie2.1.RC1 \
swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.1.RC1-800I-A2-py311-openeuler24.03-lts \
/bin/bash
部分参数说明:-v /data0/weight:/weight 容器内外权重路径映射
**注意:**若因为服务器重启或其他原因导致容器被关闭可用docker start mindie2.1.RC1启动容器
3 单机模型服务化部署
3.1 进入容器
[root@localhost ~]# docker exec -it mindie2.1.RC1 bash
3.2 修改服务参数
[root@localhost /]# cd /usr/local/Ascend/mindie/latest/mindie-service/
[root@localhost mindie-service]# vim conf/config.json
主要修改参数:
ipAddress:服务IP
port:服务端口
httpsEnabled:是否开启HTTPS通信安全认证,改为false
npuDeviceIds:表示启用哪几张NPU卡
modelName:模型名称
modelWeightPath:模型权重路径
worldSize:启用几张卡推理(与npuDeviceIds对应)
maxSeqLen:最大长度(大于maxInputTokenLen+maxIterTimes)
maxInputTokenLen:最大输入长度
maxPrefillTokens:必须大于或等于maxInputTokenLen的取值。
maxIterTimes:最大输出长度
3.3 拉起服务
./bin/mindieservice_daemon
# 后台方式
# nohup ./bin/mindieservice_daemon > mindieservice_output.log 2>&1 &
3.4 关闭服务
[root@localhost mindie-service]# pkill -9 mindie
3.5 退出容器
[root@localhost mindie-service]# exit
4 多机服务化部署
所有节点都需要创建容器进行配置
4.1 检查机器网络情况
# 检查物理链接
for i in {0..7}; do hccn_tool -i $i -lldp -g | grep Ifname; done
# 检查链接情况
for i in {0..7}; do hccn_tool -i $i -link -g ; done
# 检查网络健康情况
for i in {0..7}; do hccn_tool -i $i -net_health -g ; done
# 查看侦测ip的配置是否正确
for i in {0..7}; do hccn_tool -i $i -netdetect -g ; done
# 查看网关是否配置正确
for i in {0..7}; do hccn_tool -i $i -gateway -g ; done
# 检查NPU底层tls校验行为一致性,建议全0
for i in {0..7}; do hccn_tool -i $i -tls -g ; done | grep switch
# NPU底层tls校验行为置0操作
for i in {0..7};do hccn_tool -i $i -tls -s enable 0;done
4.2 配置rank_table_file.json
获取每张卡的ip地址
for i in {0..7};do hccn_tool -i $i -ip -g; done
参考如下格式,配置rank_table_file.json(server_list中第一个server为主节点,所有机器都要配置这个文件)
cd /weight
vim rank_table_file.json
{
"version": "1.0",
"server_count": "2", # 服务器数量
"server_list": [
{
"server_id": "x.x.x.x", # 节点的ip地址
"container_ip": "x.x.x.x", # 容器ip地址(服务化部署时需要),若无特殊配置,则与server_id相同
"device": [
{
"device_id": "0", # 当前卡的本机编号,取值范围[0, 本机卡数)
"device_ip": "x.x.x.x", # 当前卡的ip地址,可通过hccn_tool命令获取
"rank_id": "0" # 当前卡的全局编号,取值范围[0, 总卡数)
},
...
{
"device_id": "7",
"device_ip": "x.x.x.x",
"rank_id": "7"
}
]
},
...
{
"server_id": "x.x.x.x",
"container_ip": "x.x.x.x",
"device": [
{
"device_id": "0",
"device_ip": "x.x.x.x",
"rank_id": "8"
},
...
{
"device_id": "7",
"device_ip": "x.x.x.x",
"rank_id": "15"
}
]
}
],
"status": "completed"
}
4.3 配置环境变量
(所有机器都要配置)
vim ~/.bashrc
# 开启通信环境变量
export ATB_LLM_HCCL_ENABLE=1
export ATB_LLM_COMM_BACKEND="hccl"
export HCCL_CONNECT_TIMEOUT=7200
export HCCL_EXEC_TIMEOUT=0
# 虚拟内存
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
# 归约类通信算子的确定性计算,一般情况下无需开启,开启确定性计算后,算子执行时间会变慢,导致性能下降。
export HCCL_DETERMINISTIC=false
# 容器ip地址,每台不一样
export MIES_CONTAINER_IP=x.x.x.x
export RANK_TABLE_FILE=/weight/rank_table_file.json
# 该环境变量用于配置通信算法的编排展开位置
# export HCCL_OP_EXPANSION_MODE=AIV
unset HCCL_OP_EXPANSION_MODE
# 解决权重加载过慢问题
export OMP_NUM_THREADS=1
# 设置显存比
export NPU_MEMORY_FRACTION=0.96
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
source ~/.bashrc
4.4 修改服务化参数
[root@localhost /]# cd /usr/local/Ascend/mindie/latest/mindie-service/
[root@localhost mindie-service]# vim conf/config.json
主要修改参数:
ipAddress:服务IP # 主节点写主节点的ip,其余节点用默认的
port:服务端口 # 主节点写主节点的ip,其余节点用默认的
httpsEnabled:是否开启HTTPS通信安全认证,改为false
interCommTLSEnabled:集群内部实例间的通信是否启用TLS,改为false
npuDeviceIds:表示启用哪几张NPU卡,多机推理场景下该值无效
multiNodesInferEnabled:改为true,开启多机推理
interNodeTLSEnabled:多机推理时,跨机通信是否开启证书安全认证,改为false
modelName:模型名称
modelWeightPath:模型权重路径
worldSize:启用几张卡推理(与npuDeviceIds对应),多机推理场景下该值无效
maxSeqLen:最大长度(大于maxInputTokenLen+maxIterTimes)
maxInputTokenLen:最大输入长度
maxPrefillTokens:必须大于或等于maxInputTokenLen的取值。
maxIterTimes:最大输出长度
4.5 拉起服务
所有节点同时执行
./bin/mindieservice_daemon
# 后台方式
# nohup ./bin/mindieservice_daemon > mindieservice_output.log 2>&1 &
执行命令后所有节点都出现以下输出:
Daemon start success!
则认为服务成功启动。
mindie接口测试
语言模型
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{
"model": {modelName},
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你好"
}
],
"max_tokens": 2048,
"seed": null,
"temperature": 0.5,
"top_p": 0.95,
"stream": false
}' http://{ipAddress}:{port}/v1/chat/completions
多模态模型
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{
"model": {modelName},
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "描述这张图片"},
{"type": "image_url", "image_url": "/xxxx/test.png"}
]
}],
"max_tokens": 2048,
"seed": null,
"temperature": 0.5,
"top_p": 0.95,
"stream": false
}' http://{ipAddress}:{port}/v1/chat/completions
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐



所有评论(0)