问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

GPU显存被占用无法清理问题解决

创作时间:
作者:
@小白创作中心

GPU显存被占用无法清理问题解决

引用
1
来源
1.
http://82.157.247.243/archives/2269

在使用GPU进行深度学习或数据科学任务时,经常会遇到显存被占用但无法清理的问题。本文将通过一个具体案例,详细介绍如何检查GPU使用情况,并使用Linux命令行工具释放被占用的显存。

问题描述

在运行了多个Jupyter Lab Notebook后,发现系统提示"out of memory"。通过nvidia-smi检查GPU使用情况时,虽然显存显示被占用,但占用列表却为空,无法直接看到具体的占用情况。

原因分析

经过排查,发现是由于一个未及时关闭的web_demo_streamlit进程导致的显存占用。

解决方案

1. 使用nvidia-smi检查GPU使用情况

首先使用nvidia-smi命令检查GPU的使用情况。如果发现程序已经关闭了但是还有显存占用,说明有残留进程占用了显存,需要按以下方式释放:

从截图中能看出有程序占用了4388MiB的显存,此时要释放显存,需要先找到进程ID。

2. 使用ps -ef命令终止占用GPU的进程(生产环境不建议操作)

使用ps -ef命令查看全部进程,并通过grep命令识别出可能用到了GPU的进程。接着使用kill -9命令终止这些进程。

ps -ef
ps -ef|grep 关键字
kill -9 进程号

从截图中可以看到python train.py程序的进程ID是594和797,可以使用以下命令来结束进程:

kill -9 594 797

在多卡并行场景下,可以使用以下更强大的方式结束进程:

ps -ef | grep train | awk '{print $2}' | xargs kill -9

更多说明

Linux命令中的|符号称之为管道,作用是把前一个命令的输出作为下一个命令的输入。管道的功能非常实用,在很多场景下都可以使用到,比如某个文件夹下有几万个文件,但是有一个文件是txt文件,其他均为图片,需要将此文件找出来。如果使用ls获取文件列表后人工排查非常麻烦,因此可以使用:

ls | grep .txt

参考资料

  1. AutoDL 文档 - 显存没有释放
  2. AutoDL 文档 - 性能篇

先使用nvidia-smi -l 1命令查看GPU使用率,如果GPU使用率为0优先检查代码是否调用了GPU进行计算。如果GPU使用率已经为90%+,则可以考虑换多卡并行或更高算力的GPU。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号