seo关键词的优化技巧,安阳seo关键词优化,js获取网站html,广州兼职做网站影响人工智能训练时间的因素
在深度学习训练中#xff0c;训练时间的计算涉及到多个因素#xff0c;包括 epoch 数、全局 batch size、微 batch size、计算设备数量等。下面是一个基本的公式来说明这些参数之间的关系#xff08;注意#xff0c;这只是一个基本的说明公式训练时间的计算涉及到多个因素包括 epoch 数、全局 batch size、微 batch size、计算设备数量等。下面是一个基本的公式来说明这些参数之间的关系注意这只是一个基本的说明公式主要说明比例和反比例关系实际训练可能还需要考虑更多因素 他们之中-
时期是指模型处理整个训练数据集的次数。样本总数是训练数据集中的样本总数。全局批次大小是每次训练迭代中处理的数据样本总数。Time per Step 是每次训练迭代所需的时间取决于硬件性能、模型复杂度、优化算法等因素。设备数量是用于训练的计算设备的数量例如 GPU 的数量。
此公式提供了一个基本框架但请注意实际训练时间可能受到许多其他因素的影响包括 I/O 速度、网络延迟对于分布式训练、CPU-GPU 通信速度、GPU 训练期间硬件故障的频率 等。因此此公式只能作为粗略估计实际训练时间可能会有所不同。 详细解释
深度学习模型的训练时间由多种因素决定包括但不限于以下因素
周期数周期表示模型处理了整个训练数据集一次。周期越多模型需要处理的数据越多因此训练时间越长。全局批大小全局批大小是每次训练迭代中处理的数据样本总数。全局批大小越大每次迭代处理的数据越多这可能会减少每个时期所需的迭代次数从而缩短总训练时间。但是如果全局批大小过大可能会导致内存溢出。微批次大小微批次大小是指每个计算设备在每次训练迭代中处理的数据样本数量。微批次大小越大每个设备每次迭代处理的数据越多这可以提高计算效率从而缩短训练时间。但是如果微批次大小过大可能会导致内存溢出。硬件性能所使用的计算设备如 CPU、GPU的性能也会影响训练时间。更强大的设备可以更快地进行计算从而缩短训练时间。模型复杂度模型的复杂度例如层数、参数数量等也会影响训练时间。模型越复杂需要的计算量就越多因此训练时间越长。优化算法所使用的优化算法例如 SGD、Adam 等和学习率等超参数设置也会影响训练时间。并行策略数据并行、模型并行等并行计算策略的采用也会影响训练时间。
决定训练时间长短的因素有很多需要根据具体的训练任务和环境综合考虑。 所以在这个公式中 应该理解为每步时间主要与 GPU 的计算能力有关。“每步时间”即每个训练步骤所需的时间由多种因素决定包括但不限于以下因素 硬件性能所使用的计算设备如 CPU、GPU的性能将直接影响每次训练迭代的速度。功能更强大的设备可以更快地执行计算。模型复杂度模型的复杂度例如层数、参数数量等也会影响每次训练迭代的时间。模型越复杂所需的计算量就越大。优化算法所使用的优化算法例如 SGD、Adam 等也会影响每次训练迭代的时间。某些优化算法可能需要更复杂的计算步骤来更新模型参数。训练时使用的数据类型训练时使用的不同数据类型对每步时间有显著影响。数据类型包括FP32FP/BF16FP8等。 训练步骤 那么总训练步数由什么决定呢“总训练步数”由训练周期数和每周期步数决定。具体来说它等于周期数乘以每周期步数。这可以用以下公式来表示 全局批次大小 那么什么决定了全局批次大小 span stylecolor:#333333span stylebackground-color:#ffffffspan stylebackground-color:#2b2b2bspan stylecolor:#f8f8f2code classlanguage-applescriptglobal_batch_size span stylecolor:#00e0e0/span
gradient_accumulation_steps
span stylecolor:#00e0e0*/span nnodes node mumbers
span stylecolor:#00e0e0*/span nproc_per_node GPU span stylecolor:#00e0e0in/span one node
span stylecolor:#00e0e0*/span per_device_train_batch_simicro bs size /code/span/span/span/span 假设一个场景 span stylecolor:#333333span stylebackground-color:#ffffffspan stylebackground-color:#2b2b2bspan stylecolor:#f8f8f2code classlanguage-applescriptbatch_size span stylecolor:#00e0e0/span span stylecolor:#00e0e010/span span stylecolor:#d4d0ab# Batch size /span
total_num span stylecolor:#00e0e0/span span stylecolor:#00e0e01000/span span stylecolor:#d4d0ab# Total number of training data /span/code/span/span/span/span 当训练一批数据更新一次梯度时梯度累积步数1 span stylebackground-color:#2b2b2bspan stylecolor:#f8f8f2code classlanguage-applescripttrain_steps span stylecolor:#00e0e0/span total_num span stylecolor:#00e0e0//span batch_size span stylecolor:#00e0e0/span span stylecolor:#00e0e01000/span span stylecolor:#00e0e0//span span stylecolor:#00e0e010/span span stylecolor:#00e0e0/span span stylecolor:#00e0e0100/span /code/span/span 这意味着每个 epoch 有 100 个步骤梯度更新步骤也是 100。 当内存不足以支持 10 的批大小时我们可以使用梯度累积来减少每个微批的大小。假设我们将梯度累积步骤设置为 2 span stylebackground-color:#2b2b2bspan stylecolor:#f8f8f2code classlanguage-applescriptgradient_accumulation_steps span stylecolor:#00e0e0/span span stylecolor:#00e0e02/span
micro_batch_size span stylecolor:#00e0e0/span batch_size span stylecolor:#00e0e0//span gradient_accumulation_steps span stylecolor:#00e0e0/span span stylecolor:#00e0e010/span span stylecolor:#00e0e0//span span stylecolor:#00e0e02/span span stylecolor:#00e0e0/span span stylecolor:#00e0e05/span /code/span/span 这意味着对于每次梯度更新我们从 2 个微批次中累积数据每个微批次大小为 5。这减少了内存压力但每次梯度更新的数据大小仍然是 10 个数据点。结果
每个时期的训练步数train_steps保持为 100因为数据总量和每个时期的步数都没有改变。梯度更新步骤保持为 100因为每次梯度更新都会累积来自 2 个微批次的数据。
需要注意的是使用梯度累积时每个训练步骤都会处理来自多个微批次的梯度的累积这可能会稍微增加每个步骤的计算时间。因此如果内存足够最好增加批次大小以减少梯度累积的次数。当内存不足时梯度累积是一种有效的方法。 全局批次大小会显著影响模型的训练效果。通常较大的全局批次大小可以提供更准确的梯度估计有助于模型收敛。然而它也会增加每个设备的内存压力。如果内存资源有限使用较大的全局批次大小可能不可行。 在这种情况下可以使用梯度累积。通过在每个设备上使用较小的微批次大小进行训练我们可以减少内存压力同时保持较大的全局批次大小以获得准确的梯度估计。这允许在有限的硬件资源上训练大型模型而不会牺牲全局批次大小。 总之梯度累积是在内存资源有限的情况下平衡全局批次大小和训练效果的一种权衡策略。
因此如果我们看一下这两个公式 全局batch size越大在不发生OOMOut of Memory且没有充分利用GPU计算能力的前提下总的训练时间越短。 数据并行和批次大小的关系 本节主要分析一下这个公式 span stylecolor:#333333span stylebackground-color:#ffffffspan stylebackground-color:#2b2b2bspan stylecolor:#f8f8f2code classlanguage-applescriptglobal_batch_size span stylecolor:#00e0e0/span
gradient_accumulation_steps
span stylecolor:#00e0e0*/span nnodes The span stylecolor:#abe338number/span span stylecolor:#00e0e0of/span nodes span stylecolor:#00e0e0is/spanspan stylecolor:#fefefe,/span span stylecolor:#00e0e0in/span effectspan stylecolor:#fefefe,/span span stylecolor:#00e0e0the/span PP
span stylecolor:#00e0e0*/span nproc_per_node The span stylecolor:#abe338number/span span stylecolor:#00e0e0of/span cards per node span stylecolor:#00e0e0is/spanspan stylecolor:#fefefe,/span span stylecolor:#00e0e0in/span effectspan stylecolor:#fefefe,/span span stylecolor:#00e0e0the/span TP
span stylecolor:#00e0e0*/span per_device_train_batch_simicro 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 可同时在单个服务器或跨多个服务器的设备上使用。