之前帮兄弟搞多加速器管理,他问我:“哥,我们有昇腾 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:诊断
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐