GPU适配

答案内容由AI生成,仅供参考:

GPU适配后网页端无法显示功耗与温度信息的原因分析

当适配 NVIDIA 5090 GPU 后,能够在后台通过命令查询到功耗、温度等信息,但网页端无法显示这些数据,通常表明底层硬件通信正常,但上层数据链路或配置存在异常。以下是基于 openUBMC 架构和现有知识的全面分析与排查建议。


:magnifying_glass_tilted_left: 可能原因分析

1. 未正确配置资源协作接口(Object Model)

即使可以通过命令行读取到原始数据,若未在 openUBMC 的**资源树(Resource Tree)**中注册对应属性,Web 页面将无法获取数据。

  • 关键属性缺失

    • PrimaryGPUTemperatureCelsius:主 GPU 温度
    • PowerWatts:GPU 当前功耗
    • 这些字段属于 bmc.kepler.Systems.Processor.GPU.Powerbmc.kepler.Systems.Processor.GPU 接口,需要在 CSR 或配置文件中显式启用并映射
  • :white_check_mark: 检查点:

    • 是否在 Tesla_T4.lua(或其他对应 GPU 配置文件)中正确定义了 PrimaryGPUTemperatureCelsiusPowerWatts 的采集路径?
    • 是否在 CSR 中将 ProcessorType 设置为 GPU 类型(通常为 "2")?

2. Scanner 监控组件未正确配置或激活

数据从底层硬件到 Web 界面需经过 Scanner 组件定时采集。

  • Scanner_GPUTempScanner_GPUPower 是负责周期性读取 GPU 温度与功耗的核心模块。

  • 如果 Scanner 的偏移地址(Offset)、周期(Period)、目标芯片(Chip)等参数配置错误,会导致采集失败。

  • :wrench: 相关实体:

    • Scanner_GPUTemp_0101010301:监控 GPU 温度,周期 1000ms,偏移 156
    • Scanner_GPUPower_0101010301:监控 GPU 功耗,偏移 144
    • 均依赖 Chip_TempOrPowerChip 组件进行 I²C/SMBus 访问
  • :white_check_mark: 检查点:

    • 使用命令查看 Scanner 状态:
      mdbctl lsprop Scanner_GPUTemp_0101010301
      mdbctl lsprop Scanner_GPUPower_0101010301
      
      若返回 read failedstatus=false,说明 Scanner 无法访问硬件。
    • 确认 Chip_TempOrPowerChip 的 I²C 地址是否正确(如 0x4f),是否与 GPU 规格书一致。

3. 带外管理协议未适配(非 NVIDIA 协议)

虽然问题提到是“NVIDIA 5090”,但如果实际使用的是非标准或第三方封装的 GPU,可能不支持标准的 SMBus Post Box Interface (SMBPBI) 协议。

  • openUBMC 默认仅支持 NVIDIA 的 smbus_postbox 协议。

  • 对于其他厂商或定制卡,需:

    • 获取厂商提供的带外管理协议文档
    • 修改 general_hardware 组件代码,实现私有协议解析
  • :white_check_mark: 检查点:

    • 是否确认该 GPU 支持标准 NVIDIA SMBPBI 协议?
    • 是否需要自定义协议解析器?参考文档:general_hardware/docs/南向部件驱动适配教程GPU篇.md

4. Web 前端未订阅或渲染对应字段

即使后端已采集数据,若前端页面未正确绑定资源路径,也不会显示。

  • Web 页面通过 Redfish 或 D-Bus 资源路径订阅数据:

    • /bmc/kepler/Systems/1/Processors/GPU/:ID
    • 属性应包含:
      {
        "PrimaryGPUTemperatureCelsius": 65,
        "PowerWatts": 230
      }
      
  • :white_check_mark: 检查点:

    • 在浏览器开发者工具中,检查 Redfish API 是否返回了 GPU 的功耗与温度字段:
      GET /redfish/v1/Systems/1/Processors/GPU_1
      
    • 若 API 无此字段 → 说明后端未暴露;若有字段未显示 → 问题在前端 UI 映射。

5. 权限或状态过滤导致隐藏

某些情况下,系统会因健康状态异常、权限不足或状态为 Absent 而不展示传感器数据。

  • 查看 GPU 是否被识别:
    mdbctl lsobj | grep GPU
    
  • 查看健康状态:
    mdbctl lsprop GPU_1_01010103 | grep Health
    
    Health=0(OK),但数据仍不显示,则排除硬件离位问题。

:white_check_mark: 解决方案建议

步骤 操作 说明
1 核查 Scanner 配置 确保 Scanner_GPUTempScanner_GPUPower 的 Offset、Size、Chip 正确
2 验证 Chip_TempOrPowerChip 通信 使用 busctlmdbctl 手动读取,确认 I²C 地址和总线是否可达
3 检查 GPU 配置文件 确认 Tesla_T4.lua 或自定义配置中已启用 PrimaryGPUTemperatureCelsiusPowerWatts
4 查看资源树属性 执行 mdbctl lsprop GPU_1_01010103 bmc.kepler.Systems.Processor.GPU 确认字段存在
5 检查 Redfish 输出 访问 /redfish/v1/Systems/1/Processors/GPU_1 查看 JSON 是否含温功数据
6 更新 openUBMC 版本 某些旧版本存在闭源组件(如 compute)对 A2/A10/A100 卡支持不全的问题,建议升级至 25.09 或更高基线

:pushpin: 参考案例

  • 在适配 Atlas 300I A2 卡时,用户反馈温度与功耗无法读取,最终解决方案是:

    :link: 来源:社区回复(baixin_lipengbo)
    “当时我用的 openUBMC 25.06 基线,升级到 25.09 基线就可以了,25.09 基线的闭源组件 compute 有适配。”

  • 类似地,如果您的 “NVIDIA 5090” 实为定制 AI 加速卡(如 Atlas 系列),必须依赖特定 BMC 固件版本支持


:hammer_and_wrench: 总结

网页端看不到 GPU 温功信息,本质是‘数据未进入资源树’或‘前端未绑定’。

虽然后台命令可读,说明物理层通,但完整链路还需:

  • :white_check_mark: Scanner 正确配置 → 数据采集
  • :white_check_mark: Resource Tree 注册 → 数据暴露
  • :white_check_mark: Redfish/Web 绑定 → 数据展示

建议操作命令汇总

# 查看 Scanner 状态
mdbctl lsprop Scanner_GPUTemp_0101010301
mdbctl lsprop Scanner_GPUPower_0101010301

# 手动测试读取
busctl call bmc.kepler.hwproxy /bmc/kepler/Chip/Complex/Chip_TempOrPowerChip_0101010301 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0 2

# 查看 GPU 对象属性
mdbctl lsprop GPU_1_01010103 bmc.kepler.Systems.Processor.GPU

# 检查是否存在 GPU 对象
mdbctl lsobj | grep GPU

# 查看 Redfish 接口输出(需通过 curl 或浏览器)
curl http://<BMC_IP>/redfish/v1/Systems/1/Processors/GPU_1

如以上步骤均正常但仍无法显示,请提供日志以进一步诊断。

相关链接:

  1. 社区1230版本 MetaX C500 这个GPU是怎样获取温度和功耗信息的呢?
  2. NPU Atlas 300i A2 64G 在AC测试时带外传感器概率获取不到温度
  3. GPU显卡适配芯片温度和功耗获取失败
  4. 如何适配一款GPU?
  5. https://www.openubmc.cn/docs/zh/development/develop_guide/feature_development/GPU_Development_Guide