AMD SMI 完全指南:从入门到高效排查 GPU 性能问题
1. 从nvidia-smi到AMD SMI为什么你需要重新认识这台工具箱如果你和我一样平时主要跟NVIDIA的GPU打交道第一次在AMD平台上跑深度学习任务时大概率会下意识敲一句nvidia-smi然后发现命令不存在心里一沉。别慌AMD平台对应的工具叫AMD SMI全称是AMD System Management Interface功能一点都不比nvidia-smi弱只是很多玩GPU的人对它不熟。简单说AMD SMI就是AMD GPU官方的命令行监控与管理工具它能看到显卡的温度、功耗、显存占用、核心频率、风扇转速、PCIe链路状态、显卡序列号等等信息还能做不少设置类的操作——比如锁定功耗上限、调整风扇策略、查看GPU的PCIe带宽和错误计数等。无论你是跑深度学习、做GPU集群运维、用Abaqus这类工程仿真软件做GPU加速还是像Keyshot这类渲染软件在AMD显卡上遇到性能问题AMD SMI都是一把非常趁手的排查利器。这篇文章会从零开始带你把AMD SMI彻底搞清楚。内容包括它的安装与版本差异、核心命令的逐字段解读、实际使用场景拆解训练任务卡顿排查、多卡机器选卡、驱动兼容性核对等、以及我踩过的一些坑和心得。读完你基本能像查nvidia-smi一样熟练地用AMD SMI。特别适合这几类人刚入手AMD显卡比如RX 7000系列或Instinct计算卡的深度学习用户、负责GPU服务器运维的工程师、以及在AMD平台上做科学计算或渲染加速的科研人员。即使你手头只有一张游戏卡也建议看完因为很多排查思路是通用的。2. 工具初识AMD SMI到底是干什么的2.1 和nvidia-smi的差异点一句话说清NVIDIA生态里nvidia-smi几乎是每个搞AI的人每天都要看一眼的工具。它背后是NVIDIA的驱动管理层提供了一套简洁的GPU状态导出机制。AMD SMI做的事情类似但底层走的是AMD的ROCm软件栈或者标准的Linux内核AMDGPU驱动接口。关键区别在于nvidia-smi基本开箱即用而AMD SMI在Windows上有单独的安装包Linux上则会随ROCm一起安装或者由发行版软件源提供。名字上还有一个容易搞混的点——amd-smi这个小写可执行文件在ROCm较新版本中已经取代了早期的rocm-smi但有些老教程还在用后者。安装新版ROCm后如果你敲rocm-smi发现报错不用奇怪这也是AMD工具迭代留下的一个坑。从功能角度对比两者大部分基础信息能对上号查询目标nvidia-smiAMD SMI显存占用nvidia-smi→ Memory-Usageamd-smi monitor或amd-smi static核心温度nvidia-smi→ Temperatureamd-smi monitor --temperature功耗nvidia-smi→ Power Drawamd-smi monitor --power核心频率nvidia-smi→ SM/MMU频率amd-smi monitor --clocks进程占用nvidia-smi最下方进程表amd-smi process list型号与BIOS信息nvidia-smi -qamd-smi static因为工具本身在持续迭代不同版本的AMD SMI命令参数会有差异我会在下面给出最常用、最稳定的子命令并顺带说明哪些参数在老版本上可能不兼容。2.2 安装AMD SMI的两种主流路线先说Linux。多数服务器场景都是Ubuntu或者CentOS/RockyROCm官方源装好之后amd-smi一般会被自动带上通常位于/opt/rocm/bin/amd-smi。如果你没装ROCm只想单独用这个监控工具可以试试系统软件源# Ubuntu / Debian sudo apt update sudo apt install amd-smi-lib amd-smi # 或者CentOS / Rocky sudo dnf install amd-smi不过我的建议是如果是深度学习或者计算场景最好直接装完整ROCm因为amd-smi依赖底层的libdrm和amdgpu内核驱动单独装一个工具容易遇到版本不匹配的问题。装好之后强制指定路径比如/opt/rocm/bin/amd-smi --version确认它能跑通。Windows平台则简单些去AMD官网驱动页面下载安装Adrenalin驱动时一般会自带AMD Software里面其实已经内置了类似SMI的信息面板。如果想用命令行方式可以把AMD的AMDSmiTool或开发者工具包翻出来但实话实说Windows下命令行体验没有Linux下方便日常监控用AMD Software的界面就够了。2.3 版本差异的坑先说为敬AMD的这套CLI工具迭代很快。老版本叫rocm-smi新版本叫amd-smi两者虽然可以共存但很多参数不通用。比如早期rocm-smi --showtemp这种写法在新版里对应的是amd-smi monitor --temperature。更麻烦的是有的机器上同时存在/opt/rocm/bin/rocm-smi和/opt/rocm/bin/amd-smi你敲哪个都得先确认自己装的是哪个ROCm版本。我的习惯是一上来先跑/opt/rocm/bin/amd-smi --version确认工具版本再跑--help看当前支持的参数。因为官方手册更新速度挺快网上很多文章里的命令是老古董直接抄会报参数错误。后面我给的命令都会标注新版ROCm5.x及以上这个适用范围。3. 核心字段逐项解读怎么一眼看懂显卡状态3.1 静态信息这张卡到底是什么型号AMD SMI把查硬件信息拆得很清楚。想看一张卡的基础身份信息用static子命令amd-smi static这条命令会输出很长的内容包含Vendor ID、Device ID、Subvendor ID、PCIe信息、显存类型、显存大小、序列号、BIOS版本等。我自己最常关注的是这样几项Device ID和Subvendor ID用来判断是不是公版、是否是某个OEM厂商定制卡。PCIe Bandwidth当前PCIe链路速率是Gen3还是Gen4是x16还是x8。注意这里显示的是最大能力不代表实时速率。VRAM Size显存总量一般以MiB为单位。如果这里是0很可能驱动没加载好问题比较大。Serial Number服务器售后报修时经常需要提供。字体小字多新手最容易犯的错是把VRAM Size当成显存剩余量。它是总量剩余量要去weekly或monitor里看。另外static输出里还有一个Part Number字段批量采购时核对硬件批次很好用。3.2 实时状态信息温度、功耗、显存占用、频率这是日常用得最多的地方。新版AMD SMI提供了一个专门做实时监控的子命令amd-smi monitor不加参数时它会输出一张包含功耗、温度、GFX时钟GPU核心频率、显存时钟、显存占用率、显存利用率等字段的表格类似这样不同版本字段名略有差异GPU_POWER当前功耗瓦。注意它有时会显示一个范围比如100.0W或MAX 220.0W要看瞬时值。GPU_TEMP热点温度还是边缘温度AMD驱动里一般提供edge、junction、memory三个温度。建议重点看junction结温因为AMD显卡的结温往往比边缘温度高十几度这是正常现象别被吓到。GFX_CLK当前核心频率。MEM_CLK当前显存频率。VRAM_USAGE或类似字段显存已用多少单位通常是MiB。想只看某一项可以加过滤参数。比如amd-smi monitor --temperature --power这样输出更干净。在排查GPU温度过高或者功耗异常的时候我一般会加一个--interval参数拉开刷新时间有些版本支持--update-rate具体看help避免刷屏太快看不清。实测比较稳心的写法是watch -n 1 amd-smi monitor用watch来定时刷新效果非常直观和watch nvidia-smi的感觉一样。3.3 正在运行的进程找出谁在吃显存在服务器上跑着好几个任务想看某张卡被谁占了nvidia-smi会直接在最下方列进程列表AMD SMI则需要单独一条命令amd-smi process list它的输出包含每个进程的PID、进程名、显存占用、GPU ID等信息。有一次我发现一张卡显存几乎占满但amd-smi monitor里GPU利用率却是0%一查进程列表才发现是某用户跑了一个卡死的Jupyter进程不占计算但锁了显存。这种情况如果不用process list很难定位到真凶。需要注意在普通用户权限下amd-smi process list可能看不到其他用户的进程详细信息这是驱动层权限限制不是工具Bug。如果需要全量进程信息建议用root或sudo执行。4. 实战场景用AMD SMI解决真实问题4.1 场景一跑PyTorch训练GPU利用率时高时低很多人在AMD显卡上跑PyTorch时会遇到一个诡异现象显卡驱动装了、rocPyTorch也装好了训练也能跑但看利用率总觉得不对劲。这时候用AMD SMI看实时数据能帮你快速区分是数据加载瓶颈、显存瓶颈还是计算瓶颈。我的排查顺序是先看amd-smi monitor里的GFX_CLK和GPU_UTIL或叫GFX_UTIL。如果核心频率已经跑到最大但利用率不高说明中间有等待如果频率本身就被限制很低可能是驱动降频或功耗墙问题。再看VRAM_USAGE和GPU_POWER。如果显存占用很高接近上限很可能是显存容量不足触发了换页GTT训练就会时快时慢。如果功耗没有达到上限而频率上不去可以看看温度是否过高。AMD显卡的降频策略比较激进结温超过一定阈值后核心频率和功耗都会被压下来导致GPU CPU内存占用都不高但卡这种奇怪表现。有一个典型情况我遇到过多次显卡温度只有50度但功率被锁死在几十瓦频率也上不去。最后查出来是主板PCIe供电设置问题或者是驱动电源管理模式强制了省电模式。这时可以尝试调整GPU的功耗上限sudo amd-smi set --power-cap 200把功耗从默认限制提高数字需要根据你显卡的max_power来定amd-smi static里能看到。有些老版本参数是amd-smi power --cap新版则统一用set power-cap。这类命令需要root权限改完立即生效重启后可能恢复默认。4.2 场景二多卡机器上怎么快速挑一张空闲卡装了一台8卡AMD Instinct机器的深度学习用户最常用的需求就是看哪张卡闲着。虽然可以通过torch.cuda等接口调配但开机第一眼还是命令行最直接。我的推荐写法是amd-smi monitor --verbose或者用不带--verbose的基础版输出里每行代表一张卡的状态。看GPU_UTIL和VRAM_USAGE两列哪个都是0或者很低就选哪张。如果机器上卡多一行塞不下也可以配合awk只挑关键字段比如amd-smi monitor --power --temperature --gfx-util | tail -n 3具体字段名以你的版本--help为准。在混合多用户服务器上我习惯把这条命令输出重定向到一个文本文件里保留一段时间这样出问题时能复盘当时各卡的负载情况watch -n 10 amd-smi monitor /tmp/gpu_state.log日志会有点大但排查某段时间卡怎么突然满了这种问题特别好使。4.3 场景三新装的卡感觉速度不对先查PCIe链路我遇到过一台机器重装系统后跑深度学习比之前慢了一半百思不得其解。后来用amd-smi static查看PCIe信息才发现卡的链路从Gen4 x16掉到了Gen3 x8。这种问题在CPU直连通道不足、主板PCIe插槽拆分bifurcation或者转接线质量差时很常见。排查命令amd-smi static | grep -i pcie重点看PCIE Bandwidth和PCIE Max Bandwidth。如果当前小于最大说明链路没跑满。可以再确认下卡的PCIe当前速率amd-smi pcie --info如果确实降速了就回到BIOS里检查PCIe插槽是否为x16模式或者换一个插槽试。这类问题用nvidia-smi排查也是一样的思路算是跨平台通用经验。4.4 场景四渲染或仿真软件Keyshot/AbaqusGPU加速失效有用户私信问过Keyshot 2025.3在AMD显卡上无法使用GPU渲染的问题其实这在NVIDIA卡上也会遇到只是AMD更容易出现软件拿不到OpenCL设备的情况。排查思路也可以用AMD SMI先确认系统能识别到GPUamd-smi static能看到完整信息说明驱动层OK。再用amd-smi monitor看运行渲染任务时GPU有没有实际负载。如果负载一直为零软件根本没把算子下发到GPU上。这时候要检查软件用的OpenCL或ROCm运行时是不是和AMD SMI底层的驱动版本匹配。很多渲染软件要单独装OpenCL组件AMD显卡驱动自带的OpenCL其实就够用但某些精简版驱动并没有完整安装它。顺便说一句Abaqus这类CAE软件走的是Abaqus官方的GPU加速支持列表用AMD显卡前一定先查一下软件版本对应的支持矩阵。显卡驱动和软件版本不匹配的时候amd-smi能看到卡但软件就是看不到这种问题靠改环境变量有时能解决有时只能等软件厂商更新补丁。4.5 场景五vBIOS与驱动版本不匹配的典型症状AMD GPU还有一个NVIDIA不太常见的坑——vBIOS版本和驱动版本互相不买账。症状是开机有输出但一跑重负载就黑屏或者驱动崩溃。这通常不是散热问题。用amd-smi static里显示的VBios Version再去显卡厂商官网比对一下是否过旧。如果是计算卡或工作站卡记得去官方支持页下载对应的vBIOS更新工具。这块我吃过苦头早期一张RX 7900 XTX在Linux下跑Stable Diffusion频率一拉高就挂最后发现vBIOS太老跟新驱动对不上刷完vBIOS再也没出过事。不过强调一句刷vBIOS有风险一定要确认好型号、显存厂商和接口版本操作前备份原始vBIOS别在供电不稳的机器上刷。5. 进阶玩法监控、日志与内核级信息5.1 连续采集GPU状态生成性能曲线如果你不只是临时看一眼而是需要记录一段时间的GPU使用率最省事的方式就是配合watch或定时任务把amd-smi monitor写到文件。但更专业一点的做法是用Linux系统自带的collectl、Prometheus node_exporter或者干脆写个小脚本来定期抓取。简单脚本思路如下#!/bin/bash while true; do echo $(date) /tmp/gpu_trace.log amd-smi monitor --power --temperature --gfx-util /tmp/gpu_trace.log sleep 5 done这样做的好处是任务跑挂了之后你能复盘每一轮迭代前GPU的状态判断是显存爆了、温度墙还是驱动崩了。致命缺点是日志会迅速膨胀建议只在对任务做性能调优时短期开而不要长期常驻。如果只想要某个时间点的快照用amd-smi monitor加--json参数部分版本支持可以直接输出JSON方便导入脚本和统一监控平台。具体看看help里带不带--json老版本没有这个参数也别硬凑。5.2 查看CPU、内存、主板等信息AMD SMI有个功能容易被忽略——它能输出不少CPU和主板相关的系统信息。NVIDIA用户习惯了nvidia-smi只管显卡第一次看到AMD SMI里存在CPU型号、内存参数这些东西时会有点懵。执行amd-smi info或者amd-smi static --system它会列出主板的Vendor、BIOS版本、CPU的型号和频率等。这在排查为什么GPU跑不满时挺有用——比如发现CPU是老型号或者内存条频率特别低就能快速意识到瓶颈可能在CPU数据供给端而不在GPU本身。换句话说这个工具不只是显卡任务管理器它还能帮你理解整机平台对GPU的支撑能力。5.3 通过libdrm和内核日志做更深的排查AMD SMI的输出本质上来自内核的AMDGPU驱动和libdrm。所以如果你想看驱动是否报错、有没有软锁超时可以结合sudo dmesg | grep -i amdgpu比如页错误GPU page fault、PCIe链路降速、显存ECC报错等dmesg里一般都有线索。AMD SMI本身能看到的错误计数则在amd-smi bad-pages或amd-smi error这类子命令里。如果你的卡是Instinct计算卡有ECC功能的建议定期检查内存错误计数避免训练到一半因为显存错误突然中断。排查流程我一般是先dmesg看驱动有没有致命报错再amd-smi static确认设备识别再amd-smi monitor看实时数据最后amd-smi process list锁定可疑进程。这套流程基本能覆盖绝大部分常见问题。6. 踩坑记录与高效使用心得6.1 权限问题普通用户和老版本的不兼容amd-smi有些子命令必须root权限比如设置功耗、风扇、性能等级。普通用户执行set类操作大概率会报Permission denied或者No such file or directory。这时候不是命令写错了是权限不够加sudo就行。但反过来static和monitor这类只读查询普通用户一般也能执行。如果你发现普通用户连查都查不了检查一下/dev/dri/权限看看是不是当前用户不在video或render用户组里。把用户加进组sudo usermod -aG video $USER sudo usermod -aG render $USER然后重新登录一次。这个坑我在Ubuntu服务器上遇到过多次很多刚入坑的朋友折腾半天驱动结果只是没有用户组权限。6.2 新老版本命令对照速查因为rocm-smi到amd-smi的命令变化比较大我把常用对应关系整理了一下方便大家从网上老教程迁移功能rocm-smi旧amd-smi新查看所有GPU摘要rocm-smi -iamd-smi static查看温度rocm-smi --showtempamd-smi monitor --temperature查看功耗rocm-smi --showpoweramd-smi monitor --power设置功耗上限rocm-smi --setpoweroverdriveamd-smi set --power-cap查看时钟rocm-smi --showclocksamd-smi monitor --clocks查看进程rocm-smi --showpidsamd-smi process list表格不一定覆盖你手里的每一个版本执行前先跑--help是唯一不会错的做法。6.3 显卡功耗为何异常偏高/偏低很多AMD显卡刚装上时默认开了比较激进的功耗策略导致空载温度都在50度以上。我一般会做两件事第一先看amd-smi static里的Max Power和Min Power搞清楚这张卡的设计范围。 第二再根据实际场景调整功耗上限。例如跑推理服务想强调稳定低功耗就可以把上限压低一点sudo amd-smi set --power-cap 150但注意降功耗上限可能让性能下降尤其在高负载的AI训练场景中。对外提供服务时我反而更倾向于保持默认上限而去调风扇策略让温度更可控sudo amd-smi set --fan-speed 60风扇速度设太高会吵但机房里无所谓散热优先。另外每次重启后这些设置可能恢复默认建议放到开机自启脚本里。6.4 配合其他工具交叉验证效率翻倍AMD SMI并不是万能的。很多GPU驱动层面的细节比如OpenCL算子执行情况、ROCm内核状态它看不到这时候可以搭配这几种工具一起用rocm-smi老工具某些老系统上还能用命令风格和amd-smi稍有不同。rocminfo专门查看ROCm平台设备信息能显示GPU是否支持GCN/CDNA架构、有没有注册进ROCm运行时。rapl-read或sensors查看CPU和主板温度辅助定位平台整体功耗限制。powertop看整机功耗分布排查是否因为平台总功耗墙导致显卡降频。我曾经遇到一个非常诡异的问题单卡跑模型没问题双卡一起跑就开始掉性能。后来交叉打开amd-smi和sensors发现只要两张卡同时满载CPU附近的供电模块温度就逼近90度主板限流了。这是纯靠AMD SMI看不出来的必须结合主板传感器数据才行。7. 总结一下个人的使用体会写到这里我不想做什么总结展望就单纯说点心里话。AMD SMI这个工具功能上是完全够用的甚至有些点比nvidia-smi更适合运维排查比如它能输出CPU和主板信息、能看到结温junction temperature而N卡普通工具默认不显示这个重点、PCIe链路状态也看得比较细。最大的问题就是版本迭代快、命令变化大、文档分散导致很多人明明装好了却用不起来。我给新手的建议就是不管网上教程怎么写上来先amd-smi --help摸一遍支持范围。再小的工具版本不同用法就不同。其次是养成定期保存GPU运行日志的习惯不用太频繁10秒一条足够复盘大多数问题。最后遇到说不清的卡顿问题先别怀疑硬件按驱动日志→设备识别→实时负载→进程占用→平台功耗这个顺序走一遍你会发现80%的问题其实都有明确答案。GPU这东西跑起来爽但查起来也上头。希望这篇文章能帮你省下几个晚上排查问题的时间。