如何为洛宁博物馆定制一个吸引人的网站?
摘要:博物馆网站制作,洛宁网站开发,能接做网站的活的网站,无货源网店怎么找商家合作近年来,随着Transformer、MOE架构的提出,使得深度学习模型轻松突破上万亿规模参数&a
博物馆网站制作,洛宁网站开发,能接做网站的活的网站,无货源网店怎么找商家合作近年来#xff0c;随着Transformer、MOE架构的提出#xff0c;使得深度学习模型轻松突破上万亿规模参数#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。
而利用AI集群随着Transformer、MOE架构的提出使得深度学习模型轻松突破上万亿规模参数传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。
而利用AI集群使深度学习算法更好地从大量数据中高效地训练出性能优良的大模型是分布式机器学习的首要目标。为了实现该目标一般需要根据硬件资源与数据/模型规模的匹配情况考虑对计算任务、训练数据和模型进行划分从而进行分布式存储和分布式训练。因此分布式训练相关技术值得我们进行深入分析其背后的机理。
下面主要对大模型进行分布式训练的并行技术进行讲解本系列大体分九篇文章进行讲解。
本文为分布式训练并行技术的第二篇数据并行。由于其原理相对比较简单因此在日常会应用中用的比较多。
技术交流
技术要学会分享、交流不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。
相关资料、数据、技术交流提升均可加我们的交流群获取群友已超过2000人添加时最好的备注方式为来源兴趣方向方便找到志同道合的朋友。 方式①、添加微信号mlc2060备注来自CSDN 技术交流 方式②、微信搜索公众号机器学习社区后台回复加群 简述
所谓数据并行就是由于训练数据集太大因此将数据集分为N份每一份分别装载到N个GPU节点中同时每个GPU节点持有一个完整的模型副本分别基于每个GPU中的数据去进行梯度求导。然后在GPU0上对每个GPU中的梯度进行累加最后再将GPU0聚合后的结果广播到其他GPU节点。 注意这里是以GPU0作为参数服务器除此之外还可以使用CPU作为参数服务器。但是这种场景的训练速度通常会慢于使用GPU0作为参数服务器通常情况下GPU与CPU之间通信使用PCIe而GPU与GPU之间通信使用Nvlink。 当然还可以将参数服务器分布在所有GPU节点上面每个GPU只更新其中一部分梯度。 当然数据并行不仅仅指对训练的数据并行操作还可以对网络模型梯度、权重参数、优化器状态等数据进行并行。 下面主要以PyTorch中数据并行的发展为主线讲述现有一些数据并行方法。
数据并行PyTorch DP
数据并行(torch.nn.DataParallel)这是Pytorch最早提供的一种数据并行方式它基于单进程多线程进行实现的它使用一个进程来计算模型权重在每个批处理期间将数据分发到每个GPU。
DataParallel 的计算过程如下所示 将 inputs 从主 GPU 分发到所有 GPU 上。 将 model 从主 GPU 分发到所有 GPU 上。 每个 GPU 分别独立进行前向传播得到 outputs。 将每个 GPU 的 outputs 发回主 GPU。 在主 GPU 上通过 loss function 计算出 loss对 loss function 求导求出损失梯度。 计算得到的梯度分发到所有 GPU 上。 反向传播计算参数梯度。 将所有梯度回传到主 GPU通过梯度更新模型权重。 不断重复上面的过程。 它使用非常简单仅需一行代码即可实现。
net torch.nn.DataParallel(model, device_ids[0, 1, 2])
output net(input_var) # input_var can be on any device, including CPU但是它的缺点也很明显 单进程多线程带来的问题DataParallel使用单进程多线程进行实现的方便了信息的交换但受困于 GIL会带来性能开销速度很慢。而且只能在单台服务器单机多卡上使用不支持分布式。同时不能使用 Apex 进行混合精度训练。 效率问题主卡性能和通信开销容易成为瓶颈GPU 利用率通常很低数据集需要先拷贝到主进程然后再分片split到每个设备上权重参数只在主卡GPU0上更新需要每次迭代前向所有设备做一次同步每次迭代的网络输出需要聚集到主卡GPU0上。因此通信很快成为一个瓶颈。除此之外这将导致主卡和其他卡之间GPU利用率严重不均衡比如主卡使用了10G显存而其他卡只使用了2G显存batch size稍微设置大一点主卡的显存就OOM了。 不支持模型并行由于其本身的局限性没办法与模型并行组合使用。
