Pytorch GPU内存占用很高,但是利用率很低

1.GPU 占用率,利用率

输入nvidia-smi来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util)

GPU内存占用率(Memory-Usage) 往往是由于模型的大小以及batch size的大小,来影响这个指标
显卡的GPU利用率(GPU-util) 往往跟代码有关,有更多的io运算,cpu运算就会导致利用率变低。比如打印loss, 输出图像,等等

在这里插入图片描述

这个时候发现,有一块卡的利用率经常跳到1%,而其他三块卡经常维持在70%以上

2.原因分析

当没有设置好CPU的线程数时,Volatile GPU-Util参数是在反复的跳动的,0%,20%,70%,95%,0%。这样停息1-2 秒然后又重复起来。其实是GPU在等待数据从CPU传输过来,当从总线传输到GPU之后,GPU逐渐起计算来,利用率会突然升高,但是GPU的算力很强大,0.5秒就基本能处理完数据,所以利用率接下来又会降下去,等待下一个batch的传入。因此,这个GPU利用率瓶颈在内存带宽和内存介质上以及CPU的性能上面。最好当然就是换更好的四代或者更强大的内存条,配合更好的CPU。

3.解决方法:

(1)为了提高利用率,首先要将num_workers(线程数)设置得体,4,8,16是几个常选的几个参数。本人测试过,将num_workers设置的非常大,例如,24,32,等,其效率反而降低,因为模型需要将数据平均分配到几个子线程去进行预处理,分发等数据操作,设高了反而影响效率。当然,线程数设置为1,是单个CPU来进行数据的预处理和传输给GPU,效率也会低。其次,当你的服务器或者电脑的内存较大,性能较好的时候,建议打开pin_memory打开,就省掉了将数据从CPU传入到缓存RAM里面,再给传输到GPU上;为True时是直接映射到GPU的相关内存块上,省掉了一点数据传输时间。

(2) 另外的一个方法是,在PyTorch这个框架里面,数据加载Dataloader上做更改和优化,包括num_workers(线程数),pin_memory,会提升速度。解决好数据传输的带宽瓶颈和GPU的运算效率低的问题。在TensorFlow下面,也有这个加载数据的设置。

(3) 修改代码(我遇到的问题)

每个iteration 都写文件了,这个就会导致cpu 一直运算,GPU 等待

在这里插入图片描述
https://blog.csdn.net/qq_32998593/article/details/92849585

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sambd ERROR: job for smbd.service failed

sudo service smbd restart 出现如下问题 解决方案 sudo cp /usr/share/samba/smb.conf /etc/sambs这样就可以重新启动了

Pytorch 反向传播实例,梯度下降

1.手写更新权重 #求 y w*x x_data [1.0,2.0,3.0,4.0] y_data [2.0,4.0,6.0,8.0]w 1.0def grad(x,y): #计算梯度# (y^ - y)^2 (wx -y)^2 grad:2w(wx-y)return 2 * x * (w * x - y)def loss(x,y):return (y - (w * x)) * (y - (w * x))for i in range(30):for …

python环境快速安装opencv 离线版安装

1. 进入清华大学opencv Python库: https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python/ 下载适合自己版本的opencv 怎么判断是否适合自己的环境? 只需要输入 pip install opencv-python # 太慢了 下载 我们不用它然后在网站下载…

Pytorch离线安装 matlibplot

因为使用pip安装太慢了,所以我们使用离线安装包来安装。 1.下载安装包 https://pypi.org/project/matplotlib/#files 选择自己合适的安装包 2. cd到指定的文件夹 然后 pip install .whl即可

Linux 服务器停止当前运行的程序,实验,代码

Nvidia-smi 选择对应的PID 程序 sudo kill -9 11245就能杀死当前运行的实验

Normalization 归一化方法 BN LN IN GN

1.分类 BN是在batch上,对N、H、W做归一化,而保留通道 C 的维度。BN对较小的batch size效果不好。BN适用于固定深度的前向神经网络,如CNN,不适用于RNN;LN在通道方向上,对C、H、W归一化,主要对RN…

Linux 服务器拷贝远程文件 SCP

1.复制文件 (1)将本地文件拷贝到远程 (有时候权限不允许) scp 文件名 用户名计算机IP或者计算机名称:远程路径 scp /root/install.* root192.168.1.12:/usr/local/src(2)从远程将文件拷回本地 scp 用户名…

Pytorch: model.eval(), model.train() 讲解

文章目录1. model.eval()2. model.train()两者只在一定的情况下有区别:训练的模型中含有dropout 和 batch normalization 1. model.eval() 在模型测试阶段使用 pytorch会自动把BN和DropOut固定住,不会取每个batchsize的平均,而是用训练好的…

Job for smbd.service failed because the control process exited with error code. See “systemctl statu

错误 $ sudo service smbd restartJob for smbd.service failed because the control process exited with error code. See "systemctl status smbd.service" and "journalctl -xe" for details.$ systemctl status smbd.servicesmbd.service - Samba SM…

RuntimeError: one of the variables needed for gradient computation has been modified by an inplace o

问题 RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor [4]] is at version 1; expected version 0 instead 分析 nn.relu(True) # 这个引起的问题原来的变量被替换掉了&#xff…

batchsize大小对训练速度的影响

1.batchsize越大 是不是训练越快? GPU :一块2080Ti 平台:pytorch cuda 图片数量:2700 batchsize一个图片处理时间GPU内存占用GPU算力使用一个epoch 所用时间10.117s2.5G20%2700 * 0.0117 318s50.516s8G90%2700 * 0.516/5 279s batchsize大…

os.environ[‘CUDA_VISIBLE_DEVICES‘]= ‘0‘设置环境变量

os.environ[‘环境变量名称’]‘环境变量值’ #其中key和value均为string类型 import os os.environ["CUDA_VISIBLE_DEVICES"]‘6‘’,‘7’这个语句的作用是程序可见的显卡ID。 注意 如果"CUDA_VISIBLE_DEVICES" 书写错误,也不报…

nn.ReLU() 和 nn.ReLU(inplace=True)中inplace的作用

inplace 作用: 1.用relu后的变量进行替换,直接把原来的变量覆盖掉 2.节省了内存 缺点: 有时候出现梯度回传失败的问题,因为之前的变量被替换了,找不到之前的变量了 参考这篇文章

pytorch:加载预训练模型(多卡加载单卡预训练模型,多GPU,单GPU)

在pytorch加载预训练模型时,可能遇到以下几种情况。 分为以下几种在pytorch加载预训练模型时,可能遇到以下几种情况。1.多卡训练模型加载单卡预训练模型2. 多卡训练模型加载多卡预训练模型3. 单卡训练模型加载单卡预训练模型4. 单卡训练模型加载多卡预训…

python中 numpy转list list 转numpy

list to numpy import numpy as np a [1,2] b np.array(a)numpy to list a np.zero(1,1) a.tolist()

知识蒸馏 knowledge distill 相关论文理解

Knowledge Distil 相关文章1.FitNets : Hints For Thin Deep Nets (ICLR2015)2.A Gift from Knowledge Distillation:Fast Optimization, Network Minimization and Transfer Learning (CVPR 2017)3.Matching Guided Distillation&#xff08…

模型压缩 相关文章解读

模型压缩相关文章Learning both Weights and Connections for Efficient Neural Networks (NIPS2015)Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding(ICLR2016)Learning both Weights and …

Linux 杀死进程

kill -9 进程名 杀死进程

计算图片相似度的方法

文章目录1.余弦相似度计算2.哈希算法计算图片的相似度3.直方图计算图片的相似度4.SSIM(结构相似度度量)计算图片的相似度5.基于互信息(Mutual Information)计算图片的相似度1.余弦相似度计算 把图片表示成一个向量,通…

.size .shape .size() type的运用

.size ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值 a np.array([2,2]) print(a.size)2.shap ndarray.shape 数组的维度,对于矩阵,n 行 m 列 a np.array([2,2]) print(a.shape) (1,2)torch.tensor 数组的维度 x torch.r…