我就疑惑了,一个使用大约近3000流处理器的游戏它如果是用6G显存。那么X多出6G有屁用啊? 如果是使用12G显存那么猛的游戏那么X的3000流处理器够用吗,应该不够吧感觉X的设计,有点显存与流处理器个数不匹配
深度学习最吃机器耗资源,在夲文我将来科普一下在深度学习中:
这是nvidia-smi命令的输出,其中最重要的两个指标:
显存占鼡和GPU利用率是两个不一样的东西显卡是由GPU计算单元和显存等组成的,显存和GPU的关系有点类似于内存和CPU的关系
这里推荐一个好用的小工具:gpustat
,直接pip install gpustat
即可安装,gpustat基于nvidia-smi
可以提供更美观简洁的展示,结合watch命令可以动态实时监控GPU的使用情况。
显存可以看成是空间类似于内存。
GPU计算单元类似于CPU中的核用来进行数值计算。衡量计算量的单位是flop: the number of floating-point multiplication-adds浮点數先乘后加算一个flop。计算能力越强大速度越快。衡量计算能力的单位是flops: 每秒能执行的flop数量
除了K
、M
G
,T
等之外我们常用的还有KB
、MB
,GB
TB
。二者有细微的差别
K
、M
,G
T
是以1024为底,而KB
、MB
GB
,TB
以1000为底不过一般来说,在估算显存大小的时候我们不需要严格的区分这二者。
在深喥学习中会用到各种各样的数值类型数值类型命名规范一般为TypeNum
,比如Int64、Float32、Double64
常用的数值類型如下图所示(int64 准确的说应该是对应c中的long long类型 long类型在32位机器上等效于int32):
其中Float32 是在深度学习中最常用的数值类型,称为单精度浮点数每┅个单精度浮点数占用4Byte的显存。
举例来说:有一个的 矩阵float32,那么占用的显存差不多就是
神经网络模型占用的显存包括:
举例来说对于如下图所示的一个全连接网络(不考虑偏置项b)
输入X可以看成是上一层的输出,因此把它的显存占用歸于上一层
这么看来显存占用就是W和Y两个数组?
只有有参数的层才会有显存占用。这部份的显存占用和输入无关模型加载完成之后就会占用。
更具体的来说模型的参数数目(这里均不考虑偏置项b)为:
参数占用显存 = 参数数目×n
在PyTorch中,当你执行完model=MyGreatModel().cuda()
之后就会占用相应的显存占用的显存大小基本与上述分析的显存差不多(会稍大一些,因为其它开销)
举例来说, 优化器如果是SGD:
可以看出来除了保存W之外还要保存对应的梯度 ,因此显存占用等于参数占用的显存x2,
这时候还需要保存动量 因此显存x3
如果是Adam優化器,动量占用的显存更多显存x4
总结一下,模型中与输入无关的显存占用包括:
这部份的显存主要看输出的feature map 的形状
比如卷积的输入输出满足以下关系:
据此可以计算出每一层输出的Tensor的形状,然后就能计算出相应的显存占用
模型输出的显存占用,总结如下:
深度学习中神经網络的显存占用,我们可以得到如下公式:
显存占用 = 模型显存占用 + batch_size × 每个样本的显存占用
可以看出显存不是和batch-size简单的成正比尤其是模型洎身比较复杂的情况下:比如全连接很大,Embedding层很大
nn.ReLU(inplace = True)
能将激活函数ReLU的输出直接覆盖保存于模型的输入之Φ,节省不少显存感兴趣的读者可以思考一下,这时候是如何反向传播的(提示:y=relu(x) ->
在深度学习中一般占用显存最多的昰卷积等层的输出,模型参数占用的显存相对较少而且不太好优化。
节省显存一般有如下方法:
计算量的定义之前已经讲过了,计算量越大操作越费时,运行神经网络花费的时间越多
常用的操莋计算量如下:
AlexNet的分析如下图,左边是每一层的参数数目(不是显存占用)右边是消耗的计算资源. 这里某些地方的计算结果可能和上面嘚公式对不上, 这是因为原始的AlexNet实现有点特殊(在多块GPU上实现的).
今年谷歌提出的MobileNet,利用了┅种被称为DepthWise Convolution的技术将神经网络运行速度提升许多,它的核心思想就是把一个卷积操作拆分成两个相对简单的操作的组合如图所示, 左边昰原始卷积操作,右边是两个特殊而又简单的卷积操作的组合(上面类似于池化的操作但是有权重,下面类似于全连接操作)
去年一篇论文()总结叻当时常用模型的各项指标横座标是计算复杂度(越往右越慢,越耗时)纵座标是准确率(越高越好),圆的面积是参数数量(不是顯存占用)参数量越多,保存的模型文件越大左上角我画了一个红色小圆,那是最理想的模型:快准确率高,显存占用小
尤其是batch-size假定GPU处理单元已经充分利用的情况下:
当前市面上常鼡的显卡指标如下:
更多显卡的更多指标请参阅
显然GTX 1080TI性价比最高,速度超越新Titan X价格却便宜很多,显存也只少了1个G(据说故意阉割掉一个G不然全面超越了Titan X怕激起买Titan X人的民愤~)。
另外,针对本文我做了一个,国内用户可以Google幻灯片格式更恏,后者格式可能不太正常
限于本人水平,文中有疏漏之处还请指正。
4k孤島3 2080ti全开也没有60,这都过了7 8年的游戏照样4k没法全开。
能用大显存的人无非就是1gt610那种网游多开 2就是做科研计算 3就是无脑全开的人
显存不叠加是双6 双6同步计算一个画面,同时使用了显存2015年首发的时候,还没有一个游戏能吃6g显存
至于x和980ti必然要有区分,这在以前白泰坦和780早已經出现了区分一个3g显存一个6g显存。一个2600多流处理一个2300多,实际上780hof早就把白泰坦斩了流处理器越多,效率越低频率只要拉个100 200 ,瞬间僦杀了比如a卡的390和290x,290x规格多一些频率低,但是390斩杀290x
显卡组SLI是不叠加显存的也就是说即使四路980ti显存也是6G但是性能缺会被6G显存限制,所鉯titanX12G显存组SLI是最好的选择
双卡SLI一般性能比单卡强90%980ti SLI 6G显存有些小了。发挥不出其性能
本回答被提问者和网友采纳
12g显存对于目前试水的次世代遊戏也刚合适够用,本次次时代是模型材质和光影的革命前者吃显存,后者cpu
下载百度知道APP抢鲜体验
使用百度知道APP,立即抢鲜体验你嘚手机镜头里或许有别人想知道的答案。
在下一代显卡出来前基本不会有瓶颈可能个别游戏拉不满,游戏开发商一般都是跟着硬件发展走
位宽限制了显存容量,而且目前gddr6x显存颗粒只有1g的2g的要明年才有。所鉯等到明年可能会有20G版的3080或者是12G版的3090