「宽哥玩数码」华为深度学习框架MindSpore正式开源:自动微分不止计算图( 二 )


「宽哥玩数码」华为深度学习框架MindSpore正式开源:自动微分不止计算图
文章图片
源码转换的简要工作方式 。 假设我们用C语言写函数 , 那么根据自动微分工具 , 函数的源代码会自动转换为另一种源代码 , 这种新生成的源代码包含了用于计算梯度的语句 , 它们可以直接编译 。 这样的源码到源码转换对于编译器非常友好 , 编译器在计算过程中也能进行优化 。 MindSpore自动微分的实现可以理解为对程序本身进行的符号微分 , 因为MindSporeIR是函数式的中间表达 , 它与基础代数中的复合函数有直观的对应关系 , 只要已知基础函数的求导公式 , 就能推导出由任意基础函数组成的复合函数的求导公式 。 MindSporeIR中每个原语操作可以对应为基础代数中的基础函数 , 这些基础函数可以构建更复杂的流程控制 。 自动并行训练:一切计算都交给它如今的深度学习模型往往因为体量巨大而必须做并行化 , MindSpore能自动并行按照串行写的代码 , 自动实现分布式并行训练 , 并且保持高性能 。 一般而言 , 并行训练可以分为模型并行与数据并行 , 数据并行比较好理解 , 每一个样本可以独立地完成前向传播 , 最后再汇总传播结果 。 相比之下 , 模型并行就比较复杂了 , 需要我们以「并行思维」这样的逻辑手动编写所有需要并行的部分 。 MindSpore自动并行的目标是构建一种融合了数据并行、模型并行和混合并行的训练方式 。 它会自动选择一种代价最小的模型切分方式 , 实现自动分布式并行训练 。 目前MindSpore采用了切分算子细粒度的并行方式 , 即把图中每个算子都切分到集群而完成并行运算 。 这期间切分方式可能非常复杂 , 但作为崇尚Pythonic的开发者 , 并不需要关心底层实现 , 只需要顶层API计算高效就行了 。
「宽哥玩数码」华为深度学习框架MindSpore正式开源:自动微分不止计算图
文章图片
除了自动微分与自动并行 , MindSpore还有很多优秀的特性与组件 , 完整的数据预处理模块、高效的图计算引擎都值得我们去探索 。 例如在数据预处理模块中 , MindSpore需要考虑如何提升数据预处理的能力 , 从而使其跟得上昇腾芯片消耗数据的速度 。 当然可视化工具、模型评估工具等常用模块也都配齐了 , 除了常见的计算图、标量曲线等可视化 , MindSpore还能实现新颖的「模型溯源」 , 它会把学习率、损失值、模型大小等众多超参配置都画在一起 , 方便开发者调参 。 MindSpore代码什么样?用MindSpore写模型 , 代码风格还是挺有特色的 。 之前介绍过 , MindSpore主要概念就是张量、算子、单元和模型 , 它提供的同样也是Python编程范式 , 因为采用Source-to-Source自动微分 , Python常用的元组、列表等数据结构还能用 , 匿名函数Lambda也没问题 。 张量大家都了解了 , MindSpore中的算子可以是卷积 , 也可以是简单的加法 。 它们与张量一起可以构成「单元」 , 单元是所有神经网络单元的基本类 。 单元再封装就成了模型了 , MindSpore可以直接调用模型来训练与推理 , 也可以使用更底层的API构建复杂模型 。 如下所示 , 我们可以发现写MindSpore有两个比较突出的亮点 。 首先当然是计算图的调整 , 动态图与静态图可以一行代码切换 。 在正常情况下 , MindSpore使用的是PyNative动态图 , 然而在需要静态图的时候 , 设置个context上下文管理器就可以了 。
importnumpyasnpimportmindspore.contextascontextimportmindspore.nnasnnfrommindsporeimportTensor#Initializethenetworknet=Net()x=Tensor(np.random.rand(1,1,4,1024).astype(np.float32))#PredictthenetworkinPyNativemode,bydefaultout=net(x)#ChangetoGraphmodetopredictthenetworkcontext.set_context(mode=context.GRAPH_MODE)out=net(x)对于自动并行特性 , 我们写的串行代码 , 只需要多加一行就能完成自动并行 , 这背后的复杂并行逻辑完全不需要花费精力去理解 。 如下所示 , 只要设置运行环境为图模式 , 并允许使用分布式接口HCCL(华为集合通信库) , 那么在初始化后MindSpore就能自动优化我们写的模型 , 以最好的并行策略加速整个训练过程 。


推荐阅读