收藏
0有用+1
0

MindSpore

华为发布的开源AI计算框架
MindSpore是由华为于2019年8月推出的新一代全场景AI计算框架,2020年3月28日,华为宣布MindSpore正式开源
中文名
昇思
外文名
MindSpore
硬件平台
Ascend 910,GPU CUDA10.1,GPU CUDA11.1,CPU
操作系统
EulerOS,Ubuntu,Windows
编程语言
Python
开源时间
2020.03.28
开发商
华为
类    型
机器学习库

释义

播报
编辑
MindSpore:新一代AI开源计算催组海框酷档架。 [1]
创新编付嚷兆格程范式,AI科学家和工程师更易使用,便于开放式创新;该计算框架可满足终端、边缘计算、云全场景需求,能更好保护数据隐私;可开碑旬宙源,形成广阔应用生态。
2020年3月28日,华为糠战狱在开发者大会2020上宣布,全场景AI计算框架MindSpore在码云正式开源。
MindSpore着重提升易用性并降低AI开发者的开发门槛,MindSpore原生适应每个场景包括端、边缘和云,并能够在按需协院宙验同的基础上,通过实现AI算法即代码,使开发态变得更加友好,显著减少模型开发时间,降低模型开发门槛。通过MindSpore自身的技术创新及MindSpore与华为昇腾AI处理器热戏霉的协同优化,实现了运行态的高效霸定,大大提高了计算性能;MindSpore也支持GPU、CPU等其它处理器。 [2]

总体架构

播报
编辑
MindSpore框架架构总体分为MindSpore前端表示层、MindSpore计算图引擎和MindSpore后端运行时三层。 [3]
MindSpore总体架构
  • MindSpore前端表示层(Mind Expression,简称ME)该部分包含Python API、MindSpore IR(Intermediate representation,简称IR)、计算图高级别优化(Graph High Level Optimization,简称GHLO)三部分。
    • Python API向用户提供统一的模型训练、推理、导出接口,以及统一的数据处理、增强、格式转换接口。
    • GHLO包含硬件无关的优化(如死代码消除等)、自动并行和自动微分等功能。
    • MindSpore IR提供统一的中间表示,MindSpore基于此IR进行pass优化。
  • MindSpore计算图引擎(Graph Engine,简称GE)该部分包含计算图低级别优化(Graph Low Level Optimization,简称GLLO)、图执行。
    • GLLO包含硬件相关的优化,以及算子融合、Buffer融合等软硬件结合相关的深度优化。
    • 图执行提供离线图执行、分布式训练所需要的通信接口等功能。
  • MindSpore后端运行时该部分包含云、边、端上不同环境中的高效运行环境。 [3]

特性

播报
编辑

开发态友好

  • 自动微分,网络+算子统一编程,函数式/算法原生表达,反向网络算子自动生成
  • 自动并行,模型自动切分实现高效率的模型并行
  • 自动调优,动态图+静态图同一套代码 [4]

运行态高效

  • On-Device执行,发挥昇腾大算力
  • Pipeline优化,提升并行线性度
  • 深度图优化,自适应AI Core算力和精度 [4]

部署态灵活

  • 端-边-云按需协同计算,更好的保护隐私
  • 端-边-云统一架构,实现一次开发,按需部署 [4]

安装

播报
编辑
MindSpore的安装简单,根据MindSpore官网的安装指南,对操作系统和硬件平台等自由选择即可给出相应的安装步骤。这里以0.3.0-alpha版本安装过程为例,介绍如何在CPU环境的Windows系统上快速安装MindSpore。 [5]
系统要求和软件依赖
版本号
操作系统
可执行文件安装依赖
源码编译安装依赖
MindSpore 0.3.0-alpha
Windows 10 x86_64
-Python3.7.5
- 其他依赖项:
numpy >= 1.17.0
protobuf >= 3.8.0
asttokens >= 1.1.13
pillow >= 6.2.0
scipy >= 1.3.3
easydict >= 1.9
sympy >= 1.4
cffi >= 1.13.2
wheel >= 0.32.0
decorator >= 4.4.0
setuptools >= 40.8.0
matplotlib >= 3.1.3 # for ut
testopencv-python >= 4.2.0.32 # for ut test
(以上内容保存于requirements.txt文件中)
编译依赖:
-Python3.7.5
-MinGW-W64 GCC-7.3.0x86_64-posix-seh
-ActivePerl5.24.3.2404
-CMake3.14.1
-wheel>= 0.32.0
安装依赖:
与可执行文件安装依赖相同
  • 在联网状态下,安装whl包时会自动下载requirements.txt中的依赖项,其余情况需自行安装。 [6]
Conda安装(可选)
  1. 1.
    Conda安装包下载并安装。
  2. 2.
    安装后从Windows开始菜单打开Anaconda Prompt。
  3. 3.
    创建并激活Python环境。conda create -n {your_env_name} python=3.7.5conda activate {your_env_name}#Conda是Python环境管理工具,建议初学者上网查阅更多资料。
通过可执行文件安装
  1. 1.
    从MindSpore官网下载地址下载whl包,建议先进行SHA-256完整性校验,执行如下命令安装MindSpore。pip install mindspore-0.3.0-cp37-cp37m-win_amd64.whl
  2. 2.
    执行如下命令,如果没有提示No module named 'mindspore'等加载错误的信息,则说明安装成功。 [6]pythonimport mindspore
从源码编译安装
  1. 1.
    从代码仓下载源码。git clone (代码仓源码地址:参考官网安装指南) -b r0.3
  2. 2.
    在源码根目录下执行如下命令编译MindSpore。call build.bat
    • 在执行上述命令前,需保证mingw64\bin\路径和可执行文件cmake所在路径已加入环境变量PATH中。
    • 如git没有安装在ProgramFiles,在执行上述命令前,需设置环境变量指定patch.exe的位置,如git安装在D:\git时,需设置set MS_PATCH_PATH=D:\git\usr\bin。
    • build.bat中会执行git clone获取第三方依赖库的代码,请提前确保git的网络设置正确可用。
    • 如果编译机性能较好,可在执行中增加-j{线程数}来增加线程数量(默认为6)。如call build.bat 12。
    • 在执行上述命令前,需保证已安装Visual C++ Redistributable for Visual Studio 2015。 [6]
  3. 3.
    执行如下命令安装MindSpore。pip install build/package/mindspore-0.3.0-cp37-cp37m-win_amd64.whl
  4. 4.
    执行如下命令,如果没有提示No module named 'mindspore'等加载错误的信息,则说明安装成功。 [6]pythonimport mindspore

版本信息

播报
编辑
0.2.0-alpha
发布日期:2020年4月30日
版本特点:
  1. 1.
    支持windows系统MindSpore 0.2版本支持了Windows安装。官方0.2文档已经正式发布,可以在官网中获取完整的安装指导,包括从编译到安装命令端到端的安装方式。具体使用上和MindSpore的Linux CPU版本没有任何不同,可以支持LeNet网络进行图片分类,支持的算子等也都是一样的
  2. 2.
    多个模型Benchmark发布MindSpore 0.2版本发布了benchmark,包含有机器视觉类常用网络ResNet-50 v1.5、自然语言处理常用网络BERT-Large,分别在1*Ascend 910、8*Ascend 910、16*Ascend 910等不同规格的昇腾AI处理器上训练速度和加速比。图片训练在16*Ascend 910场景下每秒处理27090张图片,自然语言处理在8*Ascend 910场景下每秒处理1613个句子,多机并行训练加速比达到0.95左右。 [7]
  3. 3.
    可视化工具功能强化参数直方图MindSpore 0.1版本发布时,可视化功能已经包含有模型可视化、模型溯源、数据溯源等功能,0.2版本推出可视化组件的新特性“参数分布图”,支持可视化权重和梯度分布情况。支持在网络优化过程中,观察权重&梯度随训练过程的变化,可以帮助用户在网络调优时,判断网络的优化进展。只需要使用HistogramSummary算子记录感兴趣的权重和梯度,即可在MindSpore可视化组件中的训练看板生成数据的直方图,并观察他们的变化。当出现奇怪的权重数据分布时,可以快速直观得判断训练的健康程度。 [7]
参数直方图展示
溯源自定义和联动
溯源自定义可以帮助用户记录、查询模型迭代调试开发过程使用的模型超参和数据处理增强。只需要在模型训练测试过程添加TrainLineage/EvalLineage callback记录溯源信息,即可在MindInsight模型溯源和数据溯源标签页回溯查看。
*支持通过user_defined_info参数记录自定义溯源信息。
*支持模型参数和数据处理参数的筛选和排序。
模型溯源页面
0.3.0-alpha
差分隐私
差分隐私(Differential Privacy)是一种强大的隐私保护技术,通过限制单个数据对数据分析结果的影响,防止反推个人敏感信息。在AI世界中,差分隐私技术可以限制通过AI模型分析训练数据中的隐私信息。
MindSpore的安全组件提供了差分隐私训练模块,用户可以使用添加高斯噪声的差分隐私优化器(DP-SGD),训练出保护隐私的AI模型。同时MindSpore还提供了差分隐私预算监测器,方便用户在训练过程中跟踪差分隐私的保护效果。 [8]
二阶优化
MindSpore在v0.3版本中重磅推出了二阶优化,平衡了二阶带来的额外计算量,在ResNet网络上达到目标精度(0.759)仅用了42个迭代(epoch),比同样软硬件环境下的一阶优化快了近1倍(一阶优化使用了81epoch达到目标精度),训练效率得到提高。 [8]
PyTorch一键转化
为了方便大家都能快速切换到MindSpore生态上来,MindSpore提供了模型转换工具,目标将PyTorch训练脚本快速转换成MindSpore训练脚本,自动替换其中90%以上的算子,节省大量算子查询和替换工作。剩余未替换部分也会标注出来,让用户快速定位,聚焦工作。 [8]
除了这些,MindSpore还新增支持了DeepFM、DeepLabV3、Wide&Deep等新的模型,修复了一些关键bug,增添了网络迁移教程、自定义算子教程等等。 [8]
0.5.0-beta
图算融合
图算融合,将算子与图层的表达进行统一,提供了一种简洁而统一的表达能力,作为算子的一种新的表达方式、融合方法、编译流程,让人有种通过Python写网络一样体验。
在中间表达中,它用基础原语组成的子图来表达算子的内部计算逻辑,打破了原有算子和图层之间的信息边界。利用统一的表达能力,图算融合实现一种更通用的更细粒度的算子融合能力,通过分析和优化现有网络计算图逻辑,对原有计算逻辑进行拆分、重组、融合,在中间表达中自动形成融合子图。
在后端,这些融合子图会由AKG(Auto Kernel Generator)自动生成高性能的融合算子,且基于polyhedral实现了Auto schedule,从而实现网络整体执行时间的端到端深度优化。
打开开关即可获得性能收益,例如在BERT中通过打开图算的使能开关可以获得14.8%的图算融合收益。 [9]
图算融合
量化训练
0.5版本,MindSpore上线了量化训练部分,用户可以使用MindSpore进行量化训练,它能在不明显降低精度的情况下,把模型尺寸减低为原来的25%~40%,同时能减少模型内存占用,加快模型推理速度,降低功耗等。官方也在Model Zoo中提供了部分已经实现好的量化脚本。不过本版本端侧量化推理部分还未正式上线。 [9]
混合异构
MindSpore 0.5版本上线了混合异构特性,即支持网络中部分算子跑在Host端,部分算子跑在Device端。在一些网络执行过程中需要用到大量的内存,而Device内存无法满足训练要求,有了Host/Device异构执行,用户可以将操作大数据的算子设置在Host执行,从而解决网络无法在纯Device端训练的问题。
如Wide&Deep的典型网络,当Embedding Table大到无法装入Device内存时,可以将操作EmbeddingTable的Lookup算子及优化器放到Host端执行以满足wide&deep大规模权重训练的要求。
图神经网络
近两年,图神经网络的研究成为一个热门方向,在社交网络、知识图谱、推荐系统,生命科学等领域有广泛的应用场景;MindSpore新版本可支持图神经网络的训练,最典型的GCN和GAT网络在Cora和Citeseer数据集上做混合精度训练,平均精度如下:
平均精度
-
Cora
Citeseer
GCN
81.5%
71.5%
GAT
83.0%
72.5%
图1是Cora数据集经过GCN训练后的节点特征的t-SNE结果。
图1
可视化性能分析工具
MindSpore可视化组件(MindInsight)更新了系统化的性能分析工具——Profiler,用户能够使用它来帮助理解、分析、调试并优化神经网络的性能。
使用Profiler可以:
l在训练脚本中启动、停止Profiler功能,收集性能分析数据;
l查看训练的迭代轨迹(指step间隔、前向/反向计算、AllReduce等各阶段时间占比)统计信息,定位性能瓶颈所在的阶段;
l分析神经网络中算子的执行性能,包括单算子性能分析和算子类型性能分析;
l分析训练数据准备(MindData)阶段的性能,定位数据算子的瓶颈所在;
l查看训练timeline,分析stream/task在Ascend芯片上的执行序列和执行时间。 [9]
0.6.0-beta
MindSpore Serving
模型训练、验证完善后,如何生产上线使用,就好比是八仙过海各显神通。针对这种情况,MindSpore突出了Serving模块,它是一个轻量级的服务模块,为生产环境而设计,旨在帮助开发者在生产环境中部署在线推理服务。它支持多种编程语言开发客户端,例如C++和Python。当用户使用MindSpore完成模型训练后,导出MindSpore模型,即可使用MindSpore Serving创建该模型的推理服务。
MindSpore Serving当前的主要功能:
  • 训练完成后无缝对接推理服务
  • 支持推理模型的预加载,获得更佳性能的推理服务
MindSpore Serving当前的主要功能
PS分布式训练
分布式训练作为MindSpore的特性之一,MindSpore团队在v0.6版本里又添加了新的内容——PS分布式训练。
Parameter Server(参数服务器)是分布式训练中一种广泛使用的架构,既支持同步SGD,也支持异步SGD的训练算法。在扩展性上,将模型的计算与模型的更新分别部署在Worker和Server两类进程中,使得Worker和Server的资源可以独立地横向扩缩。
另外,在大规模数据中心的环境下,计算设备、网络以及存储经常会出现各种故障而导致部分节点异常,而在参数服务器的架构下,能够较为容易地处理此类的故障而不会对训练中的任务产生影响。
在MindSpore的参数服务器一共包含三个独立的组件,分别是Server、Worker和Scheduler,作用分别是:
  • Server:保存模型的权重和反向计算的梯度值,并使用优化器通过Worker上传的梯度值对模型进行更新(当前版本仅支持单Server);
  • Worker:执行网络的正反向计算,正向计算的梯度值通过Push接口上传至Server中,通过Pull接口把Server更新好的模型下载到Worker本地;
  • Scheduler:用于建立Server和Worker的通信关系;
相较于同步的AllReduce训练方法,Parameter Server具备着很好的灵活性、可扩展性以及节点容灾的能力。
分布式训练
超大规模稀疏特征训练
像wide&Deep的推荐网络,根据场景不同特征数量可能是千万到百亿的规模,Embedding参数量是GB级到TB级。这么大的参数量,远远超过了设备内存容量,无法直接在设备卡上进行训练。 [10]
为此,MindSpore在全下沉模式(所有计算都在Device上)之外,提供了Host-Device混合执行模式,即Embedding部署在host测,DNN和通信下沉到Device侧,来解决embedding容量的问题,发挥昇腾芯片算力;并在此基础上实现了混合并行(Embedding模型并行,DNN数据并行)实现超大规模Embedding的高性能训练。
超大规模稀疏特征训练
对于第二种模式,可以支持500GB的模型,使用creteo数据集训练的性能和精度测试结果如下表: [10]
creteo数据集训练的性能和精度测试结果
0.7.0-beta
MindSpore Lite
本次更新的重点是,MindSpore发布了针对手机及IoT场景,端到端的解决方案——MindSpore Lite。从模型开始到编译发布,提供了包括转换工具、Runtime等工具链,帮助用户在手机以及后续的IoT设备上使能MindSpore的AI能力。
Fuzz测试工具
在实际使用过程中因为一些原因,譬如使用图像分类应用时,当镜头模糊、光照不足、下雨大雾、拍摄角度等等情况下,实际输入的数据与训练模型时的标准数据集有一些不同。在这种情况下,模型可能出现模型精度答复下降。而在某些极端情况下,可能出现未知的推理失误,引入安全性问题。如在人脸解锁场景,可能因为未知的干扰,而意外解锁。为了更好的评估和提高模型的鲁棒性,同时尽可能激活神经元,减少未知的安全风险,MindArmour提供了Fuzz(模糊)测试工具。
测试过程中,工具的Fuzzer Moduler(Fuzz模块)可以对数据集进行增强,如色差、翻转、模糊等,自动化产生测试样例,如图2右侧。在结果输出方面,用户可以看到模糊测试结果,评价了图像的覆盖率指标以及精度下降。图2左侧可以看出在模型出现扰动的情况下,模型精度(Accuracy)下降程度以及神经元激活程度(Coverage Rate)。
图2
深度概率编程
深度概率编程融合了深度学习和贝叶斯建模,深度概率模型相比于传统的深度神经网络模型,引入了不确定性,提升了模型的鲁棒性和可解释性。
MindSpore在v0.7版本中,提供了概率模型的高效编程库,可以与深度学习模型无缝融合,以面向不同需求的开发者。 [11]
对于熟悉深度学习的同学,支持深度神经网络一键转贝叶斯神经网络;也支持调用封装好的接口,像实现深度神经网络一样实现贝叶斯神经网络和生成网络;并提供不确定性估计工具,方便同学评估模型和数据。
对于熟悉概率学习的同学,其提供通用、模块化的贝叶斯建模和推断方法库,包括概率采样库、贝叶斯神经网络,概率推断算法等,帮助用户更加快速、简洁地进行概率编程。
深度概率编程
自动数据增强
MindSpore数据处理组件新增了自动数据增强的能力,支持用户在处理数据过程中定制及调整数据增强操作。主要有以下两种特性:
· 支持基于概率动态调整数据增强策略
根据用户预置策略列表,每次随机选择一个策略,同时同一策略各数据增强算子有不同的概率,按照概率选择算子执行。
· 支持用户根据pipeline上下文信息或训练结果动态调整数据增强策略
支持batch、 epoch粒度调整数据增强策略。
· 支持基于概率动态调整数据增强策略
v1.0.0
三大创新助力全场景AI应用 [12]
创新一:全流程极简,多套件打造极致开发体验 [12]
在1.0版本中,官方提供了40+个典型的高性能模型,覆盖了CV、NLP、推荐、语音等各个领域,大家可以使用这些模型直接推理或者加载自己的数据集做Fine-tuning,这样可以节省大量训练的时间和成本,快速开发出智能的服务和应用。 [12]
三大创新助力全场景AI应用
1.0版本中,MindSpore提供了所见即所得的模型开发和调优套件。在模型开发阶段,MindSpore基于统一的自动微分引擎,支持用户用一行代码切换动态图和静态图模式,使得兼顾开发效率和执行效率。 [12]
创新二:全自动并行,最大释放集群算力
三大创新助力全场景AI应用
· 在算法层面,MindSpore拥有自动并行能力,可以根据集群配置对模型和张量自动切分,将串行算法进行自动并行,大大减少算法开发人员的分布式代码开发和调优的负担,使得算法调优时间从月级降到天级; [12]
· 在算子层面,MindSpore提供了算子级并行自动融合,通过细粒度pipeline的并行执行的方式,进一步提高计算性能; [12]
· 在硬件层面,MindSpore进行整图调度,可以根据计算特征,自动把算子调度到异构设备上执行,实现异构多核的高效并行执行; [12]
创新三:全场景协同,智能匹配端、边、云多样设备
MindSpore 1.0提供模型自适应生成能力,通过平衡模型精度和设备资源约束,自动搜索匹配的模型,开发者只需要做一次训练,得到的模型就可以在端、边、云等多处部署,可保证生成的精度损失小于1%。
三大创新助力全场景AI应用
三大黑科技加速AI模型训练
黑科技一:二阶优化算法;MindSpore自研二阶优化算法THOR通过减少二阶矩阵求逆次数以及降低二阶矩阵的维度来降低求逆时间。
二阶优化算法
黑科技二:图算融合优化;MindSpore图算融合优化是通过分析和优化现有网络计算图逻辑,对原有计算逻辑进行拆分、重组、融合等操作,以减少算子执行间隙的开销并且提升设备计算资源利用率,从而实现网络整体执行时间的优化。 [12]
图算融合优化
黑科技三:轻量级神经网络推理框架MindSpore Lite;MindSpore Lite是MindSpore新发布的一个轻量级神经网络推理框架,帮助开发者使能端侧及边缘侧AI能力。主要包含离线转换工具和轻量级运行时两部分。离线转换工具将MindSpore模型及第三方模型变得更小,运行更快;轻量级运行时可部署到智能手机、以及手表、耳机等资源受限(算力,存储,电量等)嵌入式设备。 [12]
轻量级神经网络推理框架
v1.1.0
MindIR:是MindSpore提供的中间表达形式,可以帮助大家实现一次训练多处部署,实现端云互通。MindIR通过统一的算子IR定义,消除了不同后端的模型差异,大家可以基于同一个模型文件在端、边、云不同平台上进行协同任务 [13]
MindIR图存储内容(anf图)示意如下:
MindIR图存储内容(anf图)
MindSpore Serving:是一个轻量级、高性能的服务模块,旨在帮助MindSpore开发者在生产环境中高效部署在线推理服务 [13]
MindSpore Serving
端侧训练:MindSpore开源了端侧训练特性,能够使用端侧计算单元对模型进行fine tuning,以达到AI应用越用越精准的目标 [13]
MindSpore PyNative:在MindSpore PyNative模式下,大家可以像调试python代码一样调试网络模型,打断点,看输出,分析问题。 [13]
MindSpore PyNative
调试器:MindSpore1.1版本重新设计了调试器的检查能力,增强了易用性,能够更好地帮助用户定位精度问题。新增近二十项检查规则,支持对权重、激活、梯度、张量等进行针对性的检查,提前发现训练问题。调整检查规则后支持对当前数据进行重新检查,不漏过可疑点。 [13]
调试器
单节点数据缓存:是指缓存服务器为在同一台机器上的多个客户端提供数据缓存服务,用于加速模型训练中的数据预处理。缓存服务,支持两类数据的缓存,即元数据缓存和预处理后数据缓存,可避免重复的数据加载和预处理,提升数据处理的吞吐量,实现高速数据供给,缩短简单模型的训练时间。
单节点数据缓存
并行拓扑内存约束优化器SOMAS:对并行流信息与数据依赖进行聚合分析,得到算子间祖先关系,构建张量全局生命期互斥约束,再使用多种启发式算法求解获得最优的内存静态规划,实现逼近理论极限的内存复用,可大幅降低多流大型计算图训练内存使用量,进而提升训练的Batch Size数量和训练吞吐量FPS。
SOMAS优化后内存大幅降低。
并行拓扑内存约束优化器SOMAS
v1.2.0
超大规模自动并行:如何在大集群下高效训练千亿至万亿参数模型,当前主要面临两个挑战:切分难——用户需要综合考虑参数量、计算量、计算类型、集群带宽拓扑和样本数量等,才能设计出性能较优的并行切分策略;编码难——模型编码除了要考虑算法以外,还需要编写大量并行切分和通信代码。 [14]
MindSpore采用多维度自动并行,通过数据并行、模型并行、Pipeline并行、异构并行、重复计算、高效内存复用及拓扑感知调度,降低通信开销,实现整体迭代时间最小(计算时间+通信时间)。 [14]
超大规模自动并行
MindSpore for IoT:相较于移动终端设备,IoT设备上系统资源有限,对ROM空间占用、运行时内存和功耗要求较高,为了使得IoT设备上也能方便快速的部署AI应用,MindSpore Lite此次正式开源了代码自动生成工具Codegen,旨在将模型编译为极简的代码,用于推理。 [14]
Codegen可对接MindSpore Lite的NNACL算子库和ARM的CMSIS算子库,支持生成可在X86/ARM64/ARM32A/ARM32M平台部署的推理代码。
MindSpore for IoT
可解释AI能力:MindSpore在MindInsight部件中集成了的可解释AI能力:显著图可视化、反事实解释和可解释AI评估体系(度量体系),旨在帮忙开发者更好进行模型调优。显著图可视化和反事实解释:能够为图片分类模型的推理结果,标识影响分类结果的关键特征,方便理解分类依据,帮助分析定位分类错误原因,加速模型调优。 [14]
评估体系:面向各种解释方法,给出在具体场景下,选中解释方法在不同度量方法下的解释效果得分,助力用户选择最优的解释方法,从而更好的帮助模型调优。 [14]
v1.3.0
MindSpore Federated:联邦学习是一种加密的分布式机器学习技术,它是指参与联邦学习的各用户在不共享本地数据的前提下共建AI模型,主要用于解决数据隐私和数据孤岛的问题。MindSpore Federated优先专注于大规模参与方的横向联邦的应用场景。 [15]
端云场景下的参与方是非常大量的手机或者IoT设备,其分布规模和设备不可靠性带来了系统异构、通信效率、隐私安全和标签缺失等挑战。MindSpore Federated设计了松耦合分布式服务器、限时通信模块、容忍退出的安全聚合等模块,使得任何时候只要部分客户端可用,都可以进行联邦学习任务,并解决了系统异构带来的“长尾效应”,提高了学习效率。
MindSpore Federated
搭载于MindSpore端边云全场景统一的基础架构,MindSpore Federated将会作为华为终端的核心竞争力之一,在保护用户隐私的前提下,提供更具有个性化的用户信息决策。
MindSpore Lite 端云训练:MindSpore Lite采用了训练内存复用、virtual batch、混合精度训练、在线融合、量化等手段对减少端侧训练时的内存占用。同时在联邦学习MindSpore Federated场景下支持云侧对端侧权重的读写,权重采用差分隐私方式进行端云传输进一步保证了端云训练中的安全性。 [15]
当前MindSpore Lite支持对MindSpore训练导出的模型进行增量训练,实现云-端训练的无缝切换。但由于端侧硬件资源的限制,如何在不影响用户体验下进行训练,对端侧训练的内存和性能提出了挑战。端云训练一般流程如下:
MindSpore Lite 端云训练
调试器易用性作为MindSpore图模式下的调试利器,调试器提供了丰富的检查规则帮助用户快速识别常见精度问题。为了帮助大家更好地在图模式下调试脚本,1.3版本中,新增了图码结合调试和训练回放功能。 [15]
图码结合调试:一眼掌握代码和计算图的关系。MindSpore图模式的调试中,在调试器的帮助下,可以方便地查看计算图中算子节点和代码的关联关系,无论是以码搜图,还是以图找码,都能在图形界面下快速完成。
支持离线调试:随时离线回放分析训练过程,节约AI处理器资源。在使用之前的调试器时,要求先启动训练进程,在训练进程运行的过程中对精度问题进行分析。提供了离线调试的能力,通过dump功能将调试数据保存到磁盘上,然后就可以在不使用昇腾AI处理器的情况下回看训练过程,分析精度问题。由于数据在磁盘上,离线调试中还可以随意切换正在调试的迭代,回放训练,免去在线调试错过关键迭代后又要从头运行脚本的烦恼。 [15]
支持单机多卡调试:定位并行训练中的精度问题。在离线调试功能的基础上,调试器支持了单机多卡训练的调试。在MindSpore上调试单机多卡的训练时,只需通过dump功能保存数据到磁盘,就可以使用MindInsight可视化地进行分析。调试器中已经提供的监测点,例如检查梯度消失,检查激活值饱和,检查权重不更新等,都可以继续在此场景下使用。图码结合调试同样支持单机多卡。 [15]
推理优化:为了更好地支持PC侧推理,x86_64从汇编层面入手,支持针对不同卷积shape的动态block切分,充分利用寄存器等硬件资源,使推理性能达到极致,较上个版本推理时延有了10%~75%+的提升。在Intel Core i7-8700 CPU上与OpenVINO(2021.3.394)、MNN(1.2.0)、TNN(v0.3)在几个经典CV类网络上进行benchmark测试,从测试结果可以看出MindSpore Lite保持了较高的水平。 [15]
几个经典CV类网络上进行benchmark测试
图算融合加速MindSpore网络训练:图算融合是MindSpore的关键技术之一,通过图层融合与算子生成的协同优化来提升网络执行性能。在之前版本,使能了NPU(昇腾)和GPU上图算融合的基本能力,并且在标杆网络上取得了不错的成绩。在1.3版本中,加强了图算融合在GPU上的泛化能力,通过对Model Zoo 40多张主流网络的验证,平均可获得89%的性能提升。 [15]
图算融合加速MindSpore网络训练
v1.5.0
1.5版本为大家带来全新科学计算行业套件MindScience、支持混合专家(MoE)与异构并行、亲和算法库MindSpore Boost、集群调优支持大规模分布式训练,并完善控制流使用,新增对外开放机制等诸多新特性。 [16]
MindScience:科学计算行业套件,为高性能科学应用提供计算新范式
通过多尺度混合计算和高阶混合微分两大关键技术,将MindSpore原有的AI计算引擎升级为AI与科学计算的统一引擎,实现融合的统一加速。在此基础上,计划面向8大科学计算行业打造MindScience系列套件。这些行业套件包含数据集、基础模型、预置高精度模型和前后处理工具,加速科学行业应用开发。 [16]
MindScience
当前推出了面向电子信息行业的MindElec套件和面向生命科学行业的MindSPONGE套件,分别实现了电磁仿真性能提升10倍和生物制药化合物模拟效率提升50%。 [16]
自动并行支持混合专家(MoE)与异构并行:联合中科院发布全球首个三模态大模型—紫东.太初,又实现遥感领域超分辨率图像自动切分。 [16]
混合专家(MoE)及其并行:基于Transformer扩展的大模型是当前各种大模型的主干,混合专家(Mixture of Expert,MoE)结构成为扩展Transformer的一种关键技术。 [16]
如下图所示,Transformer中每层是由Attention和FeedForward(FFN)这两个基础结构组成的。将FFN看做是一个专家(expert),MoE结构是由多个专家并行组成,其入口是一个路由器(router),负责将token分发给各个专家,可以有多种路由策略可选择(如Top,Top2等),其出口是加权求和。
混合专家(MoE)及其并行
MoE已被验证过在多种任务上有优异的效果,是万亿以上大模型的基础结构。MindSpore 1.5版本已实现了MoE的结构和专家并行的功能:允许多专家在多设备上并行执行。如下图所示,路由器(数据并行)经过AllToAll算子将token分配到各个设备上的专家进行计算,而后,又进过AllToAll将结果汇聚。 [16]
混合专家(MoE)及其并行
异构并行:受限于GPU/NPU设备的内存瓶颈,有效利用Host端的内存成为解决大模型扩展的一种可行的途径。异构并行训练方法是通过分析图上算子内存占用和计算密集程度,将内存消耗巨大和适合CPU处理的算子切分到CPU子图,将内存消耗较小计算密集的算子切分到硬件加速器子图,框架协同不同子图进行网络训练的过程,能够充分利用异构硬件特点,有效的提升单卡可训练模型规模。 [16]
异构并行
对于大规模预训练模型,其主要的瓶颈往往在于参数量过大,设备显存无法存放下来。MindSpore1.5版本在处理大规模预训练网络时,可以通过优化器异构将优化器指定到CPU上,以减少优化器状态量显存占用开销,进而扩展可训练模型规模。如下图所示,将FP32的Adam优化器放置于CPU上进行运算,可以减少60%多的参数显存占用。 [16]
异构并行
MindSpore Boost:训练是一个复杂的计算过程,端到端训练包含很多步骤。深度学习训练过程本身是个高冗余的计算过程,需要围绕多个模块分别进行计算优化,最终实现不同AI场景下端到端训练的效率优化。在MindSpore 1.5版本中,华为中央媒体技术院与MindSpore共同推出亲和算法库MindSpore Boost 1.0,目标都是为了在不同的AI场景下,保持用户训练精度的同时,为用户提供高效的训练体验,包含数据、网络、通信、训练策略和优化器等维度的加速算法,架构图如下所示。 [16]
MindSpore Boost
除了亲和算法外,还提供简易模式,进行算法封装,为用户提供三种不同层级的选择,即O1/O2/O3,随着层级的递增,其加速比例增加,这种模式下,用户无需了解算法细节, 仅需要在调用Model的训练入口时,打开加速开关和选择加速层级即可。
集群调试调优支持大规模分布式训练:大模型是当前深度学习领域研究的热点之一。模型的参数量和训练数据集的大小均以指数级的规模快速增长。以MindSpore和鹏城实验室共同发布的鹏程·盘古模型为例,模型的参数量达到了2000亿,使用2K集群历时数月进行训练。在这样的背景下,模型性能调优对减少训练时间和成本有着至关重要的意义。 [16]
MindSpore 1.5版本发布集群调试调优工具链,针对K级集群性能数据能够做到一键收集,提供集群慢节点/慢网络、计算通信比、内存热力图等多维性能分析与可视化能力,结合智能集群调优建议,达成小时级性能瓶颈定位。 [16]
集群迭代&通信性能分析:以集群视角汇总了多项性能关键数据,并对多卡数据提供了排序、分析功能,用户可快速的从K级集群中找到慢节点、慢链路等,并从集群页面跳转到对应的单卡页面,进一步定界节点慢的原因,找到最小性能瓶颈点。
MindSpore
计算通信比分析:集群并行训练过程中,通信是影响性能的重要因素,计算通信比指标可以帮助开发者分析网络切分策略是否合理以及是否有优化空间。如下图所示,非overlap 87ms是开发者可关注的性能提升空间。
MindSpore Lite新增对外开放机制:支持Hi3516/3549芯片以及更多异构硬件的对接
MindSpore Lite新增了两个对外开放的接入机制:支持南向自定义算子接入,支持第三方AI框架通过Delegate机制接入。 [16]
南向自定义算子的接入功能,支持用户自定义图优化能力,实现了在离线阶段生成特定硬件支持的模型文件,同时支持特有硬件算子接入MindSpore Lite Runtime,实现MindSpore Lite在第三方硬件上高性能推理,当前已经接入Hi3516/3559芯片,使机器视觉AI应用开发更加便捷。 [16]
MindSpore
灵活表达:完善控制流,支持多种控制语句混合编写,支持循环自动微分
在此版本中,在控制流语法的使用方面提供以下支持与优化:
进一步强化了对于静态图控制流的支持,通过使用虚拟机机制执行控制流算子,解决了控制流非尾递归场景的图递归执行问题,实现了对循环求反向的支持。同时扩大了控制流的语法支持范围,控制流已可以支持if、while、for、break、continue表达。一个if语句基于虚拟机机制的控制流执行流程如图所示: [16]
MindSpore
优化静态图编译过程,减少了控制流网络的子图数量,大幅提升部分复杂控制流网络场景下的编译性能和执行性能。
支持控制流MindIR导入导出功能,可以在云侧训练控制流网络导出MindIR,在端侧导入MindIR进行推理。
v1.6.0
此版本中昇思MindSpore全场景AI框架易用性不断改进,控制流性能提升并支持副作用训练,昇思MindSpore全场景AI框架发布高效易用的图学习框架昇思MindSpore Graph Learning,高性能可扩展的强化学习计算框架昇思MindSpore Reinforcement,提供支持第三方框架模型迁移工具,同时升级自定义算子能力支持高效添加算子,持续提升框架的训练与推理性能。
控制流支持副作用训练,持续优化性能
昇思MindSpore全场景AI框架1.6.1版本,对控制流的IR表达设计进行了重构,消除了不必要的图复制,对控制流场景下各方面进行了较大的优化。 [17]
1.支持训练场景使用Assign等副作用算子。
2.优化控制流子图数量,反向网络可直接复用正向图算子结果,不需要重复计算正向图,提升了执行性能和编译性能。
3.支持数据无依赖子图并行执行,同时优化了空子图执行流程,整体上提升控制流场景执行性能。
AirNet网络优化前后子图数量与执行性能对比
昇思MindSpore Graph Learning:公式即代码,训练加速3到4倍
图数据能自然表达真实世界对象之间的关系,表征能力和可解释性强,图关系大都错综复杂,数据规模较大,通常有数十亿点,数百亿边,点边类型有几百种,图神经网络计算更加复杂耗时,因此迫切需要高效的图神经网络系统。同时,GNN算法的快速发展,需要易用的系统允许自由扩展。 [17]
昇思MindSpore Graph Learning是由James Cheng课题组、华为昇思MindSpore团队联合研发的图学习框架,具有高效性、易用性等特点。
昇思MindSpore Graph Learning
高性能可扩展的强化学习计算框架:昇思MindSpore Reinforcement
昇思MindSpore全场景AI框架 1.6版本推出了独立的强化学习计算框架昇思MindSpore Reinforcement,通过框架中的Python 编程API以及算法与执行分离的设计使其具有易编程,可扩展等特点,期望带给用户一个全新的开发体验。 [17]
高性能可扩展的强化学习计算框架
自定义算子能力全面升级,统一Custom接口帮助用户高效添加算子
昇思MindSpore全场景AI框架1.6版本升级了自定义算子的能力,提供支撑包括Ascend,GPU和CPU在内的多平台的统一算子开发接口Custom,帮助用户在昇思MindSpore全场景AI框架方便快捷地进行不同类型自定义算子的定义和使用,可以满足包括快速验证,实时编译和第三方算子接入等不同场景下的用户需求。
MindQuantum:快速上手量子模拟与量子机器学习
MindQuantum 最新0.5版本中提供独立的量子模拟模块Simulator,用户可快速对自定义量子线路进行模拟演化并对量子态进行采样,在MindQuantum环境中设计和验证自己的量子算法。 [17]
新增模拟器模块及其线路采样功能演示如下:
新增模拟器模块及其线路采样功能演示
v1.7.0
提供易用灵活的numpy模块,加速昇思MindSpore +科学计算
mindspore.numpy模块包含一套完整的符合Numpy规范的接口,开发者可以使用Numpy的原生语法表达昇思MindSpore的模型,同时拥有昇思MindSpore的加速能力。 [18]
mindspore.numpy, 不止是numpy的加速平替,更是构建神经网络的极简编程工具。numpy的大多数常用接口也是神经网络构建中必不可少的,在构造模型时,开发者不再需要每次实例化算子后调用,而可以选择使用mindspore.numpy中的接口,完成想要的功能。
支持数据处理自适应调优,充分发挥数据处理性能
昇思MindSpore1.7版本提供了一种数据处理自动调优的工具——Dataset AutoTune。在训练过程中,此工具可以帮助用户根据系统环境资源的情况自动调整MindSpore Data数据处理管道的并行度和内存使用度,利用当前系统资源加快数据处理管道的处理速度。 [18]
Dataset AutoTune
MindSpore Quantum:支持含噪声量子模拟器和量子线路的SVG绘制模式
在昇思MindSpore1.7版本中,引入了噪声模拟功能,只用在量子线路中引入不同的噪声信道就能完成含噪量子模拟,从而使自己的模型更接近与真实情形,这些噪声信道包含泡利信道、比特翻转信道、相位反转信道等。 [18]
还支持在Jupiter notebook中展示量子线路的svg格式图片,可以直观地了解线路的构成并方便传播自己的量子算法。
量子线路的SVG格式图片
左图是构建一个贝尔态的量子线路,由于误差的存在,右上图为该量子线路的SVG格式图片,右下图为量子线路采样结果图片。
v1.8.0
高性能的大模型训练套件
Transformer已经广泛地应用在深度学习的各个领域,为了结合昇思的并行能力和高性能优化特性,让开发者能够轻松上手Transformer类网络训练,专门提供的MindSpore Transformer是一个开源的Transformer类网络训练和推理套件。
多维度混合并行,包含优化器并行、多副本并行等技术。通过优化数据并行维度上的冗余参数和通信计算并发,可有效提升网络的训练性能。图算融合优化:昇思的图算融合功能可以自动实现算子融合和编译优化,提升模型的内存效率和训练速度。在MindSpore Transformer的所有模型和数据/模型并行模式下,图算融合均已大范围应用并取得了显著效果。 [19]
推荐网络训练套件
推荐系统中部署了多种点击率(CTR)模型,为提高推荐点击率,需要对深度CTR模型进行高效的训练,推荐网络的训练性能是模型实时性的重要因素之一。昇思MindSpore 1.8版本在套件中提供了主流推荐网络模型(如Wide&Deep)端到端的训练流程,包括数据集预处理、模型训练、Benchmark等,为开发者提供了一站式的推荐大模型训练能力。 [19]
大模型训练架构
MindSpore Data统一图像处理类接口
提升接口API易用性。昇思MindSpore1.8版本中,MindSpore Data模块对于图像类数据预处理操作进行重新设计及改造,从原有的c_transforms和py_transforms两种类型操作合并为transforms统一接口,同时对其中包含的各类数据处理算子进行归一合并,减少开发者混用算子的转换操作。 [19]
数据处理接口统一
支持网络的常量输入可变
昇思MindSpore1.8版本新增了mutable接口去设置网络的常量输入为“可变的”,也就是把这个输入当做像Tensor一样的变量,从而可以对其求梯度以及防止网络被重复编译。 [19]
v1.9.0
函数式+面向对象融合编程,提升易用性
昇思MindSpore1.9版本采用了融合编程的形式,结合函数式和面向对象编程范式的优势,既可以保留面向对象编程的易用性和较低的学习成本,又可以引入函数式编程的数学表达优势,同时避免纯函数式编程陡峭的学习曲线。 [20]
分布式表格数据分析框架
MindPandas是一款兼容Pandas接口,同时提供分布式处理能力的数据分析平台,致力于提供高性能、大数据量的处理能力,又能与训练无缝结合,使得昇思MindSpore支持完整AI模型训练全流程的能力。
MindPandas通过将表格数据切分,实现了不同切片数据的并行计算,以充分发挥多核的CPU算力,从而实现计算性能的倍数提升;切分细节用户无需感知,简化了用户的使用。下图以DataFrame.sum接口为例,描述了该接口并行计算的过程。 [20]
sum接口并行计算流程图
MindPandas的计算结果无需落盘,通过共享内存,即可将数据以统一的格式直接提供给MindSpore进行训练。
AI大规模训练性能可视化模块
计算图中所有的通信算子被抽出至画布顶层。计算图中同时展示了并行策略信息。用户能够清晰地观察并行策略相关算子及计算图的执行序,从而确认通信算子存在的合理性。 [20]
盘古模型并行训练策略分析
将性能数据与计算图并行策略相结合,提供包含集群层次、卡层次、算子层次等多层次分析的性能可视分析链路,能够帮助用户发现大模型并行训练过程中的常见异常、理解并行训练执行过程。 [20]
v2.0.0
在MindSpore2.0版本中支持多维混合自动并行能力,提供大模型套件支持一站式训练和训推。提供了大量开箱即用的模型套件,且支持动静统一,同时打造AI+科学计算领域套件,助力技术创新等。 [21]
原生支持大模型
昇思MindSpore已支持数据并行、模型并行、MoE并行、流水线并行、优化器并行、异构训练等多种并行方式,可以原生实现大模型训练。基于昇思MindSpore,新增支持LLaMA、Bloom、GLM、GPT等百亿大模型。 [21]
支持全场景统一推理,提高部署效率和推理能力
  1. 1.
    多后端归一:一个发布包支持Ascend/GPU/CPU,简化部署成本;
  2. 2.
    MindIR原生支持MindSpore训练后模型可直接使用MindIR推理; [21]
  3. 3.
    模型格式统一支持三方生态(TF、ONNX、Caffe)导出MindIR,实现推理格式归一; [21]
  4. 4.
    优化策略多样化支持算子融合、常量折叠、格式转换、冗余算子消除等推理优化策略以及支持AVX512等高级指令优化算子,提升模型推理性能; [21]
  5. 5.
    大模型优化针对主流的Transformer大型网络进行深度融合优化,减少模型内存占用,提升推理性能。 [21]
MindSpore RLHF:助力用户实现自己的大模型
MindSpore RLHF利用框架具备的大模型并行训练、推理、部署等能力,助力用户训练及部署百亿级大模型的RLHF(Reinforcement Learning from Human Feedback,基于人工反馈的强化学习)算法。
MindSpore RLHF包含算法所需的三个阶段的学习流程:预训练模型训练、奖励模型训练和强化学习训练。通过集成MindSpore Transformers中的模型库,提供了Pangu-Alpha(2.6B, 13B)、GPT-2、LLAMA、BLOOM等基础模型的微调流程,同时继承MindSpore的并行接口,支持部署不同规模的大模型到训练集群上。
开发套件集成接口和算法模型
昇思MindSpore联合中科大、西交、西电等高校打造了CV、NLP、Audio、OCR、YOLO等领域的AI套件,集成了主流的算法模型,统一了接口模块、降低了学习开发成本。
MindSpore Dev Toolkit
MindSpore Dev Toolkit是MindSpore的开发插件,支持在IDE中搜索API映射关系基础上,为了进一步提高模型迁移效率,提供了API映射扫描功能,一键获得代码中所有可直接映射成MindSpore API的PyTorch API,并支持API文档浏览。 [21]
动态图模式功能增强,静态图模式支持返回基础数据类型
2.0版本开始,昇思MindSpore默认为动态图模式。在动态图模式下,框架通过多级流水加速算子下发,提升了动态图模式下的网络性能。动态shape场景下优化了自动微分实现,使能CANN的免编译算子能力,降低了反向图构建和算子编译开销,当前已支持语音类、推荐类、CV类网络等各类型动态shape网络编程,性能基本可用,后续将持续进行优化。 [21]
同时,针对静态图模式下无法很好地支持Tensor、tuple类型外的数据类型,通过Fallback方式实现语法支持扩展,提供顶层图支持返回list,dict,scalar,none等基础类型的表达能力,从而提升Python语法兼容能力。
MindSpore Flow
基于昇思MindSpore开发的AI流体仿真工具包MindSpore Flow,提供基于物理驱动、数据驱动和数据机理融合驱动的AI流体仿真技术以及端到端可微分CFD求解器,提供流体领域案例14个,网络模型8个,挖掘神经网络拟合能力,旨在构建高效、高精度的AI流场模拟工具,加速模型开发,满足相关科研工程需求。 [21]
MindSpore Elec
MindSpore Elec电磁仿真套件升级至0.2版本,新增了两个特性。分别是实现了“金陵.电磁脑”阵列天线的AI电磁仿真基础模型;联合华为诺亚方舟实验室实现了端到端可微的电磁求解器(AD_FDTD,Automatic Differentiation Finite-Difference Time-Domain)。 [21]
v2.2.0
昇思MindSpore2.2版本持续提升大模型相关能力,包含提供Lazy inline模式提高大模型编译效率、大模型开发套件MindSpore Transformers。在生成式领域发布套件MindSpore One集成接口和算法模型,在科学智能领域发布AI4Science高频模型套件MindSpore SciAI和地球科学套件MindSpore Earth。 [22]
Lazy inline
在神经网络模型的流水线并行场景下,对于被重复多次调用的计算单元,传统编译过程会将层级的代码表达inline成一张扁平图,Lazy inline模式则不执行inline或只在执行前的最后阶段inline,从而显著降低了图的规模,实现了编译性能的提升。 [22]
MindSpore Transformers
MindSpore Transformers的目标是构建一个大模型生命周期内,训练、微调、评估、推理、部署的全流程的开发套件,覆盖CV、NLP、AIGC等领域,支持预训练大模型,支持AICC计算中心大规模集群训练部署,支持昇思MindSpore多维存储优化和多维混合分布式并行配置化开发方式。 [22]
MindSpore SciAI
MindSpore SciAI是基于昇思MindSpore打造的AI4Science高频模型套件,内置了高频SOTA模型;提供了高阶API,方便开发者和用户使用。 MindSpore SciAI为开发者和用户提供了AI4Science通用计算平台。 [22]
MindSpore Earth
昇思MindSpore发布了MindSpore Earth地球科学套件0.1版本。该套件集成了多时空尺度下的AI气象预报SOTA模型,提供了数据前处理、预报可视化等工具,并集成了ERA5再分析、雷达回波、高分辨率DEM数据集,致力于AI+气象和海洋预报的融合研究。 [22]