国产AI加速卡集群的运维挑战
国产AI加速卡集群正进入大规模部署阶段,全国首个10万卡AI超集群已在国家超算互联网郑州核心节点投用,日均处理作业超15万个。相比传统GPU集群,国产加速卡在驱动层、固件管理、拓扑感知等方面存在差异,运维团队需要建立针对性的监控体系和故障排查流程。本文聚焅10万卡规模下的硬件监控、作业调度异常诊断和日常维护操作。
集群拓扑感知与资源分配策略
10万卡集群通常采用多级交换网络拓扑:
1. 机柜级:每机柜8台服务器,每台8张加速卡,单柜64卡
2. 交换级:4个机柜接入1台叶交换机,256卡构成一个调度单元
3. 集群级:多个调度单元通过脊交换机互联
作业调度时需考虑拓扑亲和性,将多卡训练任务尽量调度在同一交换域内,减少跨交换机通信开销。Slurm调度器可通过switch_param插件实现拓扑感知调度:
SwitchType=switch/nic
TopologyParam=SwitchAsNodeRank
在作业脚本中指定拓扑约束:
#SBATCH --switches=1@640
#SBATCH --constraint=ascend910b
这将作业限制在640卡以内的单一交换域内运行。
硬件状态监控体系搭建
国产加速卡的监控依赖厂商提供的npu-smi工具(华为昇腾系列)或hy-smi工具(海光DCU系列)。以下以昇腾910B为例:
采集关键指标并接入Prometheus:
import subprocess, re, time
def collect_npu_metrics():
result = subprocess.run(["npu-smi", "info"], capture_output=True, text=True)
metrics = {}
lines = result.stdout.strip().split("\\n")
for line in lines:
if "NPU ID" in line:
npu_id = line.split(":")[-1].strip()
if "Temperature" in line:
metrics[f"npu_{npu_id}_temp"] = float(re.search(r"(\\d+)C", line).group(1))
if "Memory-Usage" in line:
used, total = re.search(r"(\\d+)/(\\d+)", line).groups()
metrics[f"npu_{npu_id}_mem_usage"] = int(used) / int(total) * 100
if "Power" in line:
metrics[f"npu_{npu_id}_power"] = float(re.search(r"(\\d+\\.\\d+)W", line).group(1))
return metrics
将上述采集脚本封装为Prometheus Node Exporter Textfile Collector,每30秒刷新一次指标文件。
常见故障模式与排查流程
故障1:加速卡掉卡(NPU Not Found)
症状:npu-smi info中部分卡位显示为空或N/A,Slurm作业报cuda(npu) not available。
排查步骤:
1. 检查dmesg中是否有PCIe链路重置日志:dmesg | grep -i "pcie|aer|npu"
2. 执行lspci -vvv -s <PCI_SLOT>查看PCIe链路状态,确认LnkSta是否降速
3. 尝试软重置:npu-smi set -t reset -i <NPU_ID>
4. 软重置无效则整机重启;重启后仍掉卡,进入BIOS检查PCIe Slot配置,或更换Riser卡
故障2:训练任务OOM(Out of Memory)
10万卡场景下OOM通常不是单卡显存不足,而是梯度累积配置错误导致allreduce阶段内存溢出。
排查步骤:
1. 查看作业日志中的内存峰值:grep -i "oom|out of memory|kill" /var/log/slurm/slurmd.log
2. 确认并行策略配置:Megatron框架中--tensor-model-parallel-size与--pipeline-model-parallel-size的乘积是否等于分配的卡数
3. 检查梯度累积步数:--gradient-accumulation-steps设置过高会导致激活值堆积
4. 监控npu-smi中的HBM使用曲线,判断是稳定增长还是突然跳变
故障3:HCCL通信超时
HCCL(Huawei Collective Communication Library)是多卡通信的基础库,超时往往由网络拥塞或路由配置错误引起。
排查步骤:
1. 开启HCCL调试日志:export HCCL_DEBUG=INFO
2. 查看超时发生的通信原语(AllReduce/AllGather/ReduceScatter)
3. 用hccn_tool检查RoCE链路状态:hccn_tool -i 0 -link -s
4. 排查是否有跨交换域的作业调度导致长距离通信
固件与驱动批量升级方案
10万卡集群的固件升级是高危操作,需严格分批执行:
1. 预检查:确认升级包MD5、记录当前版本号、备份当前驱动配置
2. 灰度发布:按交换域分批升级,每批640卡,升级后运行标准训练benchmark验证
3. 回滚机制:每个交换域升级前创建驱动快照:rpm -qa | grep npu > npu_pkg_list_<SWITCH_ID>.txt
4. 并行执行:使用Ansible批量推送升级命令,控制并发度为8:
ansible npu_workers -m shell -a "bash /opt/npu_upgrade.sh" -f 8 --batch-size 8
每批完成后自动执行健康检查脚本,全部通过后进入下一批。
日常巡检自动化脚本
编写巡检脚本定期检查集群健康状态:
#!/bin/bash
# npu_cluster_healthcheck.sh
FAILED_NODES=""
for node in $(scontrol show hostname $SLURM_NODELIST); do
ssh $node "npu-smi info -t board" > /dev/null 2>&1
if [ $? -ne 0 ]; then
FAILED_NODES="$FAILED_NODES $node"
fi
done
if [ -n "$FAILED_NODES" ]; then
echo "[ALERT] NPU异常节点: $FAILED_NODES"
fi
结合Cron每天凌晨3点执行,异常节点自动摘除并通知运维人员。10万卡规模下,单次巡检耗时约5-8分钟,可并行扫描提高速度。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/guo-chan-ai-jia-su-ka-ji-qun-yun-wei-10-wan-ka-chao-suan/