如果使用命令nvidia-smi不显示占用GPU显存的进程,可以使用以下命令查看:fuser -v /dev/nvidia0nvidia后面的0表示GPU的id号。输入上述命令会显示残留的进程,如下:逐个把残留进程kill掉就行了,命令为:kill idkill完残留进程后,GPU显存即可完全释放。...
如果在python内调用pytorch有可能
显
存
和
GPU
占用
不会被自动
释放
,此时需要加入如下代码
torch.cuda.empty_cache()
我们来看一下官方文档的说明
Releases all unoccupied cached memory currently held by the caching allocator so that those can be used in other
GPU
application and visible in nv
id
ia-smi.
empty_cache() doesn’t increase the amount of
GPU
me
我使用Pytorch进行模型训练时发现真正模型本身对于
显
存
的
占用
并不明
显
,但是对应的转换为tensorflow后(权重也进行了转换),发现Python-tensorflow在使用时默认吃掉所有
显
存
,并且不手动终结程序的话
显
存
并不
释放
(我有两个序贯的模型,前面一个跑完后并不
释放
占用
显
存
)(https://github.com/tensorflow/tensorflow/issues/1727),这一点对于后续的工作有很大的影响。
后面发现python-tensorflow限制
显
存
有两种方法:
1. 设置
显
卡的使用率
这种方法在学习和工作中比较好用,学习时可提高
显
卡使用效率,工作时可方便的获得GP
在运行任务时,报错
显
卡memory不够,但是用nv
id
ia-smi发现该卡并没有对应的p
id
,但是memory却使用了很多
猜想应该是上个任务没被完全杀死,因为几分钟前自己把卡1上的任务停掉的,那就是之前的任务还
占用
着memory
fuser -v /dev/nv
id
ia*
可以查看卡1上的
进程
id
发现确实是还有很多
进程
ps -aux |grep -v gre|grep 53300
查看
进程
对应的命令,发现确实是上个任务
然后用kill杀死上面这些
id
可以使用"top"或"htop"命令来查看当前系统中
占用
CPU 资源最多的
进程
。如果没有特别大的
进程
占用
CPU 资源,可以使用 "ps aux" 来查看所有
进程
的详细信息,找出系统中
占用
CPU 资源最多的
进程
。
另外, 也可以使用"vmstat"或"mpstat"来查看系统中 CPU、内
存
、IO 等各项资源的使用情况。如果 IO 资源
占用
很高,可能是磁盘 I/O 问题,可以使用 "iosta...
傻了,新买的电脑3060,6G
显
存
。啥也没干就不够用了?
于是开始上网找解决办法,很多大佬说,是
显
存
被其他
进程
占用
又没关闭导致的。建议使用nv
id
ia-smi指令在cmd下查找
进程
,关闭即可。
乖乖听话:
?没有
进程
,那到底是什么
占用
了我的现
存
!
我们平时使用
GPU
训练深度学习模型时,有时程序异常终止而
gpu
的内
存
却并没有自动清空,导致我们想再次运行程序时,会出现报错:RuntimeError: CUDA out of memory。
这时候最简单直接的办法就是重启电脑,可是如果我们不想老是去重启电脑,或者程序运行在服务器上我们没权限重启怎么办,下面提供几种应对不同情况的办法。
首先,我们在命令行输入nv
id
ia-smi,查看当前
gpu
使用情况。
当可以查看到
进程
时
如上图所示,当可以在输出结果中看到process
id
(P
ID
)时,我们可以直
初步尝试 Keras (基于 Tensorflow 后端)深度框架时, 发现其对于
GPU
的使用比较神奇, 默认竟然是全部占满
显
存
, 1080Ti 跑个小分类问题, 就一下子满了. 而且是服务器上的两张 1080Ti.
服务器上的多张
GPU
都占满, 有点浪费性能.
因此, 需要类似于 Caffe 等框架的可以设定
GPU
ID
和
显
存
自动按需分配.
实际中发现, Keras 还可以限制
GPU
显
存
占用
量.
这里涉及到的内容有:
GPU
ID
设定
GPU
显
存
占用
按需分配
GPU
显
存
占用
限制
GPU
显
存
优化
1.
GPU
ID
设定
#! -- coding: utf-8 --*
Mon Oct 19 16:00:00 2020
+-----------------------------------------------------------------------------+
| NV
ID
IA-SMI 410.104 Driver Version: 410.104 CUDA Version: 10.0 |
|-------
查询
GPU
时无
进程
运行,但是
显
存
却被
占用
了
1、具体表现
nv
id
ia-smi或者
gpu
stat无
进程
在
GPU
上运行,但
GPU
显
存
却被
占用
了
2、造成原因
应该是
存
在僵尸
进程
,已经运行完毕或者卡死,但是内
存
没有
释放
,处于挂起状态
3、解决方案
3.1 方案一
3.2 方案二
如果电脑不能重启,那就通过命令行:
fuser -v /dev/nv
id
ia*
或者有管理员权限的时候
sudo fuser -v /dev/nv
id
ia*
可以看到对应的设备,是有
进程
的。
最后就用kill命令行杀掉相
训练模型时,一般我们会把模型model,数据data和标签label放到
GPU
显
存
中进行加速。
但有的时候
GPU
Memory会增加,有的时候会保持不变,以及我们要怎么清理掉一些用完的变量呢?
下面让我们一起来探究下原理吧!
pytorch训练
只要你把任何东西(无论是多小的tensor)放到
GPU
显
存
中,那么你至少会栈1000MiB左右的
显
存
(根据cuda版本,会略有不同)。这部分
显
存
是cuda running时固有配件必须要占掉的
显
存
,你先训练过程汇总也是无法
释放
的。
import torch
在Linux中
释放
GPU
显
存
可以通过以下步骤进行:
1. 杀掉
占用
显
存
的
进程
:使用命令 `nv
id
ia-smi` 查看当前
显
存
使用情况,找到
占用
显
存
较多的
进程
ID
。然后使用命令 `kill <
进程
ID
>` 杀掉该
进程
。
2. 重启X服务器:可以使用命令 `sudo systemctl restart display-manager` 或者 `sudo service lightdm restart` 重启X服务器,这将
释放
所有
占用
的
显
存
。
3. 卸载NV
ID
IA驱动:如果以上方法不起作用,可以尝试卸载NV
ID
IA驱动,重新安装最新版本的驱动。具体的卸载和安装过程可以参考NV
ID
IA官方文档或相关的Linux发行版文档。
请注意,这些方法可能会导致正在运行的应用程序和系统中断,因此在执行之前请确保保
存
好所有重要数据。此外,具体的步骤可能因Linux发行版和
显
卡驱动版本而有所差异,请根据实际情况进行操作。