-
以下两个参数都可以使用nvidia-smi进行查看
-
GPU内存占用率:
-
GPU内存的占用率往往是由模型大小和batchsize决定的,如果发现GPU占用率很小,比如40%,70%等等。如果此时网络结构已经固定,则只需要改变batch size的大小,就可以尽量利用完整个GPU的内存。
-
对GPU内存占用率影响最大的还是模型大小,包括网络的宽度,深度,参数量,中间每一层的缓存,都会在内存中开辟空间来进行保存,模型本身会占用很大一部分内存。
-
其次是batch size的大小,也会占用影响内存占用率。batch size设置为128,与设置为256相比,内存占用率是接近于2倍关系。当你batch size设置为128,占用率为40%的话,设置为256时,此时模型的占用率约等于80%,偏差不大。所以在模型结构固定的情况下,尽量将batch size设置大,充分利用GPU的内存。
-
GPU会很快的算完你给进去的数据,主要瓶颈在CPU的数据吞吐量上面。
-
GPU 内存利用率(GPU-Util):
-
没有设置好CPU的线程数时,这个参数是在反复的跳动的。本质原因:GPU在等待数据从CPU传输过来,当数据从总线传输到GPU之后,GPU逐渐计算起来,利用率会突然升高,但是GPU的算力很强大,0.5秒就基本能处理完数据,所以利用率接下来又会降下去,等待下一个batch的传入。
-
GPU利用率瓶颈在内存带宽和内存介质上以及CPU的性能上面。
-
提供GPU利用率的方式:
-
pytorch中的Dataloader类设置num_worker(线程数)以及pin_memory,可以提升速度
-
首先要将num_workers(线程数)设置合理,4,8,16是几个常选的几个参数。
-
测试发现将num_workers设置的非常大,例如,24,32,等,其效率也不一定会变高,因为模型需要将数据平均分配到几个子线程去进行预处理,分发等数据操作,设高了反而影响效率。
-
当然,线程数设置为1,是单个CPU来进行数据的预处理和传输给GPU,效率也会低。
-
pinned memory 是一种加速数据从cpu到gpu传输速度的方式。
-
其次,当服务器或者电脑的内存较大,性能较好的时候,可以打开pin_memory,就省掉了将数据从CPU传入到缓存RAM里,再给传输到GPU上;为True,会直接映射到GPU的相关内存块上,省掉了一点数据传输时间。
-
调试:
-
命令:top 实时查看CPU的进程利用率,这个参数对应你的num_workers的设置;
-
命令: watch -n 0.5 nvidia-smi 每0.5秒刷新并显示显卡设置。实时查看你的GPU的使用情况,这是GPU的设置相关。
-
这两个配合好。包括batch_size的设置。
-
自动实时刷新GPU的使用情况:nvidia-smi -l
-
有时cuda版本太老也会导致运行的很慢(后续可以尝试的就是更新cudnn的版本)
-
显卡占用和GPU占用是两个不一样的东西,显卡是由GPU和显卡等组成的,显卡和GPU的关系有点类似于内存和CPU的关系,两个指标的占用率不一定是互相对应的。
-
查看内存使用情况:free -m
import { h } from 'hastscript'
import { toHtml } from 'hast-
util
-to-html'
var tree = h ( '.alpha' , [
'bravo ' ,
h ( 'b' , 'charlie' ) ,
' delta ' ,
h ( 'a.echo' , { download : true } , 'foxtrot' )
console . log ( toHtml ( tree ) )
< div class =" alpha
检查风扇利用率,
GPU
温度以及
GPU
利用率(框出来的地方)。可以看到风扇正常在转,温度也不高,利用率甚至为0。那么这个时候就比较疑惑了,如果是上述这三个问题倒比较好去针对性的解决。
这个时候去检查了下CPU利用率,输入:
可以发现CPU
占
用率到了99.3%…这就
导致
实际上只要涉及到CPU运算,就基本上卡死,
导致
整体
模型
训练
不动,造成"
GPU
可能有问题"的假象。
Linux查看显卡信息:lspci | grep -i vga使用nvidia
GPU
可以:lspci | grep -i nvidia前边的序号 "00:0f.0"是显卡的代号(这里是用的虚拟机);查看指定显卡的详细信息用以下指令:lspci -v -s 00:0f.0Linux查看Nvidia显卡信息及使用情况Nvidia自带一个命令行工具可以查看
显存
的使用情况:nvidia-smi表头释义:...
在名称空间中使用localStorage
import { TinyStorage } from '@alphabao/tiny-storage' ;
const store = new TinyStorage ( 'store' ) ;
const cart = new TinyStorage ( 'cart' ) ;
store . set ( 'book-001' , 'Robinson Crusoe' ) ;
store . set ( 'book-002' , "Grimm's Fairy Tales" ) ;
store . set ( 'book-003' , 'Martin Eden' ) ;
cart . set ( 'book-
1. ????问题描述
运行程序的时候提醒
显存
不够,查看了一下nvidia-smi,确实
显存
占满
了,但是
GPU
-
Util
,
gpu
利用率有三个都是0,只有一个是56%
搜索后发现这个现象的原因还比较普遍,但是似乎没有几个可以很好解决这个问题,
脚本之家的文章:Pytorch
GPU
内存
占
用很高,但是利用率很低如何解决,
转载自CSDN博客:Pytorch
GPU
内存
占
用很高,但是利用率很低,
✅总结自CSDN博客:深度学习PyTorch,TensorFlow中
GPU
利用率较低,CPU利用率很低,且
文章目录问题描述参考链接
2020-07-20 10:48:49.753261: W tensorflow/core/common_runtime/bfc_allocator.cc:439] ****************************************___**____***************************************____________
2020-07-20 10:48:49.753329: W tensorflow/core/framewor
global
memory
其中 shared
memory
的io 速度是远快于 global
memory
的。这三种
memory
的访问性质是:
local
memory
: 线程私有,只能本线程访问
shared
memory
: 线程块(th
但是有
显存
占
用说明
模型
应该是在跑的。后来既然
GPU
利用不起来,我干脆同时跑多个
模型
,想充分利用,但是效果还不是很明显,速度依然都
很慢
。
查了查资料发现可以在Dataloader里加pin_
memory
=True, num_workers=8,这样能将数据放入
显存
,并且通过多线程减少数据读入的时间,
模型
训练
速度会快一些。但是我试了试也没有明显的效果,就很奇怪。
当然也试过增大batch size,但是治标不治本。
所以到底为什么
导致
了这个原因呢?
后来我偶然为了减小最后的tensorbo.
CUDA存储器
模型
:
GPU
片内:register,shared
memory
;板载
显存
:local
memory
,constant
memory
, texture
memory
, texture
memory
,global
memory
;host 内存: host
memory
, pinned
memory
. register: 访问延迟极低; 基
加载
模型
进行推理,图像分辨率在224时可以跑通,384时回报设备内存不足。1. 在修改输入图像大小后model的输入大小是否也进行了改变。2. 是否同时运行两个或多个
网络
造成系统资源不足。MindSpore
GPU
环境 3090。3. 是否尝试过减小batch_size。
tensorflow/core/common_runtime/bfc_allocator.cc:661] Chunk at 0x523cd7d00 of size 2048
tensorflow/core/common_runtime/bfc_allocator....