写给新手的 oam-tools:昇腾OAM工具到底是啥?
写给新手的 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
$ git clone https://atomgit.com/cann/oam-tools.git
$ cd oam-tools
$ bash install.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.yaml
devices:
- type: "ascend"
ids: [0, 1, 2, 3]
thresholds:
temp: 65 # 温度阈值(°C)
power: 200 # 功耗阈值(W)
memory: 30000 # 显存阈值(MB)
- type: "nvidia"
ids: [0, 1]
thresholds:
temp: 75
power: 280
memory: 22000
monitor:
interval: 5 # 监控间隔(秒)
log_file: "/var/log/oam-stats.log"
alert: true
alert_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. 克隆仓库
$ git clone https://atomgit.com/cann/oam-tools.git
$ cd oam-tools
# 2. 安装
$ bash install.sh
# 3. 修改配置
$ vi config/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 --device 1 --verbose
# 输出:
# =======================================
# OAM Diagnostics (Device 1)
# =======================================
# Status: ❌
# Error: ECC error detected
# Error Count: 1024
#
# Suggestion: Replace device 1.
# =======================================
示例 4:集成到监控告警系统
# monitor.py
import subprocess
import json
import time
import smtplib
from email.mime.text import MIMEText
def get_oam_stats():
result = subprocess.run(
["oam-smi", "stats", "--json"],
capture_output=True,
text=True
)
return json.loads(result.stdout)
def check_thresholds(stats, config):
alerts = []
for device in stats['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']
if temp >= thresholds['temp']:
alerts.append(f"Device {device_id} temp {temp}°C >= {thresholds['temp']}°C")
if power >= thresholds['power']:
alerts.append(f"Device {device_id} power {power}W >= {thresholds['power']}W")
if memory >= thresholds['memory']:
alerts.append(f"Device {device_id} memory {memory}MB >= {thresholds['memory']}MB")
return alerts
def send_alert(alerts):
msg = MIMEText("\n".join(alerts))
msg['Subject'] = "OAM Alert"
msg['From'] = "monitor@example.com"
msg['To'] = "admin@example.com"
with smtplib.SMTP('localhost') as server:
server.send_message(msg)
def main():
with open('config/oam-config.yaml', 'r') as f:
config = yaml.safe_load(f)
while True:
stats = get_oam_stats()
alerts = check_thresholds(stats, config)
if alerts:
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.yaml
devices:
- type: "..."
ids: [...]
thresholds: {...}
monitor:
interval: ...
log_file: "..."
alert: ...
3. 脚本
# monitor.py
def get_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:诊断
更多推荐




所有评论(0)