最近不少运维同事都在抱怨,说服务器动不动就报警,一看监控,好家伙,GPU使用率直接飙到100%了。这种情况在AI训练、视频渲染或者大型计算任务中很常见,但有时候明明没跑什么大任务,GPU也莫名其妙跑满了,这就让人很头疼了。

GPU使用率100%到底是怎么回事?
首先咱们得搞清楚,GPU使用率100%不一定是坏事。如果你正在训练一个大型AI模型,或者在进行视频渲染,GPU满负荷运转反而是好事,说明硬件资源被充分利用了。
但问题在于,有时候GPU明明闲着,监控却显示100%占用,这就可能是出问题了。GPU使用率异常高企有这么几种情况:
- 正常的高负荷运算:比如AI模型训练、科学计算
- 程序bug导致死循环:代码写得不好,GPU一直在做无用功
- 僵尸进程占用资源:程序已经退出了,但GPU资源没释放
- 挖矿病毒入侵:服务器被植入挖矿程序,偷偷占用你的GPU
快速定位问题的实用命令
当发现GPU使用率异常时,第一件事就是要弄清楚到底是谁在占用GPU资源。不同的操作系统和GPU厂商,用的工具也不一样。
对于NVIDIA显卡,最常用的就是nvidia-smi这个命令。直接在终端输入:
nvidia-smi
这个命令会显示所有GPU卡的状态,包括温度、功耗,最重要的是能看到每个GPU上运行了什么进程。
如果你用的是AMD显卡,可以用rocm-smi命令。Linux系统上还可以用gpustat这个工具,它用起来更直观:
pip install gpustat
gpustat -i
这个命令能实时刷新GPU状态,特别适合监控使用情况的变化。
GPU满负荷运行的常见原因分析
根据我的经验,GPU无缘无故跑到100%,通常是下面这几个原因:
| 问题类型 | 典型症状 | 排查方法 |
|---|---|---|
| 程序bug | 单个进程长期占用100%GPU | 检查程序逻辑,特别是循环部分 |
| 内存泄漏 | GPU内存使用率持续增长 | 监控GPU内存变化 |
| 挖矿病毒 | 出现陌生进程,CPU使用率也高 | 检查进程列表和网络连接 |
| 驱动问题 | GPU使用率显示异常,但实际没任务 | 更新或重装驱动 |
我遇到过最奇葩的情况是,一个同事写的Python脚本里有个死循环,每次迭代都往GPU送一点数据,结果GPU就一直100%占用,但其实根本没在做正经计算。
遇到挖矿病毒怎么办?紧急处理方案
这两年服务器被植入挖矿病毒的情况越来越多了。这些病毒特别狡猾,它们会:
- 伪装成系统进程,名字看起来像正常的
- 在系统空闲时才运行,降低被发现的可能性
- 修改系统监控配置,隐藏自己的行踪
如果怀疑中了挖矿病毒,要立即采取下面这些措施:
第一步:断网
先把服务器的网络断开,防止病毒继续扩散或者对外攻击。
第二步:杀进程
通过nvidia-smi找到可疑进程,直接kill掉。
第三步:查源头
检查进程的启动时间和父进程,找到病毒是怎么进来的。
第四步:清后门
很多挖矿病毒会留下后门,要仔细检查crontab、systemd服务、用户登录记录等。
去年我们有个测试服务器就中了招,查了半天发现是因为Redis没设密码,被人扫描到后植入了挖矿脚本。
GPU资源管理的优化技巧
除了处理异常情况,平时做好GPU资源管理也很重要。特别是在多人共用的服务器上,资源分配是个大学问。
使用容器技术:Docker或者Singularity都能很好地隔离GPU资源,每个人用自己的容器,互不干扰。
设置使用限制:用nvidia-smi的命令可以限制每个进程的GPU使用率:
nvidia-smi -i 0 -pl 200
这个命令把0号GPU的功耗限制在200W,防止单个任务把整张卡拖垮。
优先级调度:如果是重要的训练任务,可以通过设置进程优先级来保证资源分配。
我们团队现在用的是Slurm作业调度系统,虽然配置起来麻烦点,但确实解决了资源分配的大问题。
预防胜于治疗:建立GPU监控体系
等到GPU已经100%了再去处理,其实已经晚了。最好的办法是建立完善的监控体系,提前发现问题。
我们现在的做法是:
- 部署Prometheus + Grafana监控平台,实时采集GPU指标
- 设置多级报警:80%使用率发提醒,90%发警告,95%以上立即处理
- 定期生成GPU使用报告,分析资源使用Pattern
- 对新上的AI任务进行资源评估,避免盲目运行
这套体系建立起来后,GPU相关的问题少了至少70%,大家也不用整天盯着监控看了。
实际案例:一次GPU故障排查全过程
上个季度,我们的一台AI训练服务器就出了个典型问题。那台服务器有8张A100显卡,平时使用率都在30-50%之间,突然有一天全部跑到了100%。
刚开始以为是正常的训练任务,但检查了任务队列后发现,当时根本没有大型训练任务在跑。用nvidia-smi一看,每个GPU上都有一个python进程,但显示的进程号对应的却是系统进程。
我们沿着这个线索往下查:
先用了lsof -p [pid]查看进程打开了哪些文件,发现这些进程都在读写同一个目录下的几个脚本文件。
然后检查了系统日志,发现这些进程是在凌晨3点左右启动的,这个时间点根本没人工作。
最后在/var/spool/cron目录下发现了一个隐藏的定时任务,就是它在定期启动挖矿程序。
清理过程也很曲折,因为病毒会自我修复,我们最后是重装了驱动,清理了所有可疑的cron任务,才彻底解决问题。
这次经历给我们的教训是:GPU监控不能只看使用率,还要看运行的是什么进程,什么时候启动的。
服务器GPU跑到100%虽然让人头疼,但只要掌握了正确的排查方法,建立了完善的监控体系,就能做到心中有数,处理起来也得心应手。希望大家以后再遇到这种情况时,不会再手忙脚乱了。
内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。
本文由星速云发布。发布者:星速云。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/144938.html