如何让人工智能训练更快

影响人工智能训练时间的因素

在深度学习训练中,训练时间的计算涉及到多个因素,包括 epoch 数、全局 batch size、微 batch size、计算设备数量等。下面是一个基本的公式来说明这些参数之间的关系(注意,这只是一个基本的说明公式,主要说明比例和反比例关系,实际训练可能还需要考虑更多因素):

博客文章缩略图 2,标题为“如何加快 AI 训练速度”

他们之中-

  • 时期是指模型处理整个训练数据集的次数。
  • 样本总数是训练数据集中的样本总数。
  • 全局批次大小是每次训练迭代中处理的数据样本总数。
  • Time per Step 是每次训练迭代所需的时间,取决于硬件性能、模型复杂度、优化算法等因素。
  • 设备数量是用于训练的计算设备的数量,例如 GPU 的数量。

此公式提供了一个基本框架,但请注意,实际训练时间可能受到许多其他因素的影响,包括 I/O 速度、网络延迟(对于分布式训练)、CPU-GPU 通信速度、GPU 训练期间硬件故障的频率 等。因此,此公式只能作为粗略估计,实际训练时间可能会有所不同。

 

详细解释

深度学习模型的训练时间由多种因素决定,包括但不限于以下因素:

  • 周期数:周期表示模型处理了整个训练数据集一次。周期越多,模型需要处理的数据越多,因此训练时间越长。
  • 全局批大小:全局批大小是每次训练迭代中处理的数据样本总数。全局批大小越大,每次迭代处理的数据越多,这可能会减少每个时期所需的迭代次数,从而缩短总训练时间。但是,如果全局批大小过大,可能会导致内存溢出。
  • 微批次大小:微批次大小是指每个计算设备在每次训练迭代中处理的数据样本数量。微批次大小越大,每个设备每次迭代处理的数据越多,这可以提高计算效率,从而缩短训练时间。但是,如果微批次大小过大,可能会导致内存溢出。
  • 硬件性能:所使用的计算设备(如 CPU、GPU)的性能也会影响训练时间。更强大的设备可以更快地进行计算,从而缩短训练时间。
  • 模型复杂度:模型的复杂度(例如层数、参数数量等)也会影响训练时间。模型越复杂,需要的计算量就越多,因此训练时间越长。
  • 优化算法:所使用的优化算法(例如 SGD、Adam 等)和学习率等超参数设置也会影响训练时间。
  • 并行策略:数据并行、模型并行等并行计算策略的采用也会影响训练时间。


决定训练时间长短的因素有很多,需要根据具体的训练任务和环境综合考虑。

所以,在这个公式中

博客文章缩略图 3,标题为“如何加快 AI 训练速度”

应该理解为每步时间主要与 GPU 的计算能力有关。“每步时间”,即每个训练步骤所需的时间,由多种因素决定,包括但不限于以下因素:
  • 硬件性能:所使用的计算设备(如 CPU、GPU)的性能将直接影响每次训练迭代的速度。功能更强大的设备可以更快地执行计算。
  • 模型复杂度:模型的复杂度(例如层数、参数数量等)也会影响每次训练迭代的时间。模型越复杂,所需的计算量就越大。
  • 优化算法:所使用的优化算法(例如 SGD、Adam 等)也会影响每次训练迭代的时间。某些优化算法可能需要更复杂的计算步骤来更新模型参数。
  • 训练时使用的数据类型:训练时使用的不同数据类型对每步时间有显著影响。数据类型包括FP32,FP/BF16,FP8等。

训练步骤

那么,总训练步数由什么决定呢?“总训练步数”由训练周期数和每周期步数决定。具体来说,它等于周期数乘以每周期步数。这可以用以下公式来表示:
 

博客文章缩略图 4,标题为“如何加快 AI 训练速度”

 
全局批次大小
那么,什么决定了全局批次大小?
 

博客文章缩略图 5,标题为“如何加快 AI 训练速度”

<span style="color:#333333"><span style="background-color:#ffffff"><span style="background-color:#2b2b2b"><span style="color:#f8f8f2"><code class="language-applescript">global_batch_size <span style="color:#00e0e0">=</span> 
gradient_accumulation_steps 
<span style="color:#00e0e0">*</span> nnodes (node mumbers) 
<span style="color:#00e0e0">*</span> nproc_per_node (GPU <span style="color:#00e0e0">in</span> one node) 
<span style="color:#00e0e0">*</span> per_device_train_batch_si(micro bs size) </code></span></span></span></span>
假设一个场景:
<span style="color:#333333"><span style="background-color:#ffffff"><span style="background-color:#2b2b2b"><span style="color:#f8f8f2"><code class="language-applescript">batch_size <span style="color:#00e0e0">=</span> <span style="color:#00e0e0">10</span>  <span style="color:#d4d0ab"># Batch size  </span>
total_num <span style="color:#00e0e0">=</span> <span style="color:#00e0e0">1000</span>  <span style="color:#d4d0ab"># Total number of training data  </span></code></span></span></span></span>

当训练一批数据,更新一次梯度时(梯度累积步数=1):

 

<span style="background-color:#2b2b2b"><span style="color:#f8f8f2"><code class="language-applescript">train_steps <span style="color:#00e0e0">=</span> total_num <span style="color:#00e0e0">/</span> batch_size <span style="color:#00e0e0">=</span> <span style="color:#00e0e0">1000</span> <span style="color:#00e0e0">/</span> <span style="color:#00e0e0">10</span> <span style="color:#00e0e0">=</span> <span style="color:#00e0e0">100</span>  </code></span></span>

 

这意味着每个 epoch 有 100 个步骤,梯度更新步骤也是 100。
当内存不足以支持 10 的批大小时,我们可以使用梯度累积来减少每个微批的大小。假设我们将梯度累积步骤设置为 2:

 

<span style="background-color:#2b2b2b"><span style="color:#f8f8f2"><code class="language-applescript">gradient_accumulation_steps <span style="color:#00e0e0">=</span> <span style="color:#00e0e0">2</span>  
micro_batch_size <span style="color:#00e0e0">=</span> batch_size <span style="color:#00e0e0">/</span> gradient_accumulation_steps <span style="color:#00e0e0">=</span> <span style="color:#00e0e0">10</span> <span style="color:#00e0e0">/</span> <span style="color:#00e0e0">2</span> <span style="color:#00e0e0">=</span> <span style="color:#00e0e0">5</span>  </code></span></span>

 

这意味着对于每次梯度更新,我们从 2 个微批次中累积数据,每个微批次大小为 5。这减少了内存压力,但每次梯度更新的数据大小仍然是 10 个数据点。

结果:

  • 每个时期的训练步数(train_steps)保持为 100,因为数据总量和每个时期的步数都没有改变。
  • 梯度更新步骤保持为 100,因为每次梯度更新都会累积来自 2 个微批次的数据。

需要注意的是,使用梯度累积时,每个训练步骤都会处理来自多个微批次的梯度的累积,这可能会稍微增加每个步骤的计算时间。因此,如果内存足够,最好增加批次大小以减少梯度累积的次数。当内存不足时,梯度累积是一种有效的方法。

全局批次大小会显著影响模型的训练效果。通常,较大的全局批次大小可以提供更准确的梯度估计,有助于模型收敛。然而,它也会增加每个设备的内存压力。如果内存资源有限,使用较大的全局批次大小可能不可行。

在这种情况下,可以使用梯度累积。通过在每个设备上使用较小的微批次大小进行训练,我们可以减少内存压力,同时保持较大的全局批次大小以获得准确的梯度估计。这允许在有限的硬件资源上训练大型模型,而不会牺牲全局批次大小。

总之,梯度累积是在内存资源有限的情况下平衡全局批次大小和训练效果的一种权衡策略。


因此,如果我们看一下这两个公式:

博客文章缩略图 6,标题为“如何加快 AI 训练速度”

 

博客文章缩略图 7,标题为“如何加快 AI 训练速度”

全局batch size越大,在不发生OOM(Out of Memory)且没有充分利用GPU计算能力的前提下,总的训练时间越短。

 

数据并行和批次大小的关系

 本节主要分析一下这个公式:

<span style="color:#333333"><span style="background-color:#ffffff"><span style="background-color:#2b2b2b"><span style="color:#f8f8f2"><code class="language-applescript">global_batch_size <span style="color:#00e0e0">=</span> 
gradient_accumulation_steps 
<span style="color:#00e0e0">*</span> nnodes (The <span style="color:#abe338">number</span> <span style="color:#00e0e0">of</span> nodes <span style="color:#00e0e0">is</span><span style="color:#fefefe">,</span> <span style="color:#00e0e0">in</span> effect<span style="color:#fefefe">,</span> <span style="color:#00e0e0">the</span> PP) 
<span style="color:#00e0e0">*</span> nproc_per_node (The <span style="color:#abe338">number</span> <span style="color:#00e0e0">of</span> cards per node <span style="color:#00e0e0">is</span><span style="color:#fefefe">,</span> <span style="color:#00e0e0">in</span> effect<span style="color:#fefefe">,</span> <span style="color:#00e0e0">the</span> TP) 
<span style="color:#00e0e0">*</span> per_device_train_batch_si(micro bs size) </code></span></span></span></span>

在分布式深度学习中,数据并行是一种常见的策略。训练数据被分成多个小批量,并分布到不同的计算节点。每个节点都有模型的副本,并在其数据子集上进行训练,从而加快训练过程。

在每个训练步骤结束时,使用 AllReduce 操作同步所有节点的模型权重。AllReduce 会聚合来自所有节点的梯度并广播结果,从而允许每个节点更新其模型参数。

如果在单个设备上进行训练,则不需要 AllReduce,因为所有计算都发生在同一设备上。然而,在分布式训练中,尤其是在数据并行的情况下,AllReduce 或类似操作对于跨设备同步模型参数是必要的。

许多深度学习框架(例如 PyTorch、TensorFlow)使用 NVIDIA 的 NCCL 进行多 GPU 之间的通信。每个 GPU 在其数据子集上进行训练,并在每个步骤结束时使用 NCCL 的 AllReduce 同步模型权重。

虽然 AllReduce 在数据并行中很常用,但根据框架和策略,也可以采用其他 NCCL 操作。

数据并行 (DP) 和微批次大小相互关联。DP 涉及在多台设备上进行训练,每台设备处理一部分数据。微批次大小是每台设备每次迭代处理的样本数。使用 DP,原始批次大小被拆分为跨设备的微批次。如果没有 DP 或模型并行 (MP),微批次大小等于全局批次大小。使用 DP 或 MP,全局批次大小是所有微批次的总和。DP

可应用于单个服务器或跨多个服务器的多个设备。将 DP 设置为 8 表示在 8 台设备上进行训练,这些设备可以位于同一服务器上,也可以分布在多个服务器上。

管道并行 (PP) 是一种不同的策略,其中不同的模型部分在不同的设备上运行。在 PP 中将 DP 设置为 8 表示 8 台设备在每个管道阶段并行处理数据。

总之,DP 和 PP 可同时在单个服务器或跨多个服务器的设备上使用。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ctfshow-文件包含

web78 <?phpif(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__); } 判断是否存在file参数 如果存在 将包含这个参数值 文件 php://filter可以获取指定文件源码。当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执…

Jmeter终极线程组“Ultimate Thread Group“如何使用?

1、安装,点击"选项"&#xff0c;再点击"Plugins Manager"&#xff0c;下载"Custom Thread Groups" 2、添加"jpgc - Ultimate Thread Group" 3、"jpgc - Ultimate Thread Group"使用

DC 板 boot 测 nor 兼容性记录(qspi )

DC 板 boot 测 nor 兼容性记录&#xff08;qspi &#xff09; 软件问题&#xff1a; 1、DC板在跑 qspi时&#xff0c;在跑ddr 初始化部分需要修改以下参数&#xff0c;否则会在fsbl stage1 或者 stage 3 出错。 Board配置选 ad101_v10&#xff1b; 2、由于socket与DC板接触可能…

【springboot】父子工程项目搭建

父工程创建 1.新建一个spring项目 2.选择合适的springboot版本&#xff0c;点击【完成】&#xff0c;即创建父工程完毕 3.删除父工程中无用文件&#xff1a;src 创建子工程模块 1.右键项目名->新建&#xff08;news&#xff09;->模块&#xff08;Module&#xff09;…

【linux-Day2】linux下的基本指令

【linux-Day2】linux下的基本指令 一键查看操作系统的重要地位linux下的基本指令&#x1f4e2;ls&#xff1a;显示当前目录下所有的子目录和文件&#x1f4e2;pwd&#xff1a;显示用户当前所在的目录&#xff0c;在windows中&#xff0c;相当于显示当前目录的绝对路径。&#x…

Oracle绑定变量窥视与自适应游标共享

一.Oracle的绑定变量窥视与自适应游标共享 创建test表&#xff0c;列status存在2个值&#xff0c;有数据倾斜&#xff0c;在列status create table test as select rownum id,DBMS_RANDOM.STRING(A,12) name,DECODE(MOD(ROWNUM,500),0,Inactive,Active) status from all_obj…

2024最新精选文章!分享5款论文ai生成软件

在2024年&#xff0c;AI论文生成软件的出现极大地提升了学术写作的效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。以下是五款值得推荐的AI论文生成软件&#xff0c;其中特别推荐千笔-AIPassPaper。 ### 千笔-AIPa…

【Jupyter Notebook】汉化

1.打开:Anaconda Prompt 2.输入:"activate Zhui01"(注意&#xff1a;Zhui01是刚创建的环境名字) activate Zhui01 3.输入:"pip install jupyterlab-language-pack-zh-CN" pip install jupyterlab-language-pack-zh-CN 4.打开:Jupyter Notebook 5.点击&q…

【稀疏矩阵】使用torch.sparse模块

文章目录 稀疏矩阵的格式coocsrcsc Construction of Sparse COO tensorsConstruction of CSR tensorsLinear Algebra operations&#xff08;稀疏与稠密之间混合运算&#xff09;Tensor methods and sparse&#xff08;与稀疏有关的tensor成员函数&#xff09;coo张量可用的ten…

E32.【C语言 】练习:蓝桥杯题 懒羊羊字符串

1.题目 【问题描述】 “懒羊羊”字符串是一种特定类型的字符串&#xff0c;它由三个字符组成&#xff0c;具有以下特点: 1.字符串长度为 3. 2.包含两种不同的字母。 3.第二个字符和第三个字符相同 换句话说&#xff0c;“懒羊羊”字符串的形式应为 ABB&#xff0c;其中A和B是不…

Python去中心化身份验证指南

随着区块链技术的发展,去中心化身份验证系统成为了保护个人数据安全和确保数字身份不被篡改的重要工具。本文将介绍如何利用Python和区块链技术构建一个简单的去中心化身份验证系统,包括基本概念、实现步骤和代码示例。 什么是去中心化身份验证系统? 去中心化身份验证系统…

SpringBoot学习(8)RabbitMQ详解

RabbitMQ 即一个消息队列&#xff0c;主要是用来实现应用程序的异步和解耦&#xff0c;同时也能起到消息缓冲&#xff0c;消息分发的作用。 消息中间件最主要的作用是解耦&#xff0c;中间件最标准的用法是生产者生产消息传送到队列&#xff0c;消费者从队列中拿取消息并处理&…

【网易低代码】第3课,页面表格删除功能

你好&#xff01; 这是一个新课程 CodeWave网易低代码 通过自然语言交互式智能编程&#xff0c;同时利用机器学 习&#xff0c;帮助低代码开发者进一步降低使用门槛、提高应用开发效率 【网易低代码】第3课&#xff0c;页面表格删除功能 1.拖拽组件link链接到表格中&#xff0c…

一文读懂在线学习凸优化技术

一文读懂在线学习凸优化技术 在当今的数据驱动时代&#xff0c;机器学习算法已成为解决复杂问题的关键工具。在线学习凸优化作为机器学习中的一项核心技术&#xff0c;不仅在理论研究上具有重要意义&#xff0c;还在实际应用中展现出巨大的潜力。本文将深入浅出地介绍在线学习…

初识C++|继承

&#x1f36c; mooridy-CSDN博客 &#x1f9c1;C专栏&#xff08;更新中&#xff01;&#xff09; 目录 1. 继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1 定义格式 1.2.2 继承父类成员访问方式的变化 1.3继承类模板 2. 父类和子类对象赋值兼容转换 3. 继承中的…

使用docker配置wordpress

docker的安装 配置docker yum源 sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo下载最新版本docker sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-…

arxiv 首次投稿注意事项记录

文章目录 注册用教育邮箱&#xff0c;不用背书latex&#xff1a; 主tex和bib文件放在最外层&#xff0c;重命名为arxiv.tex和arxiv.bib &#xff08;没测试过不重命名会怎么样&#xff09;在overleaf右上方点submmit&#xff0c;选arxiv&#xff08;这样会自动生成一个bbl文件&…

苹果的“AI茅”之路只走了一半

今年苹果发布会最大的亮点&#xff0c;也许是和华为“撞档”&#xff0c;又或者是替腾讯“发布”新手游&#xff0c;但肯定不是iPhone 16。 9月10日&#xff0c;苹果秋季新品发布会与华为见非凡品牌盛典相继举行&#xff0c;iPhone 16系列也与HUAWEI Mate XT同日发布。 不过&…

QT之QML学习五:添加自定义Qml组件

开发环境: 1、Qt 6.7.2 2、Pyside6 3、Python 3.11.4 4、Windows 10 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!! 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!! 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!!…

基于vue框架的城市智慧地铁管理系统73c2d(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,站点查询,车次线路,站点周边 开题报告内容 基于Vue框架的城市智慧地铁管理系统开题报告 一、研究背景与意义 1.1 研究背景 随着城市化进程的加速和人口的不断增长&#xff0c;城市交通压力日益增大。地铁作为城市公共交通的重要…