2021-10-31在文末更新了Windows环境下查看GPU占用情况和杀死无效进程的解决方案,并附上参考链接。

Liunix环境下实时监控NVIDIA GPU资源动态

  大家跑深度学习进行科研的时候,常常需要使用Liunix内核的服务器来远程上传文件或者激活代码,笔者在这里普及一个常用的命令可以方便大家实时查看NVIDIA 显卡GPU的使用情况,这主要是为了防止同一个实验室里的科研人员互相占用GPU资源导致多项任务冲突的问题发生:

Watch命令

  在服务器shell的命令行界面中键入以下代码,可以实时监控GPU显存和计算单元占用情况(但请注意这会独占一个连接窗口,关闭后重新打开连接就会导致监控解除),通常要避免两项较大显存占用的任务被同时放在一张卡里进行计算的情况。在这个监视窗口下可以看到服务器内所有显卡的工作状态,温度,功率,显存占用情况,算力单元占用情况等。同时也可以观测到驱动程序的版本,CUDA的版本等信息。

watch -n 1 nvidia-smi

  其中,-n后面的1是刷新速率,可以设置成任意数值,目前我比较常用的是1,也就是1秒钟查看一次占用率(没必要太短,监视进程也会浪费服务器资源)。上述命令会得到如下图所示的监视窗口:


如何查看服务器支持不支持虚拟化 如何查看服务器是否有gpu_windows

图1:NVIDIA_SMI监视器

Liunix环境下实时监控服务器CPU资源动态

Top命令

  同样的,不仅可以监视GPU,我们也可以在shell中键入以下两类命令来监控CPU的使用情况,首先第一种是:

top

  在命令行输入top就可以实现对服务器进程的监控,此时可以看到多个用户的进程,以及PID,如果遇到有进程卡在了里面可以采用kill + PID的方式结束进程。如下图所示:


如何查看服务器支持不支持虚拟化 如何查看服务器是否有gpu_如何查看服务器支持不支持虚拟化_02

图2:CPU-Task监视器

Htop命令

  同时也可以采用内置的更高级的视觉窗口来更直观的监视CPU和内存的使用情况:(2021-10-31补充)

htop

  htop能够更直观的显示活跃进程,单个进程或多个线程的具体内存1和CPU的占用情况,并且会报告当前所有服务器用户的内存使用状况,并且有更多的F-系列的直接命令可供使用。


如何查看服务器支持不支持虚拟化 如何查看服务器是否有gpu_gpu_03

图3:CPU-内存-TaskID-UserID监视器

补充*2021-10-31

Liunix环境下如何杀死无效进程

  有时我们会有这样的需求,在做实验时由于终端机死机,或因为一些其他的因素导致有进程被卡在服务器的GPU里或者CPU里,占着显存活着内存,但是无法在终端机用IDE进行结束,或无法立刻结束回收资源,这时候该怎么办?

  首先,用上文的方法打开GPU或CPU监视窗口,根据你自身的UID或者准确的定位无效进程的PID,使用Kill命令来杀死进程,立刻释放相关的计算资源,例如杀死进程PID=14320:

kill 14320

Windows环境下如何查看GPU状况

  其实非常容易,NVIDIA的命令在Windows中也同样适用,这可以帮助我们快速的定位当前正在运行的实验的PID,只需要打开cmd输入:

nvidia-smi

  就可以得到如下图所示的界面,这与上文所述的Liunix的界面是完全相似的。 


如何查看服务器支持不支持虚拟化 如何查看服务器是否有gpu_服务器_04

图4:Windows下查看GPU状态

 Windows环境下如何查看进程内存占用情况

  这个方法,也与Liunix非常相似,不再赘述,直接贴代码和图示:

tasklist


如何查看服务器支持不支持虚拟化 如何查看服务器是否有gpu_gpu_05

图5:Windows环境如何查看进程

Windows环境下如何杀死无效进程

  通过上述方法可以查看到占用端口号的进程的PID,这时候就可以直接杀掉进程相关,命令行使用taskkill /PID 进程号 -F -T  

其中,/PID processid 指定要终止的进程的 PID。

/F 指定强制终止进程。

/T 终止指定的进程和由它启用的子进程。

例如,杀死PID=4396的进程,并杀死其子进程。(通常用于关闭某个因断电或死机而卡在服务器中的实验)可以参考如下代码:

taskkill /PID 4396 -t -f