MindSpore:华为开源自研AI框架MindSpore!自动微分、并行加持,一次训练,可多场景部署

乾明 发自 凹非寺
量子位 报道 | 公众号 QbitAI
华为的开源AI框架 , 来了!
刚刚 , 华为宣布正式开源自研深度学习框架MindSpore , 代码已经上线 。
MindSpore:华为开源自研AI框架MindSpore!自动微分、并行加持,一次训练,可多场景部署
图片

MindSpore是一款支持端边云全场景的深度学习训练推理框架 , 主要应用于计算机视觉、自然语言处理等AI领域 , 面向数据科学家、算法工程师等人群 , 提供设计友好、运行高效的开发体验 。
作为华为整体AI解决方案的一部分 , MindSpore在提供昇腾AI处理器原生支持及软硬件协同优化 , 也支持通用CPU和GPU 。
2019年8月份 , 华为轮值董事长徐直军介绍 , MindSpore可以实现统一架构 , 一次训练 , 多处部署 。 而且 , 通过实现AI算法即代码 , MindSpore可以显著减少模型开发时间 。
MindSpore为什么能够实现这些能力?伴随着开源 , 它更多的特性 , 正在显露出来 。
MindSpore四大功能
华为MindSpore首席科学家、IEEE Fellow陈雷介绍 , 当前开源的MindSpore主要具备基于源码转换的通用自动微分、自动实现分布式并行训练、数据处理、以及图执行引擎等功能特性 。
整体架构如下图所示:
MindSpore:华为开源自研AI框架MindSpore!自动微分、并行加持,一次训练,可多场景部署
图片

首先说自动微分 , 它是指计算机借助程序自动求出一个函数导数的通用方法 。 在深度学习中 , 通常指对网络模型的自动求导 , 通过梯度指导对网络权重的优化 。
当前主流深度学习框架中 , 主要有三种自动微分技术:
一是以TensorFlow为代表的基于静态数据流图的转换 , 可利用静态编译技术对网络进行性能优化 , 但受制于数据流图的表达形式 , 不能灵活表达控制流;
二是以Pytorch为代表的基于动态图的转换 , 虽然可以使用户可以灵活的使用控制流 。 而其缺点是运行时开销高 , 且不能运用静态编译技术对计算图进行性能优化 。
第三种是基于源码转换的通用自动微分 , 也就是MindSpore采用的技术 。
这种方法 , 源以函数式编程框架为基础 , 以即时编译(JIT)的方式在中间表达上做自动微分变换 , 支持复杂控制流场景、高阶函数和闭包 。
由于支持对控制流的自动微分 , 技术可以兼得上面两种技术的优点 , 即支持灵活的原生的控制流表达 , 同时也可以在执行前对网络做静态编译优化 , 生成高效的计算图 , 从而提高执行性能 。
自动并行方面 , 陈雷介绍说 , MindSpore能够用串行算法代码 , 自动实现分布式并行训练 , 同样直击当前模型研发过程中的痛点 。
MindSpore:华为开源自研AI框架MindSpore!自动微分、并行加持,一次训练,可多场景部署
图片

一般来说 , 在模型研发过程中 , 除设计模型自身的逻辑外 , 还需设计分布式并行训练的配置 。
这是一个辛苦活 。
开发者不仅要分析数据量、参数量、集群群网络拓扑等因素来确定模型切分策略;还要考虑切分后的子模型设备绑定等 , 来达到性能较优的分布式并行训练效果 。
但其实 , 这些并行训练的优化细节与模型要实现的业务目标无关 , 最后却让开发者费尽了心思 , “掉光了头发” 。
尤其是逻辑复杂、参数量巨大的模型 , 想要人工找到最优的并行策略基本不可能 。
华为想要解决这个问题 。 MindSpore提出一种全新的分布式并行训练模式 , 融合了数据并行、模型并行和混合并行 。
MindSpore:华为开源自研AI框架MindSpore!自动微分、并行加持,一次训练,可多场景部署
图片

具体来说 , MindSpore构建了基于数据量、模型参数量、网络集群拓扑带宽等信息的代价模型(Cost Model) , 自动选择一种代价最小的模型切分方式 , 并绑定模型到设备执行 , 实现自动分布式并行训练 。
整个过程 , 几乎不需要开发者参与 , 他们只需要专注于模型逻辑的开发就行了 。


推荐阅读