云计算百科
云计算领域专业知识百科平台

怎么查看服务器GPU显存?为什么没有进程却能占满?

服务器的GPU怎么看,为什么明明下面的进程没有占用这么多,但是上面已经满了,可用的显存很少?

问题描述

在服务器上使用 nvidia-smi 查看 GPU 显存使用情况时,发现显存几乎被占满,可用显存很少。然而,通过 nvidia-smi pmon ps aux | grep python 等命令查看具体进程的显存占用时,却发现这些进程的显存使用总量远低于实际已使用的显存。这种现象可能由哪些原因导致?如何进一步排查并解决显存占用不匹配的问题?

问题分析

1. 框架缓存未释放
  • 从输出中可以看到 python 进程(如PID: 2188 和 9374)正在以计算模式(C 类型)运行。
  • 深度学习框架(如 PyTorch 或 TensorFlow)可能会保留显存作为缓存,即使当前没有活跃的任务在运行。
  • 缓存不会立即释放,因此可能导致显存占用看起来比实际使用的更多。
2. 隐藏或未显示的显存分配
  • nvidia-smi 的默认视图可能无法显示所有显存分配细节。
  • 某些进程可能已经退出,但它们分配的显存尚未被释放。
3. 系统或驱动程序占用
  • 显卡驱动程序本身会占用一部分显存,尤其是在启用了持久模式(Persistence Mode)的情况下。
  • 系统服务(如 Xorg 和 gnome-shell)也可能占用显存。
4. 硬件或驱动问题
  • 如果上述原因都无法解释显存占用,可能是硬件层面的问题,或者 NVIDIA 驱动报告的显存使用情况不准确。

实例

以我自己的情况举例,下面是现在显示的情况

首先检查显存使用情况:

nvidia-smi

如果想看其中一个PID的详细情况可以用以下语句

ps aux | grep PID
# 比如
# ps aux | grep 1925

结果如下:可以看到详细的用户信息,进程名字等等

方法 1:清空深度学习框架缓存

如果你使用的是 PyTorch 或 TensorFlow,可以尝试以下操作来清空缓存:

  • PyTorch:

import torch
torch.cuda.empty_cache()

  • TensorFlow:

import tensorflow as tf
tf.keras.backend.clear_session()

方法 2:终止不必要的 GPU 进程

从 nvidia-smi pmon 输出中可以看到有两个 python 进程(PID: 2188 和 9374)。如果这些进程不再需要,可以手动终止它们:

kill -9 2188
kill -9 9374

但是我清理完了之后仍然是没有用,后来通过以下方式检查是否有 Python 脚本仍在运行,并手动清理缓存:

ps aux | grep python

显示的结果如下:

然后下面还有很多-009这个用户的程序,但是明明我这个用户的程序都停了,所以怀疑是没有释放显存

通过 pkill 快速终止

pkill 是一个非常方便的工具,可以根据用户名或其他条件快速终止进程。

终止所有 -009 用户的进程:

pkill -u -009

这条命令会终止当前系统中所有属于 -009 用户的进程。

然后再使用nvidia -smi 进行查看,发现现在就正常了

完结撒花!!! 

赞(0)
未经允许不得转载:网硕互联帮助中心 » 怎么查看服务器GPU显存?为什么没有进程却能占满?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!