PyTorch教程13.5之在多个GPU上进行训练

到目前为止,我们讨论了如何在CPU和GPU上高效地训练模型。在13.3节中,我们甚至展示了深度学习框架如何允许人们在它们之间自动并行计算和通信。我们还在6.7节中展示了如何使用nvidia-smi命令列出计算机上所有可用的GPU。我们没有讨论的是如何真正并行化深度学习训练。相反,我们暗示传递一个会以某种方式将数据拆分到多个设备并使其工作。本节填写详细信息并展示如何从头开始并行训练网络。有关如何利用高级API中的功能的详细信息归入第13.6节.我们假设您熟悉minibatch随机梯度下降算法,例如12.5节中描述的算法。

让我们从一个简单的计算机视觉问题和一个稍微陈旧的网络开始,例如,具有多层卷积、池化,最后可能还有一些完全连接的层。也就是说,让我们从一个看起来与LeNet(LeCun等人,1998年)或AlexNet(Krizhevsky等人,2012年)非常相似的网络开始。给定多个GPU(如果是桌面服务器则为2个,在AWSg4dn.12xlarge实例上为4个,在p3.16xlarge上为8个,或在p2.16xlarge上为16个),我们希望以实现良好加速的方式对训练进行分区同时受益于简单且可重现的设计选择。毕竟,多个GPU会增加内存和计算能力。简而言之,给定我们要分类的小批量训练数据,我们有以下选择。

首先,我们可以跨多个GPU划分网络。也就是说,每个GPU将流入特定层的数据作为输入,跨多个后续层处理数据,然后将数据发送到下一个GPU。与单个GPU可以处理的数据相比,这使我们能够使用更大的网络处理数据。此外,可以很好地控制每个GPU的内存占用量(它只占网络总占用量的一小部分)。

然而,层(以及GPU)之间的接口需要紧密同步。这可能很棘手,特别是如果层与层之间的计算工作负载没有正确匹配。对于大量GPU,问题会更加严重。层与层之间的接口也需要大量的数据传输,例如激活和梯度。这可能会超出GPU总线的带宽。此外,计算密集型但顺序的操作对于分区来说并不重要。参见例如Mirhoseini等人。(2017年)在这方面尽最大努力。这仍然是一个难题,尚不清楚是否有可能在非平凡问题上实现良好的(线性)缩放。我们不推荐它,除非有出色的框架或操作系统支持将多个GPU链接在一起。

其次,我们可以分层拆分工作。例如,与其在单个GPU上计算64个通道,不如将问题拆分到4个GPU,每个GPU生成16个通道的数据。同样,对于全连接层,我们可以拆分输出单元的数量。图13.5.1(取自Krizhevsky等人(2012年))说明了这种设计,其中这种策略用于处理内存占用非常小(当时为2GB)的GPU。如果通道(或单元)的数量不太小,这就可以在计算方面实现良好的缩放。此外,由于可用内存线性扩展,多个GPU可以处理越来越大的网络。

图13.5.1由于GPU内存有限,原始AlexNet设计中的模型并行性。

然而,我们需要大量的同步或屏障操作,因为每一层都依赖于所有其他层的结果。此外,需要传输的数据量可能比跨GPU分布层时更大。因此,由于带宽成本和复杂性,我们不推荐这种方法。

最后,我们可以跨多个GPU对数据进行分区。这样,所有GPU都执行相同类型的工作,尽管观察结果不同。在每个小批量训练数据之后,梯度在GPU之间聚合。这是最简单的方法,适用于任何情况。我们只需要在每个小批量之后进行同步。也就是说,非常希望在其他仍在计算的同时开始交换梯度参数。此外,更大数量的GPU会导致更大的小批量大小,从而提高训练效率。然而,添加更多GPU并不能让我们训练更大的模型。

图13.5.2多GPU上的并行化。从左到右:原始问题、网络分区、分层分区、数据并行。

图13.5.2描绘了多GPU上不同并行化方式的比较。总的来说,数据并行是最方便的方法,前提是我们可以访问具有足够大内存的GPU。另请参阅(Lietal.,2014)以了解分布式训练分区的详细描述。在深度学习的早期,GPU内存曾经是一个问题。到目前为止,除了最不寻常的情况外,所有问题都已解决。下面我们重点介绍数据并行性。

假设有k机器上的GPU。给定要训练的模型,每个GPU将独立维护一组完整的模型参数,尽管GPU之间的参数值是相同且同步的。例如,图13.5.3说明了在以下情况下使用数据并行性进行训练k=2.

图13.5.3在两个GPU上使用数据并行计算小批量随机梯度下降。

一般来说,训练过程如下:

请注意,在实践中我们增加了小批量大小k-训练时折叠kGPU这样每个GPU都有相同数量的工作要做,就好像我们只在单个GPU上训练一样。在16-GPU服务器上,这会大大增加小批量大小,我们可能不得不相应地增加学习率。另请注意,第8.5节中的批量归一化需要进行调整,例如,通过为每个GPU保留一个单独的批量归一化系数。下面我们将使用玩具网络来说明多GPU训练。

%matplotlibinlineimporttorchfromtorchimportnnfromtorch.nnimportfunctionalasFfromd2limporttorchasd2l%matplotlibinlinefrommxnetimportautograd,gluon,np,npxfromd2limportmxnetasd2lnpx.set_np()13.5.3。玩具网络我们使用7.6节中介绍的LeNet(稍作修改)。我们从头开始定义它以详细说明参数交换和同步。

THE END
1.TensorFlow实现随机训练和批量训练的方法python本篇文章主要介绍了TensorFlow实现随机训练和批量训练的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 TensorFlow更新模型变量。它能一次操作一个数据点,也可以一次操作大量数据。一个训练例子上的操作可能导致比较“古怪”的学习过程,但使用大批量的训练会造成计算成本昂贵。到底选用https://www.jb51.net/article/139083.htm
2.[PyTorch]批量训练数据的一个流程使用的时候,因为是批量的数据,所以要有一个pack进行压包操作,做完了还要有一个pad解包操作。解包操作pad的第一个第一个返回值ouput就是gru每一步的输出维度是maxLen * batchSize * hiddenSize,第二个返回值就是这个batch里面每个句子的单词数目是一个一维tensor,和传入到Pack的第二个参数感觉一毛一样,如tensorhttps://www.jianshu.com/p/a06a6042d680
3.(83)批量训练和随机训练batchtraining批量训练(Batch Training)和随机训练(Stochastic Training)是深度学习中两种不同的训练策略。 8.3.1 批量训练的概念 1.批量训练(Batch Training) 批量训练是指在每一次参数更新时,将整个训练数据集分成多个批次(小部分数据),然后使用每个批次的数据来计算梯度并更新模型参数。批量训练可以更好地利用硬件加速,如GPU,因为https://blog.csdn.net/asd343442/article/details/135639960
4.神经网络为什么每次训练小批量数据神经网络批量训练原理为什么要使用批量归一化? 使用浅层模型时,随着模型训练的进行,当每层中参数更新时,靠近输出层的输出较难出现剧烈变化。对深层神经网络来说,随着网络训练的进行,前一层参数的调整使得后一层输入数据的分布发生变化,各层在训练的过程中就需要不断的改变以适应学习这种新的数据分布。所以即使输入数据已做标准化,训练中https://blog.51cto.com/u_12995/9856087
5.GPU捉襟见肘还想训练大批量模型?谁说不可以机器之心深度学习模型和数据集的规模增长速度已经让 GPU 算力也开始捉襟见肘,如果你的 GPU 连一个样本都容不下,你要如何训练大批量模型?通过本文介绍的方法,我们可以在训练批量甚至单个训练样本大于 GPU 内存时,在单个或多个 GPU 服务器上训练模型。 深度学习模型和数据集的规模增长速度已经让 GPU 算力也开始捉襟见肘https://www.jiqizhixin.com/articles/2018-10-17-11
6.LLaMAFactory全面指南:从训练到部署训练配置:在这里,你可以设置训练参数,如学习率、批量大小、训练轮数等。 微调配置:如果你正在进行微调,可以在这里设置微调的特定参数,如LoRA的秩、学习率等。 推理配置:在进行推理时,你可以设置生成文本的长度、温度、top-p等参数。 日志和监控:训练和微调过程中的日志信息会实时显示在这里,帮助你监控训练进度和性https://www.skycaiji.com/aigc/ai21379.html
7.四分钟内就能训练目标检测器,商汤基模型团队是怎么做到的?来自商汤的基模型团队和香港大学等机构的研究人员提出了一种大批量训练算法 AGVM,该研究已被NeurIPS 2022接收。 本文提出了一种大批量训练算法 AGVM (Adaptive Gradient Variance Modulator),不仅可以适配于目标检测任务,同时也可以适配各类分割任务。AGVM 可以把目标检测的训练批量大小扩大到 1536,帮助研究人员四分钟训https://m.thepaper.cn/newsDetail_forward_20728146
8.2024年人工智能(AI)训练师职业技能鉴定考试题库(浓缩500题).docxPAGE PAGE 12024年人工智能AI训练师职业技能鉴定考试题库浓缩500题一单选题1.在机器学习领域,监督学习常用于训练哪种类型的机器人A自适应机器人B自主机器人C有教师指导的机器人D强化学习机器人答案:C2.哪个指标用于衡量分类模https://www.renrendoc.com/paper/343440631.html
9.基于点云卷积神经网络的蛋白质柔性预测与Qi等的模型不同的是,不同的蛋白质结构所含有的原子数量不均一、数据尺寸不规则,为了实现网络的小批量训练方法,提出了一种新的批量化策略,使用大小不等的蛋白质小批量输入对网络进行迭代训练,并采用Pearson相关系数作为模型训练的评价指标。同时,在网络的池化层和空间变换网络部分,采用了最大池化、平均池化串联的https://www.pibb.ac.cn/pibbcn/article/html/20200383?st=article_issue
10.机器学习学习笔记(21)深度学习中的正则化腾讯云开发者社区对于每个单元,掩码采样是独立采样的。掩码值为1的采样概率(导致包含一个单元)是训练开始前一个固定的超参数。它不是模型当前参数值或输入样本的函数,通常在每一个小批量训练的神经网络中。一个输入单元被包括的概率的0.8,一个隐藏单元被包括的概率为0.5。更正式的说,假设一个掩码向量https://cloud.tencent.com/developer/article/1327181
11.TF2.0深度学习实战(一):分类问题之手写数字识别train_dataset=train_dataset.batch(32).repeat(10)# 设置批量训练的batch为32,要将训练集重复训练10遍 3.2 网络结构搭建 由于MNIST数据集里的图像特征较为简单,所以本次以搭建一个3层的全连接网络为例,来实现MNIST数据集10分类任务。其中,每个全连接层的节点数分别为:256,128和10。 https://www.flyai.com/article/629
12.上海交大樊昕昱何祖源课题组在计算重构光谱测量技术取得重要上海交通大学智能光子学研究中心樊昕昱教授、何祖源教授团队针对这一问题提出了联合物理模型与数据驱动的光谱重建神经网络,仅需10μs时间下获得的小批量训练数据集即可完成具有2300个频谱输出通道的光谱重构神经网络的训练,且实现了3.2fm的分辨率。 联合物理模型与数据驱动的神经网络结构及训练数据:(a) 系统传输矩阵,(bhttps://news.sjtu.edu.cn/jdzh/20230805/186848.html