显卡性能衡量指标

文章讨论了NvidiaT4GPU在深度学习中的性能,强调了架构、Tensor核心、CUDA数量、浮点性能和显存带宽等关键参数对模型训练的影响。提到了显存占用与batch_size、模型参数和特征图的关系,以及优化器的选择如何影响显存需求。文章还分享了个人经验,指出CPU也是重要考虑因素,并提供了关于电脑配置选择的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近购买了一台腾讯云 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,用起来感觉还不错。
最后补充一句:博主还是想自己搭配一台电脑,有没有合适的推荐,欢迎留言。

<think>嗯,用户问的是FLOPs,我需要先明确这个术语的定义。FLOPs全称是Floating Point Operations,也就是浮点运算次数。它是用来衡量计算复杂度的指标,常见于高性能计算和深度学习领域。 接下来要解释清楚FLOPs的具体含义。需要区分FLOP和FLOPS,前者是运算次数,后者是每秒浮点运算次数,代表计算速度。这一点容易混淆,必须明确指出。 然后,应该说明FLOPs的应用场景。比如在机器学习中,模型的FLOPs可以帮助评估其计算需求,进而影响模型在设备上的部署可行性。需要举例说明,比如卷积层的计算量如何用FLOPs衡量,可能涉及乘法和加法操作的计算次数。 另外,要对比其他相关指标,比如参数量(Parameters)和内存占用,说明FLOPs的独特之处。比如参数量指模型的大小,而FLOPs反映的是计算量,两者不同但都重要。 还需要讲如何计算FLOPs。以矩阵乘法为例,两个n×n矩阵相乘的FLOPs大约是2n³,因为每个元素需要n次乘法和n-1次加法,近似为2n³。这样具体的例子可以帮助用户理解计算方法。 可能用户想知道为什么FLOPs重要。比如在资源受限的环境中,如移动设备或嵌入式系统,低FLOPs的模型更高效。此外,优化FLOPs有助于减少能耗和计算时间。 最后,总结FLOPs的意义,并提醒用户注意与FLOPS的区别。确保回答结构清晰,逐步展开,符合用户的需求。</think>好的,我将逐步为您解释FLOPs的概念: 1. **基本定义** FLOPs全称是**Floating Point Operations**(浮点运算次数),用于衡量算法或模型的计算复杂度。1次FLOP指1次浮点数的加法、减法、乘法或除法运算。 2. **关键区分** ⚠️ 注意与**FLOPS**的区别: - FLOPs(小写s):总运算次数,如"这个卷积层需要1G FLOPs" - FLOPS(大写S):每秒浮点运算次数,如"GPU算力达10 TFLOPS" 3. **实际应用场景** - **模型评估**:衡量神经网络的计算效率,例如: - ResNet-50约需4.1 GFLOPs(41亿次运算) - MobileNetV2仅需0.3 GFLOPs - **硬件选择**:帮助预估模型在特定处理器上的运行速度 - **模型优化**:通过减少FLOPs来降低能耗(对移动端尤为重要) 4. **计算方法示例** 以矩阵乘法为例: 计算两个$n \times n$矩阵相乘的FLOPs: - 每个元素需要$n$次乘法 + $(n-1)$次加法 - 总次数:$n^2 \times [n + (n-1)] \approx 2n^3$ 因此FLOPs约为$2n^3$ 5. **与参数量对比** | 指标 | 代表意义 | 典型值示例 | |-----------|-----------------------|-------------| | FLOPs | 计算复杂度 | 1.5 GFLOPs | | Parameters | 模型存储空间需求 | 25 Million | | Memory | 运行时显存/内存占用 | 500 MB | 6. **局限性说明** - 实际速度还受内存带宽、并行度等因素影响 - 不同运算类型(如矩阵乘vs卷积)的实际耗时差异可能超出FLOPs比例 理解FLOPs对以下场景尤为重要: ✅ 部署模型到边缘设备 ✅ 设计轻量化模型 ✅ 优化计算资源分配
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

彭祥.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值