【科研分享】监控服务器GPU、CPU和内存使用情况的方法(Windows和Liunix环境)

  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秒钟查看一次占用率(没必要太短,监视进程也会浪费服务器资源)。上述命令会得到如下图所示的监视窗口:

图1:NVIDIA_SMI监视器

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

Top命令

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

top

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

【科研分享】监控服务器GPU、CPU和内存使用情况的方法(Windows和Liunix环境)_第1张图片 图2:CPU-Task监视器

Htop命令

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

htop

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

【科研分享】监控服务器GPU、CPU和内存使用情况的方法(Windows和Liunix环境)_第2张图片 图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、CPU和内存使用情况的方法(Windows和Liunix环境)_第3张图片 图4:Windows下查看GPU状态

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

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

tasklist
【科研分享】监控服务器GPU、CPU和内存使用情况的方法(Windows和Liunix环境)_第4张图片 图5:Windows环境如何查看进程

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

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

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

/F 指定强制终止进程。

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

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

taskkill /PID 4396 -t -f

Reference

[1]:windows通过命令行查看进程杀死进程_凌凌小博客-CSDN博客_windows杀掉进程做Java开发,经常出现端口占用的问题,很多人选择重启电脑来解决占用问题,但其实没必要这么麻烦,可以直接手动杀死占用进程就可以了。1.查看所有进程的端口使用信息Windows键 + R ,在弹出的运行窗口中输入cmd,在cmd窗口中输入netstat -ano显示协议统计信息和当前的端口监听连接。-a   显示所有连接和侦听端口。-n   以数字形式显示地址和端口号。-o   显...https://blog.csdn.net/qq_35923749/article/details/83786794[2]:windows释放GPU内存方法_安娜是个少年的博客-CSDN博客_释放gpu内存在进行pytorch训练的时候,会出现类似以下错误:RuntimeError: CUDA out of memory. Tried to allocate这表示显卡内存不足,搜索怎么释放显卡的内存的时候,大多都是linux下的解决方法。windows下可以这样做:打开cmd窗口,输入nvidai-smi查看显卡使用情况如图可以看到下边有个PID表示进程id,然后打开任务管理器,点击详细信息,根据pid找到需要释放的进程结束即可。...https://blog.csdn.net/qq_43436046/article/details/108442494 

  如有其他需求,请留言评论,本文会不定期更新一些其他新的解决方案。笔者也是站在巨人的肩膀上学习,希望与大家交流。

你可能感兴趣的:(科研分享,学习笔记,学习实践,linux,gpu,服务器,windows)