深度学习模型训练计算量的估算

news2024/11/16 22:20:00

深度学习模型训练计算量的估算

  • 方法1:基于网络架构和批处理数量计算算术运算次数
  • 前向传递计算和常见层的参数数量
    • 全连接层(Fully connected layer)
      • 参数
      • 浮点数计算量
    • CNN
      • 参数
      • 浮点数计算量
    • 转置CNN
      • 参数
      • 浮点数计算量
    • RNN
      • 参数
      • 浮点数计算量
    • GRU
      • 参数
      • 浮点数计算量
    • LSTM
      • 参数
      • 浮点数计算量
    • Self-Attention
      • 参数
      • 浮点数计算量
    • Multi-Headed Attention
      • 参数
      • 浮点数计算量
    • 示例:CNN-LSTM-FCN模型
  • 方法2:基于硬件设置和训练时间计算运算次数
    • 1.从论文/参考文献中提取信息:
    • 2.阅读硬件规格
    • 3.进行估算
      • 估算GPU的总FLOP:
      • 精度的考虑:
      • 考虑硬件特性:

深度学习模型训练计算量的估算

在当今的机器学习领域,深度学习模型的性能和先进性往往与其在更多计算资源上进行的训练有关。为了确保不同深度学习模型之间的准确比较,估算和报告训练过程中的计算资源使用情况变得至关重要。

本文将探讨深度学习模型训练计算量的估算方法,并介绍了该领域的一些前沿。

计算资源的使用通常以训练模型的最终版本所需的浮点运算次数(FLOP)来衡量。

我们将重点介绍两种估算方法,以大家更好地理解和比较不同深度学习模型的训练计算量,这两种方法用于估算深度学习模型的训练计算量

  • 一种基于网络架构和批处理数量
  • 一种基于硬件的最大配置和模型训练时间

方法1:基于网络架构和批处理数量计算算术运算次数

这种方法通过分析模型的架构和训练数据量来估算计算量。我们将探讨如何通过这种信息来估算模型训练的计算资源需求,以及其在实际研究中的应用。

大致公式如下:

计算量 = 2 × c o n n e c t i o n s × 3 × t r a i n i n g   e x a m p l e × e p o c h s 计算量 = 2 \times connections \times 3 \times training \space example \times epochs 计算量=2×connections×3×training example×epochs

connections:指的是神经网络中的连接数,即神经元之间的直接相互连接。在神经网络中,神经元之间的连接表示它们之间的信息传递和相互作用。

举个例子,如果你有一个具有 N 个输入神经元和 M 个输出神经元的全连接层(fully connected layer),那么它将有 NM 个连接。这意味着每个输入神经元都与每个输出神经元相连接,形成了 NM 个连接。

training example:指的是用于训练机器学习模型的数据集中的样本数量
epochs:是指在训练深度学习模型时的迭代次数

计算资源的使用通常是以模型的前向传播(inference)或反向传播(backpropagation)所需的浮点运算次数(FLOP)来衡量。这是在单次迭代(一个batch)中的计算,而不是迭代的总和,在深度学习框架中,每个批次计算完成后,框架通常会自动释放相应的计算资源,包括中间结果的内存

为什么不可以层层计算,释放资源,进入下一层呢?

在神经网络的训练中,每一层的计算都依赖于前一层的输出,因此不能在每一层的计算中释放资源并进入下一层。神经网络的计算通常是流水线式的,每一层的输出是下一层的输入。如果在每一层都等待上一层计算完成并释放资源,会导致整个计算过程变得非常慢。

下面我们可以将上面的公式翻译转换一下,可以用如下公式来解释:

t r a i n i n g _ c o m p u t e = ( o p s _ p e r _ f o r w a r d _ p a s s + o p s _ p e r _ b a c k w a r d _ p a s s ) ∗ n _ p a s s e s training\_compute = (ops\_per\_forward\_pass + ops\_per\_backward\_pass) * n\_passes training_compute=(ops_per_forward_pass+ops_per_backward_pass)n_passes

其中:

  • ops_per_forward_pass:表示的是前向传播中的计算数
  • ops_per_backward_pass:是反向传播中的计算数
  • n_passes:等于模型迭代次数和训练样本数的乘积:

n _ p a s s e s = n _ e p o c h s ∗ n _ e x a m p l e s n\_passes = n\_epochs * n\_examples n_passes=n_epochsn_examples

如果不知道自己一个迭代的训练样本数,有时可以计算为每个迭代的批次数乘以每个批次的大小

n _ e x a m p l e s = n _ b a t c h e s ∗ b a t c h _ s i z e n\_examples = n\_batches * batch\_size n_examples=n_batchesbatch_size

ops_per_backward_passops_per_forward_pass的比率相对稳定,因此可以将二者整合为

f p _ t o _ b p _ r a t i o = o p s _ p e r _ b a c k w a r d _ p a s s o p s _ p e r _ f o r w a r d _ p a s s fp\_to\_bp\_ratio = \frac{ops\_per\_backward\_pass}{ops\_per\_forward\_pass} fp_to_bp_ratio=ops_per_forward_passops_per_backward_pass

得到以下公式:

t r a i n i n g _ c o m p u t e = o p s _ p e r _ f o r w a r d _ p a s s ∗ ( 1 + f p _ t o _ b p _ r a t i o ) ∗ n _ p a s s e s training\_compute = ops\_per\_forward\_pass * (1 + fp\_to\_bp\_ratio) * n\_passes training_compute=ops_per_forward_pass(1+fp_to_bp_ratio)n_passes

通常估计fp_to_bp_ratio的值为2:1 。最终的公式为:
t r a i n i n g _ c o m p u t e = o p s _ p e r _ f o r w a r d _ p a s s ∗ 3 ∗ n _ e p o c h s ∗ n _ e x a m p l e s training\_compute = ops\_per\_forward\_pass * 3 * n\_epochs * n\_examples training_compute=ops_per_forward_pass3n_epochsn_examples

为什么反向传递操作与前向传递操作的比率2:1

计算反向传递需要为每一层计算与权重相关的梯度和每个神经元关于要回传的层输入的误差梯度。这些操作中的每一个需要的计算量大致等于该层前向传递中的操作量。因此,fp_to_bp_ratio约为2:1。

为什么权重更新参数计算可以忽略不计

在深度学习训练中,权重更新所需的参数计算量相对于前向传播和反向传播来说,通常可以被认为是可以忽略不计的。这主要有以下几个原因:

  1. 批量更新: 在深度学习中,通常使用批量梯度下降或小批量梯度下降等优化算法进行权重更新。这意味着权重更新是基于整个训练数据集或小批次的梯度。相比于前向传播和反向传播,其中需要对每个训练样本进行计算,权重更新的计算是在更大的数据集上进行的,因此其计算量相对较小。
  2. 累积梯度: 在实际应用中,通常会累积多个批次的梯度来更新参数。这样做有助于降低梯度的方差,提高梯度估计的稳定性。由于梯度的累积,单个批次中的权重更新计算相对于整体训练过程来说是较小的一部分。
  3. 参数共享: 在卷积神经网络(CNN)等架构中,存在参数共享的情况。在这种情况下,多个神经元共享同一组权重,从而减少了参数的数量。由于参数共享,权重的梯度计算是相对较小的。

前向传递计算和常见层的参数数量

下面是整理了一个常见神经网络层的表格,估算了它们的参数数量以及每层前向传递所需的浮点运算次数

前文已经知道了,在许多层中,前向传递中的FLOP数量大致等于参数数量的两倍,然而,有许多例外情况,例如CNN由于参数共享而具有更少的参数,而词嵌入则不进行任何操作。

全连接层(Fully connected layer)

在这里插入图片描述

参数

在这里插入图片描述

浮点数计算量

在这里插入图片描述

CNN

从形状为 H × W × C H \times W \times C H×W×C 的张量中使用形状为 K × K × C K \times K \times C K×K×C的 D 个滤波器,应用步幅为 S 和填充为 P 的卷积神经网络(CNN)。
在这里插入图片描述

参数

在这里插入图片描述

浮点数计算量

在这里插入图片描述

转置CNN

从形状为 H × W × C H \times W \times C H×W×C 的张量中使用形状为 K × K × C K \times K \times C K×K×C的 D 个滤波器,应用步幅为 S、填充为 P 的转置卷积神经网络(Transpose CNN)。

在这里插入图片描述

参数

在这里插入图片描述

浮点数计算量

在这里插入图片描述

RNN

带有偏置向量的循环神经网络(RNN),其输入大小为 N,输出大小为 M。

在这里插入图片描述

参数

在这里插入图片描述

浮点数计算量

在这里插入图片描述

GRU

带有偏置向量的全门控门循环单元(Fully Gated GRU),其输入大小为 N,输出大小为 M。

在这里插入图片描述

参数

在这里插入图片描述

浮点数计算量

在这里插入图片描述

LSTM

带有偏置向量的长短时记忆网络(LSTM),其输入大小为 N,输出大小为 M。

在这里插入图片描述

参数

在这里插入图片描述

浮点数计算量

在这里插入图片描述

Self-Attention

具有序列长度 L、输入大小为 W、键大小为 D 和输出大小为 N 的自注意力层(Self-Attention Layer)。
在这里插入图片描述

参数

在这里插入图片描述

浮点数计算量

在这里插入图片描述

Multi-Headed Attention

具有序列长度 L、输入大小为 W、键大小为 D、每个注意力头输出大小为 N、最终输出大小为 M 以及 H 个注意力头的多头注意力层(Multi-Headed Attention Layer)。
在这里插入图片描述

参数

在这里插入图片描述

浮点数计算量

在这里插入图片描述

示例:CNN-LSTM-FCN模型

例如,假设我们有一个CNN-LSTM-FCN架构,具体如下:

  • 输入是形状为 [400x400x5] 的图像序列。
  • 每个输入序列的平均长度为20张图像。
  • CNN 具有16个形状为 5x5x5 的滤波器,应用步幅为2,填充为2。
  • LSTM 是一个多对一层,具有256个输出单元和偏置向量。
  • 全连接层有10个输出单元。
  • 训练过程经过10个时期,每个时期包含100个大小为128的序列批次。
    在这里插入图片描述
    当我们考虑一个CNN-LSTM-FCN模型时,循环部分包括CNN和LSTM,而FC则是网络的非循环部分。

首先,CNN接受一个形状为 400 ∗ 400 ∗ 5 400 *400 * 5 4004005的输入图像序列。该CNN有16个5x5x5的滤波器,应用步幅为2,填充为2。它产生一个输出,宽度和高度为 H ’ = W ’ = [ ( W − K + 2 P ) / S ] + 1 = [ ( 400 − 5 + 2 ∗ 2 + 1 ) / 2 ] = 200 H’=W’= [(W -K +2P)/S]+1 = [(400 - 5+2 * 2+1)/2 ]=200 H=W=[(WK+2P)/S]+1=[(4005+22+1)/2]=200,通道数为16。整个CNN的前向传递需要约 1.024 × 1 0 12 1.024 \times 10^{12} 1.024×1012 次浮点运算(FLOP)。

在将输入馈送到LSTM之前,CNN的输出被重新排列成一个 200 ∗ 200 ∗ 16 200*200*16 20020016的输入。然后,LSTM中每个序列标记的操作数量约为 1.31 × 1 0 9 1.31 \times 10^9 1.31×109FLOP。最后,全连接层(FC)有10个输出单元,它需要5120 FLOP。

整个网络的非循环部分相对较小,我们可以将总操作数近似为:

t r a i n i n g _ c o m p u t e ≈ o p s _ p e r _ f o r w a r d _ p a s s _ r e c u r r e n t × 3 × n _ e p o c h s × n _ b a t c h e s × b a t c h _ s i z e × a v g _ t o k e n s _ p e r _ s e q u e n c e ≈ 1.024 × 1 0 12 F L O P × 3 × 10 × 100 × 128 × 20 = 7.86432 × 1 0 18 F L O P training\_compute≈ops\_per\_forward\_pass\_recurrent \times 3 \times n\_epochs \times n\_batches \times batch\_size \times avg\_tokens\_per\_sequence ≈1.024 \times 10^{12}FLOP \times 3 \times 10 \times 100 \times 128 \times 20=7.86432×10 ^{18}FLOP training_computeops_per_forward_pass_recurrent×3×n_epochs×n_batches×batch_size×avg_tokens_per_sequence1.024×1012FLOP×3×10×100×128×20=7.86432×1018FLOP

方法2:基于硬件设置和训练时间计算运算次数

另一种估算方法涉及考虑所使用的硬件和训练时间。我们将研究如何利用这些硬件方面的信息来估算计算资源的使用情况,并探讨硬件选择如何影响深度学习模型的性能和效率。

传统的基于硬件设置和训练时间计算运算次数是用使用GPU天数做为标准

GPU使用天数:描述了单个GPU用于训练的累积天数。如果训练持续了5天,总共使用了4个GPU,那等于20个GPU天数。

传统的用GPU天数来估算计算资源的方法存在一些问题。首先,它只关注训练所使用的时间,而忽略了训练过程中所使用的计算硬件的性能。在十年内,GPU的性能显著提升,因此相同的GPU天数在不同时期所完成的实际计算工作量可能存在巨大差异。

此外,该方法没有考虑到不同硬件设置之间的差异。同样的GPU天数在不同的硬件配置下可能导致不同数量的浮点运算。因此,为了更准确地估算计算资源的使用情况,我们需要考虑硬件性能和配置的影响。

因此我们需要用GPU时间结合硬件配置估算FLOP,具体步骤如下

1.从论文/参考文献中提取信息:

在深入研究模型相关论文时,我们需要从中提取以下关键信息:

  1. GPU天数的数量:论文中应该包含关于训练模型所用GPU的天数,这反映了模型在训练期间的计算资源使用情况。
  2. 所使用的计算系统/GPU:论文应该明确说明在训练期间使用的计算系统或GPU型号,这对于了解硬件规格和性能至关重要。
  3. 训练运行期间使用的浮点数数字表示:论文应提供关于训练运行期间所采用的数字表示的信息,如FP32、FP16、BF16、INT8等。这直接关系到模型在计算过程中使用的精度。

2.阅读硬件规格

通过阅读硬件规格表,我们可以获取以下信息:

  1. GPU/系统的型号:通过查阅制造商的规格表,我们可以确定所使用的GPU或计算系统的具体型号。此信息对于计算性能的准确评估至关重要。
  2. GPU的峰值性能:规格表通常包含GPU的峰值性能,以FLOP/s(每秒浮点运算次数)为单位。这是评估硬件计算能力的关键指标。

以下是NVIDIA A100的示例:
在这里插入图片描述

如果您找不到使用过的硬件或上述硬件的规格,建议参考下面链接里的表格,估计给定年份的平均计算能力。您还可以在下面的框中找到每年峰值表现的图表

ML Hardware Data sheet

3.进行估算

综合上述信息,我们可以进行如下估算:

估算GPU的总FLOP:

步骤 1:计算单个GPU的峰值性能

从硬件规格表中获取GPU的峰值性能,表示为FLOP/s。例如,若峰值性能为 X X X FLOP/s。

步骤 2:计算总的GPU FLOP

通过将单个GPU的峰值性能乘以GPU使用的天数,我们得到总的GPU FLOP。假设GPU使用天数为 Y 天,那么总的GPU FLOP 为 X × Y X \times Y X×Y

精度的考虑:

步骤 1:确定训练使用的数字表示

从论文中获取模型在训练期间使用的数字表示,如FP32、FP16等。

步骤 2:确定每个数字表示的FLOP数

根据不同数字表示的标准,确定每个数字表示所需的FLOP数。例如,FP32可能需要 A A A FLOP,FP16可能需要 B B BFLOP。

步骤 3:计算总的FLOP数

将每个数字表示所需的FLOP数与模型中相应数字表示的使用情况相乘,得到总的FLOP数。假设使用了FP32和FP16,总FLOP数为
A × 数量 1 + B × 数量 2 A×数量1+B×数量2 A×数量1+B×数量2

考虑硬件特性:

步骤 1:检查是否使用了张量核心

查阅硬件规格表或相关文献,确定是否启用了NVIDIA的张量核心。如果启用,我们可以考虑这一特性对性能的影响。

步骤 2:了解张量核心的使用情况

若启用了张量核心,了解它在模型训练中的具体使用情况。这可能涉及到特殊的参数设置或架构要求。

步骤 3:调整总的GPU FLOP

如果使用了张量核心,可以根据其使用情况调整总的GPU FLOP。这可能需要根据具体情况进行一些额外的计算和估算。

通过这些详细的步骤,我们可以更准确地估算模型在训练期间的计算资源使用情况,考虑到不同精度和硬件特性的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1242842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

张弛语言课奇幻剧配音,一场特殊的体验

在为奇幻剧进行配音时,配音艺术家要将自己投入到一个充斥着魔法、幻想生物和超自然现象的虚构世界中。奇幻剧侧重于构建一个超越现实的幻境,因此配音工作要求既要呈现角色的个性化特征,也要与剧中的奇幻氛围相得益彰。以下是进行奇幻剧配音的…

RTOS的任务触发底层逻辑

(定时器用于计时和触发事件,任务则由调度器进行调度和执行:每当时钟节拍到达时,系统会触发一个称为 tick 中断的事件。当 tick 中断发生时,操作系统会在中断服务例程中执行一定的处理,其中包括更新任务的运…

特殊企业信息轻松查询:特殊企业基本信息查询API的实用性探讨

引言 在当今数字化时代,企业管理和决策往往取决于有效获取和分析关键信息。对于特殊企业,如香港公司、社会组织、律所、事业单位、基金会和新机构,获取准确、及时的基本信息至关重要。在这个背景下,特殊企业基本信息查询API正逐渐…

Javascript中的宏任务与微任务

事件循环 JavaScript 语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。为了协调事件、用户交互、脚本、UI 渲染和网络处理等行为,防止主线程的不阻塞,Event Loop 的方案应用而生。Event Loop 包含两类:一…

redis之cluster集群

1、redis-cluster集群:redis3.0引入的分布式存储方案 2、集群:由多个node节点组成,redis数据分布在这些节点之中 (1)在集群之中也分主节点和从节点 (2)自带哨兵模式 3、redis-cluster集群的…

私域电商和裂变营销的商机在哪里?

微三云胡佳东认为:公域流量已衰退,私域电商和裂变营销即将引来新的趋势!品牌和传统企业的战略方向应该开始布局“内容”,线上流量持续分化,裂变营销的方式又将是一场新的改革革命。 私域电商和裂变营销的商机在于降低获…

每天5分钟复习OpenStack(十)Ceph 架构

1、Ceph是什么? “Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.”这句话说出了Ceph的特性,它是可靠的、可扩展的、统一的、分布式的存储系统。Ceph可以同时提供对象存储RADOSGW&am…

牙科诊所小程序开发案例

一、背景: 针对传统口腔医疗领域中口腔诊所推广难,纸质信息保存难等问题,设计并开发了基于微信小程序实现口腔服务助手平台。为了给人们提供便捷,快速的预约方式,提高社会人群对口腔健康的关注力度。通过微信小程序互联网技术&…

Android Studio xml文件id爆红但是项目可以运行

这种原因是你的R文件太大了(超过了Android Studio的上限25.6M了) 解决办法如下: Help -> Edit Custom Properties -> create custom properties?(yes) ->添加 idea.max.intellisense.filesize5000 最后需要重启Android Studio

Dubbo引入Zookeeper等注册中心简介以及DubboAdmin简要介绍,为后续详解Dubbo各种注册中心做铺垫!

文章目录 一:Dubbo注册中心引言 1:什么是Dubbo的注册中心? 2:注册中心关系图解 3:引入注册中心服务执行流程 4:Dubbo注册中心好处 5:注册中心核心作用 二:注册中心实现方案 …

易涝积水点监测,内涝积水监测仪安装

城市内涝对人们来讲会有很多影响,比如出行需要绕远路或者家中涌入污水导致淤泥堆积,这还有可能让屋内的家具受到破坏,既影响正常生活也造成了经济损失。在街道上还可能对交通、通讯、电力等基础设施造成严重威胁。因此政府如果能实时监测路面…

2023亚太杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法?2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法? 粒子群算法(Pa…

视频监控平台EasyCVR+智能分析网关+物联网,联合打造智能环卫监控系统

一、背景介绍 城市作为人们生活的载体,有着有无数楼宇和四通八达的街道,这些建筑的整洁与卫生的背后,是无数环卫工作人员的努力。环卫工人通过清理垃圾、打扫街道、清洗公共设施等工作,保持城市的整洁和卫生,防止垃圾…

高效聚合 | AIRIOT智慧虚拟电厂管理解决方案

传统的电力供应模式主要依靠大型发电厂和电网进行能源传输和分配,但这种模式会导致能源浪费、环境污染等问题,往往存在如下的运维问题和管理痛点: 资源整合能力差:传统电力供应模式无法集成和整合分散的电力资源,包括…

解决Activiti5.22流程图部署在Windows上正常,但在linux上部署后出现中文变方块的问题

总结/朱季谦 楼主最近在做公司的工作流平台,发现一个很无语的事情,Activiti5.22的流程图在Windows环境上部署,是可以正常查看的,但发布到公司的Linux服务器上后,在上面进行流程图在线部署时,发现中文都变成…

万宾科技智能井盖传感器使用方式,具有什么效果?

有问题的井盖可能导致人们在行走或驾驶时不经意地踩中或碰到,从而导致摔倒、扭伤或交通事故等安全事故。有问题的井盖可能会破坏井盖和下方污水管道之间的密封性,导致污水泄漏。这不仅会对环境造成污染,还可能对公共卫生和健康构成威胁。 将智…

如何弱化市场大环境带来的影响?私域电商和裂变营销引来新趋势!

弱化市场大环境带来的影响需要从多个方面入手,包括深入了解市场和行业、建立品牌优势、多元化经营、优化供应链管理、加强客户关系管理、灵活应对市场变化等。同时需要注意不同领域和行业的市场变化和政策调整,及时调整经营策略和业务结构,保…

Python基础【三】--数据类型-Number【2023.11.23】

1.数值类型 Number数据类型只要包括三个分别是:整型(int)、浮点型(float)、复数(complex) 整型:包括正整数、负整数。如:1024、-1024。整型有四种进制表示,分…

【速看】如何提高微信权重?影响微信权重的加分、扣分行为

微信具有一套权重判定系统,类似于搜索引擎的PR值,可以看做是一个“积分系统”。好的操作会增加积分,负面操作会减少积分。 当积分低于特定标准(即底线)时,将会被严重惩罚或封号。这样,微信确保了…

四肽-3——增加皮肤光滑度、紧致度,让肌肤看起来更年轻

Caprooyl四肽-3,也称为KGHK Caproic acid,是一种基于TGF-(转化生长因子β)的仿生脂肽结构,在细胞外基质成分的自然产生中发挥重要作用。肽序列是Lys-Gly-His-Lys。它可以减少细纹和皱纹的出现,提高皮肤弹性…