显卡性能衡量指标

最近购买了一台腾讯云 Nvidia Tesla T4 服务器,速度提升巨大,因此想自己入手一台电脑,下面从深度学习角度来考虑相关参数对炼丹的影响。

模型训练中各参数的影响

下面以Nvidia T4为例

首先是架构,Turing 架构

Tensor 核心数,320个Tensor Core 。张量核支持混合精度计算,动态调整计算以加快吞吐量,同时保持精度。

CUDA数量,2560 CUDA运算速度之和核心频率有关,而CUDA核心数量则决定了显卡的计算能力的强弱,如一项渲染任务,可以拆分为更多份交给不同的CUDA核心处理。

单精度浮点性能(FP32) 8.1FLOPS,代表显卡的浮点运算能力,越高能力越强。

半精度浮点数(FP16) 65TFLOPS

浮点性能:7.76TFLOPS,衡量GPU处理器基本马力的方法。

显存带宽:320GB/s,指显示芯片与显存之间的数据传输速率,它以字节/秒为单位。显存带宽是决定显卡性能和速度最重要的因素之一。
显存类型:GDDR6

显存大小(VRAM) 16GB,很重要,这将直接关系到型是否可用。决定batch_size的上限。

内存总线宽度(显存位宽)256bit ,更宽的总线宽度代表在每个电脑运行周期能处理更多的数据。(代表GPU芯片每个时钟周期内能从GPU显卡中读取的数据大小,值越大,代表GPU芯片与显存之间的数据交换的速度越快。)

功率 75W

模型显存占用计算

当在GPU上跑一个模型时,显存的占用主要有两部分:

模型的输出(特征图、特征图的梯度)、模型的参数(权重矩阵、偏置值、梯度)

  1. 模型参数的显存占用:(例如:卷积核的参数、BN层、全连接层的参数等(池化层没有参数))

  2. 如果是在训练阶段,需要反向传播更新参数值,所以每个参数都需要存储梯度。所以模型参数的显存占用,与采用的优化器有关。

      1)如果使用SGD,需要2倍模型参数的显存占用,模型参数+模型参数的梯度;
    
      2)如果使用SGD+Momentum,需要3倍的模型参数显存占用,模型参数+梯度+动量;
    
      3)如果使用Adam,需要4倍的显存占用,模型参数+梯度+动量+二阶动量。
    
  3. 训练阶段,会保存模型每一层输出的特征图。(因为反向传播中需要对中间层的特征图求导,所以中间层的输出特征图不会被释放)

  4. 训练阶段,会保存对于每一层输出特征图的导数。(因为反向传播中链式求导,公式中有),但是由于特征图不像模型参数一样需要优化更新,所以在训练阶段特征图需要2倍显存(特征图+特征图梯度)。

显存的占用主要是模型本身的参数占用,还与每一层输出的特征图大小有关(这一部分与batch_size呈线性正相关)

模型参数的显存占用

模型参数的显存占用与batchsize无关,但是在训练阶段与优化器有关
所以在预测阶段要使用

with torch.no_grad():
    inputs = None
    output = model(inputs)    

从而减少显存的使用。

每层特征图的显存占用

每层output特征图的显存占用为:B x Cout x H x W,与batch size的大小成正比
训练阶段,需要保存特征图的梯度,所以需要2倍的显存占用

节省显存的几种方法

占用显存较多的部分是卷积层输出的特征图,模型参数的显存占用较少,其中全连接层占据了模型参数的大部分
所以降低模型显存一般有如下几种方法:

  1. 去掉全连接层,改为全局平均池化

  2. 降低batch size

  3. 池化,减小特征图size

  4. pytorch中的inplace操作,torch.no_grad()

从上面的分析可知,显存占用并不是严格的与batch size成正比,还与模型自身的参数和延伸出来的数据相关(每层特征图size、优化器等)

并不是batch size越大速度越快。在充分利用计算资源的时候,加大batch size在速度上的提升很有限。—也就是显存足够,但是GPU的计算能力达到上限。

比如batch size=8时,模型的FLOPs等于GPU的峰值FLOPS,并且假设GPU能够维持其峰值FLOPS,那么刚好1秒跑一个batch size;若此时令batch size=16,那么需要2秒跑一个batch size,并不能提升训练速度。

FLOPS:全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。

FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。

模型的FLOPs越大,那么执行一遍前向传播或者反向传播的时间也就越长,从而导致漫长的训练时间。

个人心得

在博主看来,深度学习虽然主要依靠显卡,但CPU也不容忽视,先前在google的colab中使用的也是nvidia T4,但其表现与腾讯云的nvidia T4简直是天壤之别,这是由于colab中的cpu瓶颈造成的。
此外,在模型训练中,首先应该在显存满足的前提下在考虑速度,以博主的yolo模型为例,博主的960显存为4g,能够将模型加载进来,但batch-size只能为4,而且随着模型模型的不断训练,在迭代到10次时便发生了内存不足的情况,,且由于是本地运行,cpu占用也极高,基本在运行程序时很难再去做其他的事,而选择使用服务器后,使用pycharm连接gpu资源不再占用本地资源,服务器的16G显存可以将batch-size支持到32(建议16,防止溢出,且此时也达到了速度瓶颈),而内存高达32G,其速度也获得了明显提升。
先前博主有自己搭建一个服务器的打算,从先前的训练过程可知,博主的模型在batch-size=16时,其在后期的显存占用便达到了12G,若调小batch-size=8,则可以将其稳定在8G左右,目前市面上笔记本主流为3060,显存为6G,虽然速度上有明显提升,但显存很明显不够用,而桌面级3060的有12G和8G版本,相较而言,12G明显更符合我的要求,但由于矿潮褪去也是不敢入手,若是选择8G倒不如直接入手3060Ti或者3070,很少纠结,归根结底还是没钱,呜呜呜
租用服务器算是解决了自己的燃眉之急,目前用起来感觉不错,美中不足的便是平时最开始时项目上传费了些时间,pycharm的速度有些慢,在这里也推荐一款文件上传下载软件Xftp,用起来感觉还不错。
最后补充一句:博主还是想自己搭配一台电脑,有没有合适的推荐,欢迎留言。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭祥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值