搞GPU的同学不管是做深度学习、科学计算还是游戏开发肯定都遇到过这种场景新买的显卡跑日常程序一切正常结果一上大负载就黑屏、掉驱动、报D3D device removed或者刚装好的服务器跑了两天训练突然ECC报错。这种问题最坑的地方在于它不在小负载下显现必须把GPU按在满载状态下狠锤一阵子才能暴露。gpu_burn就是干这个的。这个工具本质上是一个极端负载的CUDA程序通过让GPU的计算单元跑满某种特定的浮点运算来制造持续高温、高功耗、高占用率状态把不稳定硬件、供电问题、散热短板全部逼出来。它适合刚装机、换卡、超频后做稳定性验证的玩家适合运维拿到一批GPU服务器做质检的老手也适合在跑长任务之前想给自己吃一颗定心丸的深度学习用户。整篇文章我会从安装讲起把编译、跑测、参数、温度监控、故障排查全部过一遍。整个过程我踩过不少坑下面这些经验都是实测过的。1. GPU稳定性测试为什么非它不可1.1 什么场景下需要压测GPU先说一个很常见的误解很多人觉得GPU能点亮、能玩游戏、能跑个AI推理就说明显卡没问题。实际上显存颗粒的体质、供电模块的稳定性、散热模组的导热效率这些在小负载下根本看不出来。只有当GPU长时间保持在接近满载的状态下运行时那些隐性问题才会真正暴露出来。我见过最典型的翻车场景有三个第一个是刚收到的二手卡或者矿卡。卖家说甜甜圈烤机半小时没问题但实际到手跑大模型微调半小时内必定报错或者掉驱动。二手卡的显存可能早就被长期高温高负载摧残过表面上核心还能跑但一上重负载就原形毕现。第二个是机房新上架的GPU服务器。运维直接跑业务跑了一周才发现某张卡的散热风扇转速异常温度比其他卡高十几度这时候业务已经被影响。专业的做法是在上架之前先用gpu_burn把每张卡都压一遍该暴露的问题全都暴露在业务上线之前。第三个是给GPU做超频。核心频率拉高50MHz显存频率拉高200MHz跑游戏没毛病但实际渲染或者训练时可能会随机崩溃。超频后的稳定性验证必须要用能持续吃满GPU的工具来测而不是用游戏帧数来衡量。在这些场景里GPU稳定性测试不是一个可选步骤而是刚需。你不测后面就要花十倍的时间来排查那些莫名其妙的崩溃问题。1.2 gpu_burn为什么是神器市面上GPU压测工具不少但gpu_burn能被叫神器主要是因为它够狠、够直接、够简单。先看它怎么狠的。gpu_burn运行的是一种叫CUDA矩阵乘法的密集计算负载在循环里反复执行矩阵乘法运算让GPU的CUDA核心、显存、供电模块全部处于高负载状态。相比FurMark甜甜圈偏重渲染管线gpu_burn是专门把计算单元往死里压的那种更接近深度学习训练、科学计算这类真实计算负载。再看它怎么直接。gpu_burn没有图形界面没有花里胡哨的设置页面就是一个命令行工具。运行起来之后屏幕上会周期性地打印GPU的利用率、温度、功耗等信息跑完以后程序返回退出码。退出码为0就是通过非0就是失败简单明了。最后看它怎么简单。它是一个开源项目源码托管在GitHub上整个项目代码量不大依赖也很少。只要系统里有NVIDIA驱动和CUDA工具包基本就能编译运行。无论是Ubuntu、CentOS还是其他Linux发行版编译过程几乎是一路make畅通无阻。对比一下其他工具就能看出差别FurMark适合Windows下测图形渲染但如果想测CUDA计算稳定性就不够对口Unigine Heaven之类偏重游戏场景负载不够持续GPU-Z自带的渲染测试又太轻量。真正能在Linux服务器上稳定跑起来、压得又狠又持久、结果还容易判断的工具gpu_burn是我用过最顺手的。2. gpu_burn安装从零到能跑2.1 安装前的环境检查在动手编译gpu_burn之前先花两分钟确认自己的环境。gpu_burn依赖NVIDIA显卡驱动和CUDA工具包所以第一件事是确认驱动是否装好、CUDA能否正常工作。打开终端先执行nvidia-smi看看能否正常列出显卡信息。如果提示command not found说明驱动没装好或者环境变量没配好如果能正常显示显卡型号、驱动版本、显存信息说明驱动这一关过了。接下来确认CUDA编译器。gpu_burn在编译时需要nvcc编译器所以环境里得有CUDA Toolkit。执行nvcc --version如果能输出版本号说明CUDA环境没问题。这里有个小细节不一定要系统级安装CUDA Toolkit只要把CUDA的bin目录加入PATH能调用到nvcc就行。很多人习惯用Anaconda里带的cudatoolkit但这个通常不包含nvcc还是建议单独装一个CUDA Toolkit。检查一下gcc和make是否可用执行gcc --version和make --version。这是一个很容易被忽略的点有些精简版服务器系统连gcc都没装编译时才会报错。如果没有先用apt install build-essentialUbuntu系或者yum groupinstall Development ToolsCentOS系装一下。最后确认一下显卡是否支持CUDA。用nvidia-smi --query-gpuname --formatcsv,noheader看一下显卡型号所有的NVIDIA GeForce、Quadro、Tesla、A系列、H系列基本都支持。如果是AMD显卡或者部分国产GPU平台gpu_burn的标准版就不适用了通常需要找对应的OpenCL版本或者其他替代方案这个后面会再提。2.2 获取源码与编译环境确认没问题之后就可以开始拉源码了。gpu_burn的项目名叫gpu-burnGitHub仓库地址是wilicc/gpu-burn直接git clone下来就行。git clone https://github.com/wilicc/gpu-burn.git cd gpu-burn make如果一切顺利当前目录下会生成一个名为gpu_burn的可执行文件。编译过程很快十几秒到几十秒不等取决于机器性能。编译完成后可以执行ls -l检查一下看到带x权限的gpu_burn就说明编译成功了。这里有一个容易踩的坑gpu_burn的源码里有几个CUDA源文件如果nvcc版本和驱动版本差距太大编译时可能报错。比如驱动是470.x但CUDA Toolkit装的是12.x虽然能编译出程序运行时会提示CUDA版本不兼容。我的建议是尽量让CUDA Toolkit版本和驱动支持的CUDA版本匹配装驱动的时候看一眼nvidia-smi右上角的CUDA Version那个就是当前驱动能支持的最高CUDA版本安装CUDA Toolkit时选一个不高于它的版本就行。另一个坑是Makefile里的架构参数。默认情况下Makefile会尝试自动检测GPU架构但有些新卡或者特殊卡可能识别不到。如果编译报错提示unknown GPU architecture可以手动编辑Makefile或者直接在编译时指定例如make COMPUTE_VER89这里的数字对应GPU的计算能力比如RTX 30系列的Ampere架构是8.xRTX 40系列的Ada架构是8.9对应89H100也是9.0。2.3 安装过程中的坑把我在安装时踩过的几个坑集中说一下这些基本都是新手最容易卡住的地方。第一个坑是权限问题。如果gpu_burn在运行时报错提示无法访问GPU设备先看自己是不是有权限访问/dev/nvidia*。很多服务器环境里普通用户不属于video组导致无法操作GPU。解决办法是把当前用户加入video组或者直接用sudo运行。加入video组的命令是sudo usermod -aG video $USER改完之后需要重新登录终端才能生效。我自己的习惯是直接用普通用户跑测试因为生产环境里用root跑GPU测试总归不太规范提前把权限配好后面跑自动化监控脚本也方便。第二个坑是缺库。编译时如果报错找不到libcuda.so或者libcudart.so说明动态库路径没配置好。Ubuntu系统下一般可以通过设置LD_LIBRARY_PATH来解决export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH如果系统里装了多个CUDA版本还要注意路径别配错。有一个很实用的检查方法执行ldconfig -p | grep cuda看看系统里实际能搜到哪些CUDA的库文件对照一下就知道缺什么了。第三个坑是虚拟机或容器环境。如果是在Docker容器里跑gpu_burn除了要装nvidia-container-toolkit之外还要确保容器启动时加了--gpus all参数。有些人在容器里怎么编译都报错找不到NVIDIA驱动其实就是没把GPU设备挂载进容器。3. 第一次实战跑通你的第一个压力测试3.1 基础命令与参数说明gpu_burn的用法非常简单核心命令格式是./gpu_burn [时长秒数] [可选参数]最基础的操作就是指定一个测试时长单位是秒。比如跑10分钟稳定性测试./gpu_burn 600如果不指定时长默认会一直跑下去直到你按CtrlC强制停止。在交互式终端里测试时我一般会用这个方式先确认程序能正常跑起来观察几秒钟温度和功耗是否符合预期再决定要不要正式跑长测试。gpu_burn提供的参数不多但有几个很实用。查看完整参数可以用-h选项./gpu_burn -h比较常用的参数包括-d指定要测试的GPU设备编号。多卡机器上默认会使用所有能看到GPU如果想单独测某一张卡用-d 0表示测第一张-d 1表示测第二张。-c指定每个GPU上跑的CPU绑定线程数。这个参数在单卡多GPU共享CPU资源的场景下有点用一般不用特意改。-l指定日志输出文件把测试过程中的输出写到文件里方便事后分析。-t设定测试时长和第一个位置参数效果一样。不过注意如果同时给了位置参数和-t行为可能会让人迷惑建议只用一种方式指定时长。一个例子测试编号为0和1的两张卡跑5分钟日志写到test.log./gpu_burn -d 0,1 300实际跑起来以后屏幕上会每几秒钟刷新一次状态显示每张卡的利用率、功耗、温度等信息。我第一次跑的时候盯着屏幕看了好一会儿说实话还挺上头就像看着发动机转速表一样。3.2 如何判断测试真的压住了GPU很多人跑gpu_burn只盯着屏幕看有没有报错这远远不够。要判断压力测试是否真的压到位了必须同时看三个指标GPU利用率、功耗、温度。首先看GPU利用率。理论上gpu_burn运行期间利用率应该稳定在95%以上。如果你发现利用率只有百分之六七十可能是没压住或者有其他任务抢占资源。用nvidia-smi单独看一眼就能确认。其次看功耗。NVIDIA显卡在满载时功耗会接近TDP上限。比如TDP是350W的卡跑gpu_burn时功耗应该能冲到330W以上。如果功耗一直上不去说明负载不够或者供电有问题。功耗数据可以用nvidia-smi的Power Draw字段查看nvidia-smi --query-gpupower.draw --formatcsv最后看温度。温度会随着测试时间逐渐上升通常在几分钟内达到一个热平衡点之后小幅波动。如果温度一直涨不停或者测试结束时已经撞到温度墙通常是83到85摄氏度左右说明散热有问题即使gpu_burn没有报错这块卡在长期高负载下也不会稳定。判断测试是否通过我的标准是在指定时长内没有报错、没有掉驱动、GPU利用率和功耗保持在高位、温度达到预期散热器的平衡水平且没有持续飙升。这四个条件都满足我才会认为这张卡通过了稳定性验证。3.3 进阶多卡环境与时长控制服务器场景下多卡测试是非常常见的需求。默认情况下gpu_burn会自动检测所有GPU并同时压测这本身很方便但多卡环境下有几个细节要注意。一是电源余量。满负载运行的GPU功耗极高如果服务器的电源功率不足多卡同时跑满负载可能导致电源保护直接整机断电。我遇到过好几次这种情况原本以为显卡没问题结果一跑多卡压力测试就整机重启排查了半天才发现是电源功率不够。所以在跑多卡测试之前先算一下总功耗单卡满载功耗乘以卡数再加上CPU、主板、硬盘的功耗确保电源功率留足余量。二是散热条件。多卡并行发热量极大尤其是在2U机箱里如果风道设计不好卡与卡之间的温差会很明显。跑测试时建议用温度监控脚本持续记录每张卡的温度这样测试结束后可以分析温度曲线找出散热有问题的卡。三是测试时长的选择。日常快速验证我一般跑10到15分钟如果是新卡或者怀疑有隐性问题我至少跑1小时对于那些存放了很久的二手卡我甚至会跑3小时以上。gpu_burn的时长设置非常灵活启动后不是非要一口气跑完你可以随时用CtrlC中断不会对系统造成什么伤害。不过要真正检测出显存或供电的不稳定问题太短的测试没有意义一般不建议少于5分钟。4. 温度监控别让GPU在发烧中跑测试4.1 NVIDIA驱动自带的监控三件套gpu_burn本身的屏幕输出虽然会显示温度但那个信息太粗糙真要做稳定性分析必须搭配独立的温度监控手段。NVIDIA驱动自带的三个工具是我的标配nvidia-smi、nvidia-smi dmon、nvidia-smi query。先看最基础的nvidia-smi这个应该所有人都用过。直接执行就能看到当前每张卡的温度、功耗、显存使用率、利用率等关键指标但它是静态的适合抽查不适合持续监控。再看nvidia-smi dmon这个命令启动后会用类似top的交互界面持续刷新GPU的各项数据包括温度、功耗、显存占用、风扇转速等。跑gpu_burn时开一个独立的终端窗口执行nvidia-smi dmon -s pucvmet参数里的p表示功耗、u表示利用率、c表示显存、v表示电压、m表示显存温度、e表示错误信息、t表示温度。这算是一种实时的GPU监控仪表盘比反复执行nvidia-smi要高效得多。最后是nvidia-smi query这个命令适合脚本化采集数据可以把任意字段组合输出成CSV或纯文本方便定时采集并写入日志。例如nvidia-smi --query-gputimestamp,temperature.gpu,utilization.gpu,power.draw,memory.used --formatcsv输出格式清爽更重要的是它可以直接供脚本调用这是做自动化监控的基础。4.2 写一个温度记录脚本如果想让温度监控更可控建议写一个简单的脚本在跑gpu_burn的同时每2秒记录一次温度、功耗和利用率数据全部写入CSV文件。这样一个测试周期跑完你得到的是一份完整的数据曲线而不是几个零散的数字。我自己常用的脚本思路是这样的#!/bin/bash # gpu_monitor.sh # 用法./gpu_monitor.sh 输出文件.csv outfile$1 echo timestamp,gpu,utilization,power,mem_used,mem_total,temp,fan_speed $outfile while true; do nvidia-smi --query-gputimestamp,index,utilization.gpu,power.draw,memory.used,memory.total,temperature.gpu,fan.speed \ --formatcsv,noheader,nounits $outfile sleep 2 done这里使用了nvidia-smi的CSV输出格式每个GPU一行数据时间戳精确到秒。脚本会无限循环跑gpu_burn时先启动这个脚本测试结束后用CtrlC停掉脚本就行。如果想用Python做更精细化的分析可以借助subprocess每秒采集一次数据然后利用pandas来画图。不过说实话对大多数场景来说上面这个简单的bash脚本已经完全够用了。测试结束后用Excel或者pandas读取CSV看一下温度曲线的走势、功耗曲线的波动有没有骤降或者尖峰一目了然。4.3 温度与稳定性多少度算危险这里必须说清楚一个问题显卡温度高不等于不稳定温度低也不等于一定稳定。温度只是稳定性验证中的一个参考指标但它非常重要因为过热会触发降频保护降频之后核心频率不稳定更容易在复杂负载下出错。以NVIDIA主流显卡为例70摄氏度以下是优秀水平70到80摄氏度是正常水平80到85摄氏度勉强算及格85摄氏度以上通常意味着散热不行或者机箱风道太差。不同型号的卡会有差异比如一些公版涡轮卡满载温度普遍偏高但这属于设计使然非公版卡如果满载冲到90度那基本可以断定散热有问题。在跑gpu_burn时如果发现温度撞到了温度墙也就是到了83到90度这个区间并且功耗开始下降那就说明GPU已经因为过热而降频了。这种情况下即使gpu_burn没有报错我也建议先解决散热问题再继续测试否则后续跑深度学习训练之类的大任务性能会明显受限稳定性也谈不上。电源和功耗也是监控的重点。在温度监控脚本里记录功耗数据有一个额外的好处可以观察GPU的功耗是否稳定。正常满载时功耗曲线应该是小幅波动的如果出现大幅度的骤降然后恢复很可能说明供电不稳定或者电源余量不足。5. 常见故障与排查实录5.1 编译报错、找不到头文件gpu_burn整体编译很简单但真出问题的时候也挺让人头疼。最常见的一类错误集中在编译阶段CUDA头文件找不到、nvcc版本不兼容、gcc版本过老。我遇到过一次比较典型的情况系统是CentOS 7自带的gcc 4.8.5CUDA Toolkit装的是11.x编译时报错提示当前gcc版本不支持。原因是新版CUDA对gcc版本有最低要求CentOS 7默认的gcc太老需要启用高版本的DevToolset才行。解决办法是用scl工具切换到高版本gccyum install -y devtoolset-9 scl enable devtoolset-9 bash之后在当前终端里重新make就能过了。Ubuntu系统相对省心但如果你用的是Ubuntu 22.04之前的版本gcc默认版本也可能偏低遇到类似报错时优先检查gcc版本。还有一个很隐蔽的坑有些系统里同时装了好几个CUDA版本系统默认的nvcc是旧版但动态库路径指向的是新版导致编译和运行环境不一致。这种情况下最好用绝对路径调用nvcc或者临时切换环境变量保证编译和运行用的是同一个CUDA版本。5.2 测试中途掉驱动、D3D设备已移除跑gpu_burn跑着跑着屏幕输出突然卡住然后nvidia-smi都执行不了或者系统日志里报NVRM错误这个在Linux上通常叫掉驱动。在Windows上如果跑其他压力测试可能还会弹出D3D device removed之类的错误。本质上都是同一个问题GPU在高负载下崩溃驱动被迫重置或者挂起。遇到掉驱动先不要急着怪显卡。按顺序排查这几个方面第一电源供电是否充足第二显卡供电接口是否插紧第三驱动版本是否过老或有已知bug第四GPU温度是否异常高第五显存是否有硬件损坏。我最常遇到的是电源问题。特别是用转接线给显卡供电的情况6pin转8pin、或者一根线分叉接两张卡在高负载下很容易供电不足。这种问题换一个原生供电线或者换更大功率的电源就能解决。如果排除了供电和温度掉驱动还是复现那就要考虑显存或者核心本身的硬件问题了。这种时候可以配合其他显存测试工具来进一步定位。如果连gpu_burn都跑不过大概率这张卡不适合跑长任务。5.3 测试结果判定与老手建议最后讲讲怎么科学地判定一次gpu_burn测试是否真的通过。很多新手只看程序有没有报错这是远远不够的因为有些硬件问题并不会立刻导致gpu_burn崩溃而是会在后续一两个小时的稳定负载里才慢慢浮现。我的判定流程是这样的先看退出码和终端输出确认没有CUDA error、没有NVRM错误然后检查温度日志看看整个测试过程中温度曲线是否平稳有没有异常尖峰最后看功耗曲线有没有出现大起大落的异常波动。三步都通过我才会在这张卡上放心跑业务。再多说一个老手建议gpu_burn适合做压力测试但它不适合做显存专项测试。显存问题有时需要用专门扫显存的工具来检测比如通过一些CUDA示例程序里的bandwidthTest或者memtest来辅助判断。我在实际验卡时会组合使用先用gpu_burn压整体稳定性再用显存测试工具针对显存做专项扫描这样能把绝大多数硬件隐患筛出来。还有一个细节是关于日志的。跑gpu_burn时建议配合nvidia-smi的-l参数周期记录状态把输出保留下来nvidia-smi -l 5 gpu_smi.log这样即使gpu_burn中途挂掉日志也能帮你还原整个故障过程。排查问题的时候这些原始数据比你的记忆可靠得多。在我手头的机器上gpu_burn至今仍然是我验卡流程里的第一道工序。无论是新卡、二手卡还是机房里的计算卡上机第一步都是拉一次满载压测配合温度日志看一遍曲线。工具本身不复杂编译一次就能长期用但它在整个稳定性验证体系里的位置至今没有更好用的替代品。如果你还没试过gpu_burn建议拿手边的机器跑一次说不定能替你提前发现不少隐患。
企业数字化 ERP 产品动态
相关推荐
UTM 虚拟机完全指南:Apple Silicon 上跑 Windows/Linux 的开源多面手 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 12:33:58
从刷BIOS到I2C/SPI调试:把吃灰的CH341A变成万能工具 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 12:33:58
DDS双义解析:FPGA信号合成与分布式数据分发技术对比 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 12:33:58
F28388D实现EtherCAT从站的硬件适配与协议栈实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:15:44
MAX9295/9296 MIPI PHY四种模式详解与数据通路设计实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:15:44
AssignedAccessManager.dll丢失怎么办?三步修复Windows系统DLL文件 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:15:44
LTspice半桥LLC仿真教程:一步步拆解6个谐振工作阶段 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:15:44
基于LSP协议的语言插件开发 01
语言插件
1.1 什么是语言插件
现代的代码编辑器(如 VS Code、Sublime Text、Vim、Emacs)在出厂时是“通用”的,预设了一系列能力:它们知道如何编辑文本、管理文件、运行任务,但并不理解任何一门具体的编程语言。… · 2026/9/24 13:15:44
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44