
从“盲跑”到掌控AMD 显卡训练时的监控实战刚从 NVIDIA 生态切换到 AMD Instinct GPU 进行大模型微调时最让人心里没底的瞬间往往不是环境配置报错而是训练脚本跑起来后面对黑漆漆的终端产生的“失联感”。在 N 卡上我们习惯了随手敲一行nvidia-smi看着显存占用条和温度数字跳动心里就有谱。但在 ROCm 环境下这个命令不仅无效甚至可能让你怀疑驱动没装好。其实AMD 早就准备好了对应的利器——rocm-smi。它不仅能替代nvidia-smi完成基础监控还能深入到底层硬件细节。今天就来聊聊如何在实际训练中用好它把“盲跑”变成可控的调试过程。读懂 rocm-smi不只是看个热闹很多开发者第一次用rocm-smi直接输入命令发现输出一大堆表格却找不到重点。其实只要掌握几个核心参数就能快速定位问题。最基础的用法是直接运行rocm-smi这会列出系统中所有 GPU 的基本状态包括 ID、温度、功耗、显存使用量等。但训练过程中我们更关心动态变化。比如想实时刷新查看显存占用类似watch -n 1 nvidia-smi可以结合 Linux 的watch命令watch-n1rocm-smi--showmemuse--showtemp这里--showmemuse专门显示显存使用百分比--showtemp则聚焦温度。如果你发现某张卡的显存突然飙升到 98% 而其他卡还很空闲那大概率是 DeepSpeed 的 ZeRO 策略没配好或者数据加载出现了瓶颈。还有一个高频场景是排查多卡通信问题。当训练速度远低于预期时可能是 PCIe 带宽或 NVLinkAMD 对应为 Infinity Fabric链路异常。此时可以用rocm-smi--showtopo它会展示 GPU 之间的拓扑连接图。正常的多卡训练环境中卡与卡之间应该是直连或通过高速交换机互联。如果看到某些路径标记为NODE或层级过深说明数据需要在 CPU 内存中中转这会严重拖慢梯度同步速度。将监控嵌入训练循环光在另一个终端看监控还不够“极客”。在调试复杂的 LoRA 或 QLoRA 微调任务时我习惯把关键指标直接打印到训练日志里这样复盘时能精确对应到具体的 Step。下面这段简单的 Python 工具函数可以直接集成到你的训练脚本中。它通过调用rocm-smi获取当前进程的显存占用并记录到 logger 中importsubprocessimportreimportloggingdefget_amd_gpu_memory():获取当前 AMD GPU 显存占用 (MB)try:# 查询所有 GPU 的显存使用情况resultsubprocess.run([rocm-smi,--showmemuse,--json],capture_outputTrue,textTrue,checkTrue)importjson datajson.loads(result.stdout)# 简单处理取所有卡的最大值或平均值视策略而定# 这里演示取第一张卡的数据ifcard0indata:mem_useddata[card0].get(VRAM Usage,{}).get(Used Memory,0)returnint(mem_used.replace( MiB,))ifisinstance(mem_used,str)elsemem_usedreturn0exceptExceptionase:logging.warning(fFailed to fetch GPU memory:{e})return0# 在训练循环中调用forstep,batchinenumerate(dataloader):# ... 前向传播与反向传播 ...ifstep%500:vram_usageget_amd_gpu_memory()logging.info(fStep{step}: VRAM Usage {vram_usage}MB)这段代码不需要安装额外的 Python 库完全依赖系统命令解析。在 MI300X 这类大显存卡上观察显存的“锯齿状”波动非常有价值如果每次迭代后显存没有回落说明存在显存泄漏如果波动幅度极大可能需要调整gradient_accumulation_steps来平滑峰值。进阶玩法搭建可视化看板对于长期运行的微调任务比如跑几天的全量预训练盯着终端显然不现实。这时候就需要把rocm-smi的数据接入 Prometheus Grafana 体系。AMD 官方提供了 DCGM Exporter 的 ROCm 适配版本。部署逻辑并不复杂首先在宿主机安装dcgm-exporter确保它能识别 ROCm 设备然后在 Kubernetes 或 Docker Compose 中启动 exporter 容器映射相关设备权限。关键的一步是配置采集指标。默认的 exporter 可能只采集基础信息我们需要自定义指标文件增加对GPU_MEMORY_USAGE、GPU_TEMPERATURE以及GPU_POWER_CONSUMPTION的采集频率。一旦数据流入 Prometheus就可以在 Grafana 中导入现成的 AMD GPU 仪表盘模板。我曾在一个多机多卡的任务中通过看板发现了一张卡的温度始终比其他卡高 10 度。检查物理机箱后发现是该卡的散热风扇被线缆遮挡。这种隐患如果靠人工轮询rocm-smi很难及时发现但可视化曲线上的异常凸起却一目了然。自动化日志记录脚本最后分享一个我常用的 Shell 脚本。当你没有权限部署监控系统又需要长时间记录硬件状态时这个脚本能帮你建立本地的“黑匣子”。创建一个名为log_gpu_status.sh的文件#!/bin/bashLOG_FILEgpu_training_log_$(date%F).csv# 写入表头echoTimestamp,GPU_ID,Temperature(C),Memory_Usage(MB),Power(W)$LOG_FILEwhiletrue;doTIMESTAMP$(date%Y-%m-%d %H:%M:%S)# 解析 rocm-smi 输出提取关键列# 注意不同 ROCm 版本输出格式略有差异需根据实际情况调整 awk 列号rocm-smi--showtemp--showmemuse--showpower--json|jq-r to_entries[] | \(.key),\(.value.Temperature|select(.!null)),\(.value.VRAM Usage.Used Memory|select(.!null)),\(.value.Power|select(.!null)) |whilereadline;doecho$TIMESTAMP,$line$LOG_FILEdonesleep5done注使用前请确保安装了jq工具用于解析 JSON 输出。运行这个脚本后它会每隔 5 秒将各张卡的核心指标追加到 CSV 文件中。训练结束后你直接用 Excel 或 Python Pandas 打开这份日志就能画出完整的资源消耗曲线。这对于撰写技术报告、优化超参数配置比如寻找 Batch Size 的临界点有着不可替代的作用。从依赖图形化界面到习惯命令行监控再到构建自动化观测体系这不仅是工具的切换更是工程思维的转变。在 AMD 的生态里rocm-smi就是你的眼睛用好它才能让每一分算力都跑得明明白白。200小时GPU算力已就位快来领取https://marketing.csdn.net/questions/Q2604140858304426315?utm_sourceAIpaper