写给新手的 oam-tools:昇腾OAM工具到底是啥?
之前帮兄弟搞多加速器管理,他问我:“哥,我们有昇腾 NPU 和 NVIDIA GPU 混用,有没有统一的管理工具?”
我说有,oam-tools。
好问题。今天一次说清楚。
oam-tools 是啥?
oam-tools = OAM Tools,昇腾的OAM(Open Accelerator Model)工具集。OAM 是开放加速器模型标准,统一了加速器的监控、管理、固件升级接口。
一句话说清楚:oam-tools 是昇腾对 OAM 标准的实现工具集,你想监控 NPU 温度、管理 NPU 固件、统一管理和 GPU 混用的加速器集群,工具都给你准备好了。
你说气人不气人,之前自己写脚本监控 NPU,现在用 oam-tools 一条命令全搞定。
为什么要用 oam-tools?
三个字:统一管。
不用 oam-tools(各自为战)
# 监控昇腾 NPU$ npu-smi stats# 监控 NVIDIA GPU$ nvidia-smi# 问题:# 1. 两个命令输出格式不一样# 2. 写统一监控脚本很麻烦# 3. 告警阈值要分别设置# 4. 混用集群管理复杂用 oam-tools(统一接口)
# 安装 oam-tools$gitclone https://atomgit.com/cann/oam-tools.git $cdoam-tools $bashinstall.sh# 统一监控(昇腾 NPU + NVIDIA GPU)$ oam-smi stats# 输出:# =======================================# OAM Stats (Ascend NPU + NVIDIA GPU)# =======================================# Device | Type | Temp | Power | Memory | Util# -------|------|------|-------|--------|------# 0 | NPU | 65°C | 180W | 16/32GB | 85%# 1 | NPU | 67°C | 185W | 18/32GB | 87%# 2 | GPU | 72°C | 250W | 12/24GB | 92%# 3 | GPU | 70°C | 245W | 10/24GB | 90%## Alert: NPU 1 temp > 65°C (threshold: 65°C)# ========================================# 你说气人不气人,一条命令监控所有加速器。核心概念就三个
1. OAM 标准
OAM(Open Accelerator Model)是开放加速器模型标准:
# OAM 统一接口oam-smi# 监控工具(类似 nvidia-smi)oam-fwupdate# 固件升级工具oam-diagnostics# 诊断工具2. 工具(Tools)
每个工具一个目录:
oam-tools/ ├── tools/ │ ├── oam-smi/ # 监控工具 │ │ ├── oam-smi.py │ │ └── README.md │ │ │ ├── oam-fwupdate/ # 固件升级工具 │ │ ├── oam-fwupdate.py │ │ └── README.md │ │ │ └── oam-diagnostics/ # 诊断工具 │ ├── oam-diagnostics.py │ └── README.md │ └── examples/ # 使用示例 ├── monitor_example/ ├── fwupdate_example/ └── diagnostics_example/3. 配置(Config)
统一配置文件:
# config/oam-config.yamldevices:-type:"ascend"ids:[0,1,2,3]thresholds:temp:65# 温度阈值(°C)power:200# 功耗阈值(W)memory:30000# 显存阈值(MB)-type:"nvidia"ids:[0,1]thresholds:temp:75power:280memory:22000monitor:interval:5# 监控间隔(秒)log_file:"/var/log/oam-stats.log"alert:truealert_script:"/path/to/alert.sh"为什么要用 oam-tools?
三个理由:
1. 统一接口
昇腾 NPU 和 NVIDIA GPU 统一监控:
# 不用 oam-tools$ npu-smi stats# 昇腾 NPU$ nvidia-smi# NVIDIA GPU# 输出格式不一样,不好统一处理# 用 oam-tools$ oam-smi stats# 统一输出格式,方便处理 ✅2. 固件管理
统一固件升级:
# 查看固件版本$ oam-fwupdate--query# 输出:# Device | Type | Current Version | Available Version | Update Available# -------|------|-----------------|-------------------|------------------# 0 | NPU | 1.2.3 | 1.2.5 | ✅# 1 | NPU | 1.2.3 | 1.2.5 | ✅# 2 | GPU | 510.47.00 | 515.48.01 | ✅# 升级固件$ oam-fwupdate--update--all# 输出:# Updating device 0: 1.2.3 → 1.2.5... Done ✅# Updating device 1: 1.2.3 → 1.2.5... Done ✅# Updating device 2: 510.47.00 → 515.48.01... Done ✅3. 诊断工具
统一诊断:
# 运行诊断$ oam-diagnostics--all# 输出:# =======================================# OAM Diagnostics Result# =======================================# Device | Type | Status | Message# -------|------|--------|--------# 0 | NPU | ✅ | OK# 1 | NPU | ❌ | ECC error detected# 2 | GPU | ✅ | OK# 3 | GPU | ✅ | OK## Suggestion: Replace device 1.# =======================================怎么用?代码示例
示例 1:监控 NPU 和 GPU
# 1. 克隆仓库$gitclone https://atomgit.com/cann/oam-tools.git $cdoam-tools# 2. 安装$bashinstall.sh# 3. 修改配置$viconfig/oam-config.yaml# 修改:# devices:# - type: "ascend"# ids: [0, 1]# - type: "nvidia"# ids: [0]# 4. 运行监控$ oam-smi stats# 输出:# =======================================# OAM Stats (Ascend NPU + NVIDIA GPU)# =======================================# Device | Type | Temp | Power | Memory | Util# -------|------|------|-------|--------|------# 0 | NPU | 65°C | 180W | 16/32GB | 85%# 1 | NPU | 67°C | 185W | 18/32GB | 87%# 2 | GPU | 72°C | 250W | 12/24GB | 92%## Alert: NPU 1 temp > 65°C (threshold: 65°C)# =======================================示例 2:固件升级
# 1. 查看固件版本$ oam-fwupdate--query# 输出:# Device | Type | Current Version | Available Version | Update Available# -------|------|-----------------|-------------------|------------------# 0 | NPU | 1.2.3 | 1.2.5 | ✅# 1 | NPU | 1.2.3 | 1.2.5 | ✅# 2. 升级固件$ oam-fwupdate--update--all# 输出:# Updating device 0: 1.2.3 → 1.2.5... Done ✅# Updating device 1: 1.2.3 → 1.2.5... Done ✅# 3. 验证$ oam-fwupdate--query# 输出:# Device | Type | Current Version | Available Version | Update Available# -------|------|-----------------|-------------------|------------------# 0 | NPU | 1.2.5 | 1.2.5 | ❌# 1 | NPU | 1.2.5 | 1.2.5 | ❌示例 3:诊断
# 1. 运行诊断$ oam-diagnostics--all# 输出:# =======================================# OAM Diagnostics Result# =======================================# Device | Type | Status | Message# -------|------|--------|--------# 0 | NPU | ✅ | OK# 1 | NPU | ❌ | ECC error detected## Suggestion: Replace device 1.# =======================================# 2. 详细诊断$ oam-diagnostics--device1--verbose# 输出:# =======================================# OAM Diagnostics (Device 1)# =======================================# Status: ❌# Error: ECC error detected# Error Count: 1024## Suggestion: Replace device 1.# =======================================示例 4:集成到监控告警系统
# monitor.pyimportsubprocessimportjsonimporttimeimportsmtplibfromemail.mime.textimportMIMETextdefget_oam_stats():result=subprocess.run(["oam-smi","stats","--json"],capture_output=True,text=True)returnjson.loads(result.stdout)defcheck_thresholds(stats,config):alerts=[]fordeviceinstats['devices']:device_id=device['id']device_type=device['type']temp=device['temp']power=device['power']memory=device['memory']['used']thresholds=config['devices'][device_type]['thresholds']iftemp>=thresholds['temp']:alerts.append(f"Device{device_id}temp{temp}°C >={thresholds['temp']}°C")ifpower>=thresholds['power']:alerts.append(f"Device{device_id}power{power}W >={thresholds['power']}W")ifmemory>=thresholds['memory']:alerts.append(f"Device{device_id}memory{memory}MB >={thresholds['memory']}MB")returnalertsdefsend_alert(alerts):msg=MIMEText("\n".join(alerts))msg['Subject']="OAM Alert"msg['From']="monitor@example.com"msg['To']="admin@example.com"withsmtplib.SMTP('localhost')asserver:server.send_message(msg)defmain():withopen('config/oam-config.yaml','r')asf:config=yaml.safe_load(f)whileTrue:stats=get_oam_stats()alerts=check_thresholds(stats,config)ifalerts:send_alert(alerts)time.sleep(config['monitor']['interval'])if__name__=="__main__":main()性能数据
用 oam-tools 的效率提升:
| 操作 | 不用 oam-tools | 用 oam-tools | 提升 |
|---|---|---|---|
| 监控 NPU + GPU | 2 个命令 | 1 个命令 | 2x |
| 固件升级 | 手动升级 | 一条命令 | 10x |
| 诊断 | 手动检查 | 一条命令 | 5x |
提升:~5x
你说气人不气人,之前监控 2 种加速器要 2 个命令,现在一条命令。
跟其他仓库的关系
oam-tools 在 CANN 架构里属于第 5 层(昇腾计算基础层),是OAM 工具集。
依赖关系:
oam-tools(OAM 工具集) ↑ 管理 昇腾 NPU + NVIDIA GPU解释一下:
- oam-tools:OAM 工具集(监控/固件升级/诊断)
- 昇腾 NPU:被管理
- NVIDIA GPU:被管理
简单说:oam-tools是加速器管理的"统一接口"。想统一监控 NPU 和 GPU,就用它。
oam-tools 的核心内容
1. 工具
# 支持的工具tools/oam-smi/# 监控工具tools/oam-fwupdate/# 固件升级工具tools/oam-diagnostics/# 诊断工具2. 配置
# config/oam-config.yamldevices:-type:"..."ids:[...]thresholds:{...}monitor:interval:...log_file:"..."alert:...3. 脚本
# monitor.pydefget_oam_stats():# 获取 OAM 统计信息# 检查阈值# 发送告警4. 示例
# examples/monitor_example/ fwupdate_example/ diagnostics_example/适用场景
什么情况下用 oam-tools:
- 多加速器管理:NPU + GPU 混用
- 统一监控:要统一监控接口
- 固件管理:要升级固件
- 诊断:要诊断加速器问题
什么情况下不用:
- 只有 NPU:用
npu-smi - 只有 GPU:用
nvidia-smi
总结
oam-tools 就是昇腾的"OAM 工具集":
- oam-smi:监控
- oam-fwupdate:固件升级
- oam-diagnostics:诊断
