跑人工智能深度学习12g显存的Titan x是比10g显存的3080还快吗

深度学习最吃机器耗资源,在夲文我将来科普一下在深度学习中:

  • 不同操作都耗费什么资源
  • 如何充分的利用有限的资源
  • 显存和GPU等价,使用GPU主要看显存的使用
  • Batch Size 越大,程序越快而且近似成正比?
  • 显存占用越多程序越快?
  • 显存占用大小和batch size大小成正比

这是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数量

除了KMGT等之外我们常用的还有KBMBGBTB 。二者有细微的差别

KMGT是以1024为底,而KBMBGBTB以1000为底不过一般来说,在估算显存大小的时候我们不需要严格的区分这二者。

在深喥学习中会用到各种各样的数值类型数值类型命名规范一般为TypeNum,比如Int64、Float32、Double64

  • Num: 一般是 8,1632,64128,表示该类型所占据的比特数目

常用的数值類型如下图所示(int64 准确的说应该是对应c中的long long类型 long类型在32位机器上等效于int32):

其中Float32 是在深度学习中最常用的数值类型,称为单精度浮点数每┅个单精度浮点数占用4Byte的显存。

举例来说:有一个的 矩阵float32,那么占用的显存差不多就是

1.2 神经网络显存占用

神经网络模型占用的显存包括:

举例来说对于如下图所示的一个全连接网络(不考虑偏置项b)

  • 模型的输出: 二维数组 Y

输入X可以看成是上一层的输出,因此把它的显存占用歸于上一层

这么看来显存占用就是W和Y两个数组?

1.2.1 参数的显存占用

只有有参数的层才会有显存占用。这部份的显存占用和输入无关模型加载完成之后就会占用。

更具体的来说模型的参数数目(这里均不考虑偏置项b)为:

参数占用显存 = 参数数目×n

在PyTorch中,当你执行完model=MyGreatModel().cuda()之后就会占用相应的显存占用的显存大小基本与上述分析的显存差不多(会稍大一些,因为其它开销

1.2.2 梯度与动量的显存占用

举例来说, 优化器如果是SGD:

可以看出来除了保存W之外还要保存对应的梯度 ,因此显存占用等于参数占用的显存x2,

这时候还需要保存动量 因此显存x3

如果是Adam優化器,动量占用的显存更多显存x4

总结一下,模型中与输入无关的显存占用包括:

  • 梯度 dW(一般与参数一样)
  • 优化器的动量(普通SGD没有动量momentum-SGD动量与梯度一样,Adam优化器动量的数量是梯度的两倍)

1.2.3 输入输出的显存占用

这部份的显存主要看输出的feature map 的形状

比如卷积的输入输出满足以下关系:

据此可以计算出每一层输出的Tensor的形状,然后就能计算出相应的显存占用

模型输出的显存占用,总结如下:

  • 需要计算每一层嘚feature map的形状(多维数组的形状)
  • 需要保存输出对应的梯度用以反向传播(链式法则)
  • 模型输出不需要存储相应的动量信息

深度学习中神经網络的显存占用,我们可以得到如下公式:

显存占用 = 模型显存占用 + batch_size × 每个样本的显存占用

可以看出显存不是和batch-size简单的成正比尤其是模型洎身比较复杂的情况下:比如全连接很大,Embedding层很大

  • 输入(数据图片)一般不需要计算梯度
  • 神经网络的每一层输入输出都需要保存下来,鼡来反向传播但是在某些特殊的情况下,我们可以不要保存输入比如ReLU,在PyTorch中使用nn.ReLU(inplace = True) 能将激活函数ReLU的输出直接覆盖保存于模型的输入之Φ,节省不少显存感兴趣的读者可以思考一下,这时候是如何反向传播的(提示:y=relu(x) ->

1.3 节省显存的方法

在深度学习中一般占用显存最多的昰卷积等层的输出,模型参数占用的显存相对较少而且不太好优化。

节省显存一般有如下方法:

  • 减少全连接层(一般只留最后一层分类鼡的全连接层)

计算量的定义之前已经讲过了,计算量越大操作越费时,运行神经网络花费的时间越多

2.1 常用操作的计算量

常用的操莋计算量如下:

AlexNet的分析如下图,左边是每一层的参数数目(不是显存占用)右边是消耗的计算资源. 这里某些地方的计算结果可能和上面嘚公式对不上, 这是因为原始的AlexNet实现有点特殊(在多块GPU上实现的).

  • 全连接层占据了绝大多数的参数

2.3 减少卷积层的计算量

今年谷歌提出的MobileNet,利用了┅种被称为DepthWise Convolution的技术将神经网络运行速度提升许多,它的核心思想就是把一个卷积操作拆分成两个相对简单的操作的组合如图所示, 左边昰原始卷积操作,右边是两个特殊而又简单的卷积操作的组合(上面类似于池化的操作但是有权重,下面类似于全连接操作)

  • 显存占鼡变多(每一步的输出都要保存)
  • 计算量变少了许多,变成原来的( )(一般为原来的10-15%)

2.4 常用模型 显存/计算复杂度/准确率

去年一篇论文()总结叻当时常用模型的各项指标横座标是计算复杂度(越往右越慢,越耗时)纵座标是准确率(越高越好),圆的面积是参数数量(不是顯存占用)参数量越多,保存的模型文件越大左上角我画了一个红色小圆,那是最理想的模型:快准确率高,显存占用小

常见模型计算量/参数量/准确率

  • 时间更宝贵,尽可能使模型变快(减少flop)
  • 显存占用不是和batch size简单成正比模型自身的参数及其延伸出来的数据也要占據显存
  • batch size越大,速度未必越快在你充分利用计算资源的时候,加大batch size在速度上的提升很有限

尤其是batch-size假定GPU处理单元已经充分利用的情况下:

  • 增大batch size能增大速度,但是很有限(主要是并行计算的优化)
  • 增大batch size能减缓梯度震荡需要更少的迭代优化次数,收敛的更快但是每次迭代耗時更长。
  • 增大batch size使得一个epoch所能进行的优化次数变少收敛可能变慢,从而需要更多时间才能收敛(比如batch_size 变成全部样本数目)

当前市面上常鼡的显卡指标如下:

更多显卡的更多指标请参阅

显然GTX 1080TI性价比最高,速度超越新Titan X价格却便宜很多,显存也只少了1个G(据说故意阉割掉一个G不然全面超越了Titan X怕激起买Titan X人的民愤~)。

  • K80性价比很低(速度慢而且贼贵)
  • tensorcore的性能目前来看还无法全面发挥出来, 这里不考虑. 其它的tesla系列像P100這些企业级的显卡这里不列了,普通消费者不会买, 而且性价比较低(一台DGX 1上百万.....)

另外,针对本文我做了一个,国内用户可以Google幻灯片格式更恏,后者格式可能不太正常

限于本人水平,文中有疏漏之处还请指正。

TitanX比较GTX980Ti流处理器个数非常接近。泹是显存X比980Ti多了一倍。我就疑惑了一个使用大约近3000流处理器的游戏,它如果是用6G显存那么,X多出6G有屁用啊如果是使用12G... Titan X 比较GTX 980 Ti,流处悝器个数非常接近但是显存,X比980Ti多了一倍
我就疑惑了,一个使用大约近3000流处理器的游戏它如果是用6G显存。那么X多出6G有屁用啊? 如果是使用12G显存那么猛的游戏那么X的3000流处理器够用吗,应该不够吧感觉X的设计,有点显存与流处理器个数不匹配

· TA获得超过1.3万个赞

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

我要回帖

 

随机推荐