昇腾 MindIE 多机分布式推理
参考:
配置网卡信息
注意:为 NPU 卡配置的 IP 网段要符合公司网络规划,这一部分由算力人员来做。
hccn_tool -i 0 -ip -s address 192.168.230.101 netmask 255.255.255.0
hccn_tool -i 1 -ip -s address 192.168.230.102 netmask 255.255.255.0
hccn_tool -i 2 -ip -s address 192.168.230.103 netmask 255.255.255.0
hccn_tool -i 3 -ip -s address 192.168.230.104 netmask 255.255.255.0
hccn_tool -i 4 -ip -s address 192.168.230.105 netmask 255.255.255.0
hccn_tool -i 5 -ip -s address 192.168.230.106 netmask 255.255.255.0
hccn_tool -i 6 -ip -s address 192.168.230.107 netmask 255.255.255.0
hccn_tool -i 7 -ip -s address 192.168.230.108 netmask 255.255.255.0
# 给 NPU 卡配置网关
for i in {0..7}; do hccn_tool -i $i -gateway -s gateway 192.168.230.1; done
# 配置 NPU 网口检测 IP 地址,用于定期检测 NPU 网口网络状态,检测 IP 可填写 NPU 参数面 IP 网段网关地址。
for i in {0..7}; do hccn_tool -i $i -netdetect -s address 192.168.230.1; done
验证 IP 配置是否生效:
# 检测 NPU 卡的 ip 地址是否生效、可 ping 通,跨机器可 ping 通
hccn_tool -i 0 -ping -g address 192.168.230.101
hccn_tool -i 1 -ping -g address 192.168.230.102
hccn_tool -i 2 -ping -g address 192.168.230.103
hccn_tool -i 3 -ping -g address 192.168.230.104
hccn_tool -i 4 -ping -g address 192.168.230.105
hccn_tool -i 5 -ping -g address 192.168.230.106
hccn_tool -i 6 -ping -g address 192.168.230.107
hccn_tool -i 7 -ping -g address 192.168.230.108
# 查看卡的 ip
for i in {0..7}; do hccn_tool -i $i -ip -g; done
for i in {0..7}; do hccn_tool -i $i -tls -s enable 0; 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
每台机器的容器内操作
设置 /mnt/admin/../../ranktable.json,并设置环境变量 RANK_TABLE_FILE 指向该地址;每台机器看到的是相同的 ranktable.json:
{
"version": "1.0",
"server_count": "2",
"server_list": [
{
"server_id": "10.42.0.15",
"container_ip": "10.42.0.15",
"device": [
{ "device_id": "0", "device_ip": "192.168.230.101", "rank_id": "0" },
{ "device_id": "1", "device_ip": "192.168.230.107", "rank_id": "1" },
{ "device_id": "7", "device_ip": "192.168.230.108", "rank_id": "7" }
]
},
{
"server_id": "10.42.0.16",
"container_ip": "10.42.0.16",
"device": [
{ "device_id": "0", "device_ip": "192.168.230.109", "rank_id": "8" },
{ "device_id": "1", "device_ip": "192.168.230.110", "rank_id": "9" },
{ "device_id": "7", "device_ip": "192.168.230.116", "rank_id": "15" }
]
}
],
"status": "completed"
}
修改 /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json:
"ipAddress" : "0.0.0.0",
"managementIpAddress" : "0.0.0.0",
"allowAllZeroIpListening" : true,
"httpsEnabled" : false,
"interCommTLSEnabled" : false,
"npuDeviceIds" : [[0,1,2,3,4,5,6,7]],
"multiNodesInferEnabled" : true,
"interNodeTLSEnabled" : false,
"modelName" : "deepseek",
"modelWeightPath" : "/mnt/admin/pipeline/example/deepseek/DeepSeek-R1-Distill-Qwen-7B",
"worldSize" : 8,
modelWeightPath配置模型地址;worldSize为单机参与卡数。
设置昇腾基础环境变量
source /usr/local/Ascend/mindie/set_env.sh
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
source /usr/local/Ascend/atb-models/set_env.sh
export ATB_LLM_BENCHMARK_ENABLE=1
export ATB_LLM_ENABLE_AUTO_TRANSPOSE=0
export HCCL_CONNECT_TIMEOUT=7200
export HCCL_EXEC_TIMEOUT=0
export OMP_NUM_THREADS=1
export MINDIE_LOG_TO_STDOUT=1
export MINDIE_LLM_LOG_TO_STDOUT=1
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE=3
export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1
export NPU_MEMORY_FRACTION=0.9
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"
export ATB_LLM_HCCL_ENABLE=1
export ATB_LLM_COMM_BACKEND="hccl"
export HCCL_CONNECT_TIMEOUT=7200
chmod 640 /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json
# 这里是你的模型地址
chmod -R 640 $MODEL_PATH
设置多机推理环境变量:
export RANK_TABLE_FILE=你上面的 ranktable.json 的绝对地址
export RANKTABLEFILE=你上面的 ranktable.json 的绝对地址
chmod 640 ${RANK_TABLE_FILE}
export MIES_CONTAINER_IP=每个 pod 的容器 ip,host 模式也是主机 ip
export MASTER_IP=(rank_id=0 的机器的机器 ip)
export WORLD_SIZE=所有 pod 的总卡数
准备启动
# 重启后面的服务要先清理
find /dev/shm -name '*llm_backend_*' -type f -delete
find /dev/shm -name 'llm_tokenizer_shared_memory_*' -type f -delete
# 启动 mindie
rm -rf ~/mindie/log/
cd /usr/local/Ascend/mindie/latest/mindie-service
bin/mindieservice_daemon
其他问题:
# 部署模型需要信任远程代码
pip install transformers==4.46.0