在大规模AI计算环境中,设备监控就像给数据中心装上了"心电图监测仪"。作为深耕AI基础设施多年的从业者,我见证了太多因为监控缺失导致的训练中断事故。CANN(Compute Architecture for Neural Networks)提供的oam-tools套件,正是为解决这一痛点而生。
这套工具的核心价值在于:
我曾在一个拥有200张910B加速卡的集群中部署该方案,将硬件故障的平均定位时间从47分钟缩短到3分钟。下面将结合源码和实战案例,详解其技术实现。
DCMI(DaVinci Card Management Interface)是连接用户态工具与内核驱动的桥梁。其设计体现了三个关键考量:
典型查询流程如下:
c复制// 用户态示例:查询设备健康状态
int fd = open("/dev/davinci_manager", O_RDWR);
struct dcmi_health_info info = {0};
ioctl(fd, DCMI_CMD_GET_HEALTH_INFO, &info);
实际部署中发现,在高并发场景下需要适当增加ioctl超时时间,默认的2秒可能导致监控数据丢失
HAL层直接操作硬件寄存器,以温度采集为例:
c复制// src/ascend_hal/sensor/temp.c
int get_die_temp(struct ascend_device *dev)
{
u32 reg_val = readl(dev->mmio_base + TEMP_SENSOR_OFFSET);
return (reg_val & 0xFFFF) * 125 / 1000; // 转换为摄氏度
}
关键点在于:
设备健康状态采用三级判定模型:
| 状态级别 | 触发条件 | 典型场景 |
|---|---|---|
| OK | 所有指标在阈值内 | 正常运行 |
| Warning | 任一指标超过警告阈值 | 风扇转速异常 |
| Critical | 任一指标超过危险阈值 | 芯片温度>95℃ |
阈值定义在驱动头文件中:
c复制// pkg_inc/dcmi/dcmi_health.h
#define TEMP_WARNING_THRESHOLD 85
#define TEMP_CRITICAL_THRESHOLD 95
#define POWER_WARNING_THRESHOLD 300 // 单位瓦
HBM使用率采集涉及内存控制器寄存器访问:
c复制// src/ascend_hal/mem/hbm.c
int get_hbm_usage(struct ascend_device *dev, struct hbm_usage *usage)
{
u64 total = readq(dev->mmio_base + HBM_TOTAL_REG);
u64 free = readq(dev->mmio_base + HBM_FREE_REG);
usage->used = total - free;
usage->total = total;
return 0;
}
实测发现连续读取间隔应大于100ms,否则可能导致内存带宽争用
PMU支持的事件类型包括:
| 事件ID | 名称 | 说明 | 采样开销 |
|---|---|---|---|
| 0x01 | AICORE_ACTIVE | 计算单元活跃周期 | 低 |
| 0x23 | HBM_READ | HBM读取字节数 | 中 |
| 0x24 | HBM_WRITE | HBM写入字节数 | 中 |
| 0x31 | L2_CACHE_MISS | 二级缓存未命中 | 高 |
配置示例:
c复制struct dcmi_prof_cfg cfg = {
.events = {0x01, 0x23, 0x24}, // 同时监控3个计数器
.period_ms = 1000 // 采样周期1秒
};
事件分组策略:
数据归一化处理:
python复制# 计算AICore利用率
def calc_utilization(active_cycles, total_cycles):
return min(100, active_cycles * 100 / (total_cycles + 1e-6)) # 避免除零
推荐使用以下Docker配置:
dockerfile复制FROM ubuntu:20.04
RUN apt-get install -y oam-tools
COPY config/npu-smi.conf /etc/
CMD ["npu-smi", "daemon"]
关键配置参数:
ini复制# npu-smi.conf
[monitor]
interval=5s
metrics=aicore_util,hbm_bw,temperature
[alert]
temp_warning=85
temp_critical=95
案例1:性能计数器数据漂移
案例2:HBM读数异常
推荐指标命名规范:
code复制ascend_{metric}_[unit]
示例:
code复制ascend_aicore_util_percent{chip="0"} 65.3
ascend_hbm_read_bytes_total{chip="0"} 1.2e9
关键面板建议:
实际使用中,建议将刷新间隔设置为10秒,以平衡实时性和系统负载
在某NLP大模型训练场景中,通过分析性能计数器发现:
调整方案:
最终使训练速度提升2.3倍,关键指标对比如下:
| 指标 | 优化前 | 优化后 |
|---|---|---|
| AICore利用率 | 35% | 78% |
| HBM读带宽 | 98% | 65% |
| 单步耗时 | 420ms | 180ms |
这套监控方案的价值不仅在于发现问题,更能指导优化方向。通过长期采集性能数据,我们建立了不同负载下的基准指标库,为后续项目提供参考。