【MindSpore易点通】分布式并行经验总结
1 简单介绍
现如今数据的存储越来越多,想要提高算力的话,其实我们可以提高分布式计算。所谓分布式计算就是在两个或多个软件互相共享信息,这些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。分布式并行训练,可以降低对内存、计算性能等硬件的需求,是进行训练的重要优化手段。
而我们昇思MindSpore的特性之一就是融合了数据并行、模型并行和混合并行,构建一种易用高效的分布式并行训练模式,让算法人员不再需要关注算法模型到底需要用哪种模式训练。可以简化分布式并行编程,串行代码实现分布式训练,对用户屏蔽并行细节,并且保持高性能;计算逻辑上保持和单卡串行流程一致;实现上统一数据并行和模型并行,一套框架支持多种并行模式;结合集群拓扑优化性能。
2 解决方案
介绍了这么多,现在就让我们具体来看看论坛中的小伙伴们在分布式并行方面遇到了哪些问题并且如何解决的吧~
同学A使用了BERT的masked language model预训练方法,使用数据并行和模型并行进行训练,训练过程中发现loss并不下降,定位问题发现dataset生成数据时有个随机mask的操作,在不同进程中间随机结果会不一致。
参考链接:https://bbs.huaweicloud.com/forum/thread-116048-1-1.html
同学B在docker内安装nccl时,由于一开始建立容器的时候没有设置允许共享内存,使用nccl-tests测试会进行报错。
参考链接:https://bbs.huaweicloud.com/forum/thread-143146-1-1.html
同学C在Ascend上进行多机/多卡训练时遇到load task fail报错,首先可以查看其它卡的plog,然后设置延长每张卡的最大等待时长。
参考链接:https://bbs.huaweicloud.com/forum/thread-182395-1-1.html
同学D 在MindSpore并行模式配置时,错误使用了semi_parallel模式。
参考链接:https://bbs.huaweicloud.com/forum/thread-182461-1-1.html
同学E 也遇到了上述类似问题,PyNative配置为semi_auto_parallel模式时遇到报错。
参考链接:https://bbs.huaweicloud.com/forum/thread-182978-1-1.html
同学F误认为并行支持非2的幂次方的并行切分进而报错。
参考链接:https://bbs.huaweicloud.com/forum/thread-183226-1-1.html
3 实践分析
3.1 整体概述
当然用户们对MindSpore的分布式并行模块也有自己的整体认知和理解:https://bbs.huaweicloud.com/forum/thread-169086-1-1.html;
https://bbs.huaweicloud.com/forum/thread-166114-1-1.html
3.2 并行特性
同时半自动并行和全自动并行这两大特性的使用方法也被用户们悉数掌握。
比如采用半自动并行模式,展示了一个从数据到模型的并行转换的案例。
https://bbs.huaweicloud.com/forum/thread-166124-1-1.html
然后仅用一行代码实现了单机脚本的全自动分布式并行。
https://bbs.huaweicloud.com/forum/thread-166127-1-1.html
3.3 分布式训练通信方法
有总体的认知,具体算子用法当然也不会少啦!
比如MindSpore分布式并行训练中的Broadcast、AllGather、ReduceScatter以及AllReduce分布式训练通信方法。
1.Broadcast——集合通信原语相关操作被封装py文件中,对该文件中涉及集合通信的内容进行具体查看解析:https://bbs.huaweicloud.com/forum/thread-166115-1-1.html
2.AllGather——对于分发在所有进程上的一组数据来说,Allgather会收集所有数据到所有进程上:https://bbs.huaweicloud.com/forum/thread-166116-1-1.html
3.ReduceScatte——实现通信算子的自动微分,为AllGather提供反向算子:https://bbs.huaweicloud.com/forum/thread-166118-1-1.html
4.AllReduce——Allreduce将归约值并将结果分配给所有进程:https://bbs.huaweicloud.com/forum/thread-166119-1-1.html
3.4 硬件平台区分
这里有个知识点需要提醒大家注意!分布式并行由于其硬件平台的不同有的时候也会有点小改变。
比如在GPU硬件平台上,MindSpore分布式并行训练的通信使用的是NCCL,采用的多进程通信库是OpenMPI。
参考链接:https://bbs.huaweicloud.com/forum/thread-166120-1-1.html
而对于Ascend AI处理器,MindSpore分布式并行训练的通信使用了华为集合通信库HCCL。
参考链接:https://bbs.huaweicloud.com/forum/thread-166121-1-1.html
3.5 大V博文
其实我们官方也有MindSpore并行特性介绍,同时首席构架师金雪锋大佬给出了更加全面的总结,欢迎大家多多关注。
AI框架的分布式并行能力的分析和MindSpore的实践一混合并行和自动并行:
https://bbs.huaweicloud.com/forum/thread-85406-1-1.html
盘古大模型的推理解决方案:增量推理+分布式推理:
https://bbs.huaweicloud.com/forum/thread-143703-1-1.html
希望这期的干货汇总能够小小地帮助到大家,当然啦,遇到其他相关问题也欢迎来我们论坛一起交流解决,欢迎各位开发者们多多贡献~