2.2 计算图引擎计算图引擎负责对与硬件相关的资源进行管理和优化,将平台特有的信息传递给ME 。该部分包含计算图低级别优化(graph low level optimization,GLLO)、图执行 。
● GLLO包含与硬件相关的优化,即低级别优化(low level optimization,LLO)以及算子融合、缓冲(buffer)融合等与软硬件结合相关的深度优化 。
● 图执行提供离线图执行、分布式训练所需的通信接口等功能 。通过图编译将各个算子组织成统一的模型并下发到设备(device)侧,在宿主(host)侧只需一个触发动作即可开启device侧的模型训练,大大减少了host与device在模型训练中的交互次数 。而去中心化的梯度聚合归约自动分段融合,根据不同模型自动生成不同的融合策略,以提升通信效率,无中心点的设计可以支持更大的集群规模,降低了集群的开销 。
2.3 后端运行时后端运行时包含云、边、端上不同环境(CPU、GPU、华为昇腾处理器、Android/IOS)中的高效运行环境 。
3 MindSpore的技术开发思路MindSpore有三大技术优势,分别是自动并行、自动微分、自动调优,这些优势大大提高了深度学习模型的训练效率,同时也极大地方便了AI工程师进行编码和调试 。
3.1 自动并行随着数据集和模型越来越大,受限于单卡内存,数据并行遇到了瓶颈,需要混合并行 。现在主流框架的做法是通过手动切分网络模型的方式来进行模型并行,手动切分网络模型难度非常大,对开发者的要求非常高,需要专家经验 。而且在切分网络模型的同时,又要做数据并行,这极大地提高了开发的复杂度 。最近有研究者提出了简化混合并行的方法,但这些方法在切分策略、适用的网络和速度上都存在局限性 。
针对上述问题,MindSpore提供了自动并行特性,用于实现自动的数据并行和模型并行的混合并行训练 。自动并行示意图如图2所示 。

文章插图
图2 自动并行示意
关键技术开发的核心思路是在并行切分方面打破样本和参数的边界,按算子的输入/输出数据进行维度切分,将算子切分到多个节点执行,进而实现并行 。在MindSpore前端编译器中,通过算子切分、整图切分、集群拓扑感知调度、并行切分策略自动搜索等关键技术,实现计算的自动并行 。
整图切分是指遍历整个计算图,将每个算子切分到多设备,相连算子间如果切分策略不同,则会自动插入一个张量(tensor)进行数据分布重排列,用于衔接两个算子间的计算 。
由于节点内卡间通信的带宽、时延比节点间通信高,所以集群拓扑感知调度是指将通信量大的数据维度切分到节点内多卡上,将通信量小或者对时延、带宽不敏感的维度切分到节点间 。
为了进一步帮助用户更加快速地进行并行网络训练,在前面的基础上,引入了并行切分策略自动搜索的特性,主要围绕昇腾910构建代价模型(cost model),进而计算出不同数据量、不同算子以及在不同切分策略下的计算通信比,然后通过动态规划等算法,自动搜索出在一定内存阈值下性能最优的切分策略 。使用这个并行切分策略自动搜索算法,不需要用户指定模型如何切分,MindSpore框架可以实现自动的模型切分 。用户只需要一行代码,就能对一个单机的模型做自动的混合并行训练 。
样例代码如下 。
context.set_auto_parallel_context(parallel_mode=ParallelMode.AUTO_PARALLEL,device_num=dev_num)
3.2 自动微分资深的深度学习开发者都知道,手动微分求解的过程不仅求导过程复杂,而且结果很容易出错,因此现有的深度学习框架都具有自动微分的特性,可以帮助开发者利用自动微分技术实现自动求导,解决这个复杂、关键的问题 。
根据实现原理的不同,深度学习框架的自动微分分为以谷歌的TensorFlow为代表的图方法、以脸书的PyTorch为代表的运算符重载以及以MindSpore为代表的源码转化(source to source,S2S)方法,自动微分技术路径如图3所示 。

文章插图
图3 自动微分技术路径
图方法实现简单,并且图的数据结构容易进行优化和并行 。不过图方法的可编程性一直饱受争议,用户需要理解图的概念和接口(如数据节点、通信节点、计算节点、数据边、依赖边、引用边等),存在一定的学习成本 。并且,在图方法中控制流、高阶导数的表示较为复杂 。
运算符重载比较符合用户尤其是研究人员的编程习惯,很受学术界欢迎 。不过这种方式需要使用宿主语言(host language)的解释器,并且在使用过程中需要先运行所有算子,并使用类似磁带(tape)的模式记录运行过程,因此开销比较大,同时这种动态方式也不利于反向性能优化 。
推荐阅读
- 用 Java 训练深度学习模型,原来能这么简单
- 下一代视频编码技术的云视频应用探索
- 剑侠世界手游3 剑侠世界3内测
- Python的从入门到精通的完整学习路线图
- 如何正确卸载软件
- diy奶茶的做法大全,奶茶做法学习大全
- 深度解析SQL和oracle等数据库的历史,说点不一样的给你
- 中考考生需养成的11种学习习惯
- 绿茶奶茶的做法大全,奶茶做法学习大全
- 深度对比docker和kubernetes的区别和联系
