Mindie2.X起Qwen3-235B
·
验证多节点间通信
# 所有节点都需要验证
# Check the remote switch ports
for i in {0..7}; do hccn_tool -i $i -lldp -g | grep Ifname; done
# Get the link status of the Ethernet ports (UP or DOWN)
for i in {0..7}; do hccn_tool -i $i -link -g ; done
# Check the network health status
for i in {0..7}; do hccn_tool -i $i -net_health -g ; done
# View the network detected IP configuration
for i in {0..7}; do hccn_tool -i $i -netdetect -g ; done
# View gateway configuration
for i in {0..7}; do hccn_tool -i $i -gateway -g ; done
# View NPU network configuration
cat /etc/hccn.conf
NPU分配IP
节点1
# ========== 服务器1 NPU IP 配置脚本 ==========
# NPU0-7 配置为 192.168.100.1-8
echo ">>> 开始配置服务器1 NPU IP..."
# 配置各NPU的IP地址
hccn_tool -i 0 -ip -s address 192.168.100.1 netmask 255.255.255.0
hccn_tool -i 1 -ip -s address 192.168.100.2 netmask 255.255.255.0
hccn_tool -i 2 -ip -s address 192.168.100.3 netmask 255.255.255.0
hccn_tool -i 3 -ip -s address 192.168.100.4 netmask 255.255.255.0
hccn_tool -i 4 -ip -s address 192.168.100.5 netmask 255.255.255.0
hccn_tool -i 5 -ip -s address 192.168.100.6 netmask 255.255.255.0
hccn_tool -i 6 -ip -s address 192.168.100.7 netmask 255.255.255.0
hccn_tool -i 7 -ip -s address 192.168.100.8 netmask 255.255.255.0
echo ">>> IP配置完成,开始配置netdetect对端地址..."
# 配置对端检测地址(指向服务器2的NPU IP)
hccn_tool -i 0 -netdetect -s address 192.168.100.9
hccn_tool -i 1 -netdetect -s address 192.168.100.10
hccn_tool -i 2 -netdetect -s address 192.168.100.11
hccn_tool -i 3 -netdetect -s address 192.168.100.12
hccn_tool -i 4 -netdetect -s address 192.168.100.13
hccn_tool -i 5 -netdetect -s address 192.168.100.14
hccn_tool -i 6 -netdetect -s address 192.168.100.15
hccn_tool -i 7 -netdetect -s address 192.168.100.16
echo ">>> 验证配置结果..."
echo ""
echo "--- 已配置的IP地址 ---"
for i in {0..7}; do hccn_tool -i $i -ip -g; done
echo ""
echo "--- netdetect 对端地址 ---"
for i in {0..7}; do hccn_tool -i $i -netdetect -g; done
echo ""
echo "--- 写入 hccn.conf 的内容 ---"
cat /etc/hccn.conf
节点2
# ========== 服务器2 NPU IP 配置脚本 ==========
# NPU0-7 配置为 192.168.100.9-16
echo ">>> 开始配置服务器2 NPU IP..."
# 配置各NPU的IP地址
hccn_tool -i 0 -ip -s address 192.168.100.9 netmask 255.255.255.0
hccn_tool -i 1 -ip -s address 192.168.100.10 netmask 255.255.255.0
hccn_tool -i 2 -ip -s address 192.168.100.11 netmask 255.255.255.0
hccn_tool -i 3 -ip -s address 192.168.100.12 netmask 255.255.255.0
hccn_tool -i 4 -ip -s address 192.168.100.13 netmask 255.255.255.0
hccn_tool -i 5 -ip -s address 192.168.100.14 netmask 255.255.255.0
hccn_tool -i 6 -ip -s address 192.168.100.15 netmask 255.255.255.0
hccn_tool -i 7 -ip -s address 192.168.100.16 netmask 255.255.255.0
echo ">>> IP配置完成,开始配置netdetect对端地址..."
# 配置对端检测地址(指向服务器1的NPU IP)
hccn_tool -i 0 -netdetect -s address 192.168.100.1
hccn_tool -i 1 -netdetect -s address 192.168.100.2
hccn_tool -i 2 -netdetect -s address 192.168.100.3
hccn_tool -i 3 -netdetect -s address 192.168.100.4
hccn_tool -i 4 -netdetect -s address 192.168.100.5
hccn_tool -i 5 -netdetect -s address 192.168.100.6
hccn_tool -i 6 -netdetect -s address 192.168.100.7
hccn_tool -i 7 -netdetect -s address 192.168.100.8
echo ">>> 验证配置结果..."
echo ""
echo "--- 已配置的IP地址 ---"
for i in {0..7}; do hccn_tool -i $i -ip -g; done
echo ""
echo "--- netdetect 对端地址 ---"
for i in {0..7}; do hccn_tool -i $i -netdetect -g; done
echo ""
echo "--- 写入 hccn.conf 的内容 ---"
cat /etc/hccn.conf
验证连通
检查健康状态,两台服务器分别执行
# 等待30秒让HCCL网络初始化 sleep 30 # 检查网络健康状态(目标:全部 Healthy) echo "=== $(hostname) 网络健康状态 ===" for i in {0..7}; do result=$(hccn_tool -i $i -net_health -g) echo " NPU${i}: ${result}" done
跨节点NPU通信
节点1
echo "=== 服务器1 -> 服务器2 跨节点NPU PING测试 ===" for i in {0..7}; do peer_ip=$((i + 9)) result=$(hccn_tool -i ${i} -ping -g address 192.168.100.${peer_ip} 2>&1) echo " NPU${i}(192.168.100.$((i+1))) -> 192.168.100.${peer_ip}: ${result}" done
节点2
echo "=== 服务器2 -> 服务器1 跨节点NPU PING测试 ===" for i in {0..7}; do peer_ip=$((i + 1)) result=$(hccn_tool -i ${i} -ping -g address 192.168.100.${peer_ip} 2>&1) echo " NPU${i}(192.168.100.$((i+9))) -> 192.168.100.${peer_ip}: ${result}" done
配置ranktable文件
每个节点都需要创建该文件
{
"server_count": "2",
"server_list": [
{
"device": [
{"device_id": "0", "device_ip": "192.168.100.1", "rank_id": "0"},
{"device_id": "1", "device_ip": "192.168.100.2", "rank_id": "1"},
{"device_id": "2", "device_ip": "192.168.100.3", "rank_id": "2"},
{"device_id": "3", "device_ip": "192.168.100.4", "rank_id": "3"},
{"device_id": "4", "device_ip": "192.168.100.5", "rank_id": "4"},
{"device_id": "5", "device_ip": "192.168.100.6", "rank_id": "5"},
{"device_id": "6", "device_ip": "192.168.100.7", "rank_id": "6"},
{"device_id": "7", "device_ip": "192.168.100.8", "rank_id": "7"}
],
"server_id": "100.65.1.X1",
"container_ip": "100.65.1.X1"
},
{
"device": [
{"device_id": "0", "device_ip": "192.168.100.9", "rank_id": "8"},
{"device_id": "1", "device_ip": "192.168.100.10", "rank_id": "9"},
{"device_id": "2", "device_ip": "192.168.100.11", "rank_id": "10"},
{"device_id": "3", "device_ip": "192.168.100.12", "rank_id": "11"},
{"device_id": "4", "device_ip": "192.168.100.13", "rank_id": "12"},
{"device_id": "5", "device_ip": "192.168.100.14", "rank_id": "13"},
{"device_id": "6", "device_ip": "192.168.100.15", "rank_id": "14"},
{"device_id": "7", "device_ip": "192.168.100.16", "rank_id": "15"}
],
"server_id": "100.65.1.X2",
"container_ip": "100.65.1.X2"
}
],
"status": "completed",
"version": "1.0"
}
chmod 640 xxx/ranktable.json
起mindie服务容器
每台服务器上都需要执行
docker run -itd \ --privileged \ --name=mindie2.3_qwen3_235B_v2 \ --net=host \ --shm-size 500g \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ --device=/dev/devmm_svm \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v /usr/local/sbin:/usr/local/sbin \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/bin/hccn_tool:/usr/bin/hccn_tool \ -v /etc/hccn.conf:/etc/hccn.conf \ -v /home/models/Qwen/Qwen3-235B-A22B-Instruct-2507:/home/models/Qwen/Qwen3-235B-A22B-Instruct-2507 \ -v /home/ranktable:/home/ranktable \ swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.3.0-800I-A2-py311-openeuler24.03-lts \ bash
设置容器内环境变量
# 每次重启容器都要刷一下这些命令mind # 每个节点都需要设置 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 source /usr/local/Ascend/mindie/set_env.sh source /usr/local/Ascend/cann/set_env.sh source mindie-service/set_env.sh 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 WORLD_SIZE=16 export RANK_TABLE_FILE=/home/ranktable/ranktable.json export OMP_NUM_THREADS=1 export NPU_MEMORY_FRACTION=0.95 export HCCL_DETERMINISTIC=true export DP_MOVE_UP_ENABLE=1 # export MIES_CONTAINER_IP=X.X.X.X export MIES_CONTAINER_IP=X.X.X.X
设置mindie的config文件
每个节点都需要设置
{
"Version" : "1.0.0",
"ServerConfig" :
{
"ipAddress" : "X.X.X.X",
"managementIpAddress" : "X.X.X.X",
"port" : 1025,
"managementPort" : 1026,
"metricsPort" : 1027,
"allowAllZeroIpListening" : true,
"maxLinkNum" : 300,
"httpsEnabled" : false,
"fullTextEnabled" : false,
"tlsCaPath" : "security/ca/",
"tlsCaFile" : ["ca.pem"],
"tlsCert" : "security/certs/server.pem",
"tlsPk" : "security/keys/server.key.pem",
"tlsPkPwd" : "security/pass/key_pwd.txt",
"tlsCrlPath" : "security/certs/",
"tlsCrlFiles" : ["server_crl.pem"],
"managementTlsCaFile" : ["management_ca.pem"],
"managementTlsCert" : "security/certs/management/server.pem",
"managementTlsPk" : "security/keys/management/server.key.pem",
"managementTlsPkPwd" : "security/pass/management/key_pwd.txt",
"managementTlsCrlPath" : "security/management/certs/",
"managementTlsCrlFiles" : ["server_crl.pem"],
"metricsTlsCaFile" : ["metrics_ca.pem"],
"metricsTlsCert" : "security/certs/metrics/server.pem",
"metricsTlsPk" : "security/keys/metrics/server.key.pem",
"metricsTlsPkPwd" : "security/pass/metrics/key_pwd.txt",
"metricsTlsCrlPath" : "security/metrics/certs/",
"metricsTlsCrlFiles" : ["server_crl.pem"],
"kmcKsfMaster" : "tools/pmt/master/ksfa",
"kmcKsfStandby" : "tools/pmt/standby/ksfb",
"inferMode" : "standard",
"interCommTLSEnabled" : false,
"interCommPort" : 1121,
"interCommTlsCaPath" : "security/grpc/ca/",
"interCommTlsCaFiles" : ["ca.pem"],
"interCommTlsCert" : "security/grpc/certs/server.pem",
"interCommPk" : "security/grpc/keys/server.key.pem",
"interCommPkPwd" : "security/grpc/pass/key_pwd.txt",
"interCommTlsCrlPath" : "security/grpc/certs/",
"interCommTlsCrlFiles" : ["server_crl.pem"],
"openAiSupport" : "vllm",
"tokenTimeout" : 600,
"e2eTimeout" : 600,
"distDPServerEnabled":false
},
"BackendConfig" : {
"backendName" : "mindieservice_llm_engine",
"modelInstanceNumber" : 1,
"npuDeviceIds" : [[0,1,2,3,4,5,6,7]],
"tokenizerProcessNumber" : 8,
"multiNodesInferEnabled" : true,
"multiNodesInferPort" : 1120,
"interNodeTLSEnabled" : false,
"interNodeTlsCaPath" : "security/grpc/ca/",
"interNodeTlsCaFiles" : ["ca.pem"],
"interNodeTlsCert" : "security/grpc/certs/server.pem",
"interNodeTlsPk" : "security/grpc/keys/server.key.pem",
"interNodeTlsPkPwd" : "security/grpc/pass/mindie_server_key_pwd.txt",
"interNodeTlsCrlPath" : "security/grpc/certs/",
"interNodeTlsCrlFiles" : ["server_crl.pem"],
"interNodeKmcKsfMaster" : "tools/pmt/master/ksfa",
"interNodeKmcKsfStandby" : "tools/pmt/standby/ksfb",
"kvPoolConfig" : {"backend":"", "configPath":""},
"ModelDeployConfig" :
{
"maxSeqLen" : 85000,
"maxInputTokenLen" : 30000,
"truncation" : false,
"ModelConfig" : [
{
"modelInstanceType" : "Standard",
"modelName" : "qwen3_235b",
"modelWeightPath" : "/home/models/Qwen/Qwen3-235B-A22B-Instruct-2507",
"worldSize" : 8,
"cpuMemSize" : 5,
"npuMemSize" : -1,
"backendType" : "atb",
"trustRemoteCode" : false,
"async_scheduler_wait_time": 120,
"kv_trans_timeout": 10,
"kv_link_timeout": 1080,
"tp": 8,
"dp": 2,
"sp": 1,
"moe_ep": 4,
"moe_tp": 4,
"models": {
"qwen_moe": {
"ep_level": 1
}
}
}
]
},
"ScheduleConfig" :
{
"templateType" : "Standard",
"templateName" : "Standard_LLM",
"cacheBlockSize" : 128,
"maxPrefillBatchSize" : 64,
"maxPrefillTokens" : 30000,
"prefillTimeMsPerReq" : 150,
"prefillPolicyType" : 0,
"decodeTimeMsPerReq" : 50,
"decodePolicyType" : 0,
"maxBatchSize" : 256,
"maxIterTimes" : 35000,
"maxPreemptCount" : 0,
"supportSelectBatch" : false,
"maxQueueDelayMicroseconds" : 5000,
"maxFirstTokenWaitTime": 2500
}
},
"LogConfig": {
"dynamicLogLevel" : "",
"dynamicLogLevelValidHours" : 2,
"dynamicLogLevelValidTime" : ""
},
"EnableDynamicAdjustTimeoutConfig": false
}
起服务
nohup ./bin/mindieservice_daemon > output.log 2>&1 &
更多推荐



所有评论(0)