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

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

  • 方法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.mfbz.cn/a/181033.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java--static修饰成员方法

1.成员方法的分类 ①类方法:有static修饰的成员方法,属于类 ②实例方法:无static修饰的成员方法,属于对象。 2.成员方法的执行原理 解析: 第一行代码:扫描class包名,在方法区生成一个Test.cl…

如何用Python爬取全国高校数据?

前言 Python是一门强大的编程语言,它可以用于爬取互联网上的各种数据。在这篇文章中,我们将学习如何使用Python爬取全国高校数据,并使用代理IP进行爬取。 本文主要分为以下几个部分: 数据来源及需求安装依赖包及导入模块爬取全…

G320E是一种低荣声、固定频率的电荷泵型DC/DC转换器

G320E 低噪声电荷泵DC/DC转换器 产品概述: G320E是一种低荣声、固定频率的电荷泵型DC/DC转换器,在输入电压范围在2.7V到5.0V的情况下,该器件可以产生5V的输出电压,最大输出电流达到300mA.G320E外部元件少,非常适合于…

MySQL-01-MySQL基础架构

1-MySQL逻辑结构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。 MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处…

掌握视频色彩变幻特效,让你的影片更具魅力!

如果你是一名视频制作爱好者或专业人士,那么一定会知道在视频中添加特效的重要性。今天,我们将向你介绍一种令人惊叹的特效技巧——色彩变幻。通过掌握这个技巧,你将能够为你的影片增添独特的视觉效果,吸引观众的注意力。 首先第一…

亚信安慧AntDB MTK数据同步工具之数据稽核

数据稽核是一种用于确保表数据准确性和一致性的重要方法,它涉及到检查数据的完整性、一致性、有效性和合法性,以及与预期规范的匹配程度等多个方面。随着大数据时代的到来,通过有效的数据稽核,组织可以提高决策的准确性和效率&…

cefsharp119.4.30(cef119.4.3,Chromium119.0.6045.159)版本升级体验支持H264及其他多个H264版本

Cefsharp119.4.30,cef119.4.3,Chromium119.0.6045.159 此更新包括一个高优先级安全更新 This update includes a high priority security update. 说明:此版本119.4.3支持H264视频播放(需要联系我),其他版本。.NETFramework 4.6.2 NuGet Gallery | CefSharp.WinForms 119.…

IT支持团队的绩效指标和最佳实践

一名员工在远程时因笔记本问题寻求IT支持,尽管他们多次尝试排除故障,但由于缺乏专业知识,最终还是无法访问工作所需的应用程序。这时,他们需要一名专业的 IT 技术人员来指导他们,但他们只能等待有人注意到并回应他们的…

Adobe 家族系列download

adobe 前言 Adobe公司的产品线中拥有多个家族桶,下面是Adobe全家桶产品的功能介绍: Creative Cloud(创意云):包含Photoshop、Illustrator、InDesign、Premiere Pro、After Effects、Lightroom等创意设计、视频制作和…

Java的Service Provider Interface (SPI)机制动态地加载和发现服务

基本说明 “src\main\resources\META-INF\services” 是Java项目中常见的一个路径,这个路径通常被用来放置服务提供者的配置文件。在Java的Service Provider Interface (SPI)机制中,这个目录下的文件被用来注册和发现服务。 具体来说,如果你…

编写自己的CA和TA与逆向

参考内容《手机安全和可信应用开发》 https://note.youdao.com/s/MTlG4c1w 介绍 TA的全称是Trust Application, 即可信任应用程序。 CA的全称是Client Applicant, 即客户端应用程序。 TA运行在OP-TEE的用户空间, CA运行在REE侧。 CA执行时代…

NB水表能承受最大的水压是多少?

NB水表,作为新一代智能水表,以小巧的体积、稳定的性能和强大的功能赢得了市场的认可。那么,它究竟能承受多大的水压呢?接下来,小编来为大家揭秘下,一起来看下吧! 一、NB水表概述 NB水表&#xf…

森利威尔SL4010 升压恒压 12V升压24V 12V升压36V 12V升压48V

在当今的电子设备中,电源管理系统的设计是非常重要的。为了保证设备的稳定运行,升压和恒压电源的应用已经成为不可或缺的一部分。在这篇文章中,我们将介绍森利威尔SL4010升压恒压电源,它可以实现12V升压24V、12V升压36V、12V升压4…

2023亚太杯数学建模竞赛C题新能源电动汽车数据分析与代码讲解

C题论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解(问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解、问题4模型的建立和求解、问题5模型的建立和求解)、模型的评价等等, 视频讲解如下&…

C++算法入门练习——相同的二叉查找树

将第一组n​个互不相同的正整数先后插入到一棵空的二叉查找树中,得到二叉查找树T1​;再将第二组n个互不相同的正整数先后插入到一棵空的二叉查找树中,得到二叉查找树T2​。判断T1​和T2​​是否是同一棵二叉查找树。 二叉查找(搜索)树定义&am…

基于springboot实现校园在线拍卖系统项目【项目源码】

基于springboot实现校园在线拍卖系统演示 Javar技术 JavaScript是一种网络脚本语言,广泛运用于web应用开发,可以用来添加网页的格式动态效果,该语言不用进行预编译就直接运行,可以直接嵌入HTML语言中,写成js语言&…

Jmeter 分布式压测

为什么要分布式 jmeter是100%纯java开发的程序,虚拟用户是以线程实现的,在大量并发情况下,很容易出现CPU、内存消耗过大的问题,甚至会出现java内存溢出。一般一台电脑设置500-600线程数即可,如果超过1000线程&#xf…

【UE5】组成部分

了解UE游戏的基本构成 资源(Asset): 在UE中,资源(Asset)是指游戏中使用到的各种素材,例如模型、纹理、材质、声音、动画、蓝图、数据表格、关卡等(通常以uasset结尾),他…

2022年全国英烈纪念设施数据,各区县均有!

中国是一个拥有悠久历史和灿烂文化的国家,其英烈纪念设施承载着中国人民对为国家独立、民族解放和民主进步而英勇斗争的先烈们的崇敬和缅怀之情。 这些设施不仅是中国革命历史和先烈精神的重要载体,也是传承红色文化、弘扬革命精神的重要场所。 今天分享…