Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

作者

为科学创新插上模型的翅膀,MindSpore 「昇思」正在探索框架的未来

全新的 MindSpore 1.5 来啦,这次它有了中文名:昇思。从 8 卡训练 600 亿参数模型,到发布电磁仿真、药物分子模拟等科学计算套件 MindScience,这次,昇思 MindSpore正探索深度学习框架的未来。

从去年 3 月份正式开源,现在经过 1 年半的完善、众多社区小伙伴提交的代码改进,MindSpore 也已步入成熟。那么我们对它的印象是什么样的呢?是好用的自动微分机制,还是超便捷的全自动并行训练,亦或是具有很强可读性的模型代码?


现在,MindSpore 正式推出 1.5 版本,并发布了中文名:昇思。


小伙伴们可别以为这只是常规的一次版本号升级,新版本继续在自动分布式训练上给出新的成绩, 32 块卡就能训练 2420 亿参数量的模型(稀疏模型),在这之前可是做不到的。


昇思 MindSpore 也首次探索将科学计算与深度学习结合,将数值计算与深度学习相结合,推出了MindScience。利用 DL 框架支持电磁仿真、药物分子仿真等等,我们看到的就是未来的科研吧。


当然,MindSpore 1.5 还有很多特性,例如大规模分布式训练的集群调优、完善控制流的使用等等。但我们在这篇文章中,将重点关注昇思 MindSpore在科学计算及并行训练上的新突破。


MindSpore 1.5 新特性:

https://gitee.com/mindspore/mindspore/tree/r1.5


昇思MindSpore:计算与模型的艺术


我们在看到「昇思」这个名字时,首先眼前浮现的是代表着「思」的深度学习模型,它们强大的能力确实已经慢慢接近「深度思考」这一范畴了。其次是「昇」,它也许代表的昇腾硬件平台,代表着最强大的计算力。这样一来,模型加算力,的确就是深度学习框架最关心的东西了。


确实早一段时间发布的两千亿参数大模型鹏程.盘古 ,就已经体现出了 昇思 MindSpore那种模型与计算相结合的艺术。它在训练过程中能自动将模型切分到不同的设备,并高效地利用两千多张计算设备完成并行训练。


在 MindSpore 1.5 中,同样有很多特性体现了这种艺术。


当昇思将计算与模型作为基础设施,这一艺术就又能催生出科学计算方面的新能力,为电磁仿真、药物分子设计等科学研发提供最强大的基础能力。


当我们拥有强大的混合专家模型(MoE)时,沿着这种思路,MindSpore 1.5 推出了 MoE 的专属并行训练方法,充分利用异构硬件,8 卡就能训练六百多亿参数量的模型。

 

未来:为科学创新插上模型的翅膀


科学创新,在于发掘现象背后的原理,而自然现象、社会现象本质上是一系列数据。例如万有引力定理,研究者通过大量实验和观察发现引力与质量成正比,与物体距离的平方成反比。寻找数据的内在关系,这可不就是机器学习模型最擅长的么?


深度学习框架的核心,自动微分已经比较完善了,而 昇思MindSpore在大规模,多种设备的训练上又有独特的优势。这两部分基础设施能为科学研究提供更大的助力,因此作为框架未来的发展方向之一,昇思 MindSpore 将重心放在科学计算领域 。


昇思 MindSpore团队计划面向 8 大科学计算行业打造 MindScience 系列套件。这些行业套件包含业界领先的数据集、基础模型、预置高精度模型和前后处理工具,加速科学行业应用开发。 



当前,昇思 MindSpore团队推出面向电子信息行业的 MindElec 套件和面向生命科学行业的 MindSPONGE 套件,分别实现了电磁仿真性能提升 10 倍和生物制药化合物模拟效率提升 50%。 



  • MindElec v0.1:将 CAD结构转化为张量,并通过电磁仿真AI 模型进行训练,以实现电磁仿真能力; 

  • MindSPONGE v0.1:第一个根植于 AI 计算框架的分子模拟工具,当前已内置 Molecular CT、SchNet 等模型,可高效进行分子动力学模拟; 


科学仿真用上 AI 框架及模型,最明显的效果就是性能上的提升。MindElec v0.1 在手机电磁仿真领域已取得技术突破,仿真精度媲美传统科学计算软件,同时性能提升 10 倍。


抗生素的出现让人类的寿命延长了数十年,然而,由于细菌的耐药性变强,人类迫切需要寻找到下一代抗生素——抗菌肽(作为一种可以有效杀灭耐药性病原菌的肽类物质)。鹏城实验室基于昇思 MindSpore 开发的鹏程.神农平台,具有强大的氨基酸序列生成能力,其利用鹏程.盘古大模型完成预训练再通过 finetune 生成新的氨基酸序列,有望极大提升新型抗菌肽的发现速度。



推出亲和算法库——MindSpore Boost


众所周知,训练是一个复杂的计算过程,端到端训练包含很多步骤。如下图所示,深度学习训练过程本身是个高冗余的计算过程,需要围绕多个模块分别进行计算优化,最终实现不同AI场景下端到端训练的效率优化。

端到端训练要素


在MindSpore 1.5版本中,华为中央媒体技术院与MindSpore共同推出亲和算法库MindSpore Boost 1.0,目标都是为了在不同的AI场景下,保持用户训练精度的同时,为用户提供高效的训练体验,包含数据、网络、通信、训练策略和优化器等维度的加速算法,架构图如下所示。

MindSpore Boost 1.0架构


除了亲和算法外,我们还提供简易模式,进行算法封装,为用户提供三种不同层级的选择,即O1/O2/O3,随着层级的递增,其加速比例增加,这种模式下,用户无需了解算法细节,仅需要在调用Model的训练入口时,打开加速开关和选择加速层级即可,使用方法如下图所示。

简易模式使用示意


当 AI 基础设施已经完善到一定程度,需要大量计算力、需要处理大量数据的科学创新理应能利用上这些资源。未来,不应该只有深度学习模型能利用上这些便利,传统科学计算、数值计算领域的创新同样需要它们,而MindScience 正是迈出这一步的关键。


也许以后在MindScience这样科学套件的帮助下,人类探索真理,追求真实的脚步会越来越快,也就需要更大的计算力,更快的并行速度,以及更强的模型能力。

32 卡跑 2 千亿参数模型
国产框架是专业的

很多算法工程师在复现论文或者模型时,可能最开始会考虑 TensorFlow 或者 PyTorch 这样的框架。然而当我们验证了模型效果,确定要用在产品上时,通常需要扩大模型的参数量与数据量,并期待能获得更好的效果。

然而很多模型,尤其是自然语言处理领域的模型,大到上亿参数量后,就需要很多工程来获得更好的分布式训练效果。实际上,TensorFlow 和 PyTorch 本身只支持简单的数据并行,它们是满足不了大模型的。而像 Mesh、Lingvo这样的官方并行训练库,小编认为它们还是挺难用的,需要不少的开发、适配工作。

国内的深度学习框架在这一点上就做得特别好,如昇思 MindSpore,之前在训练 2000亿参数量的鹏程.盘古大模型时,就采用了框架自带的自动分布式训练策略。也就是说,除了简单的数据并行,模型算子并行、优化器并行、Pipeline并行、中间结果重计算都在 昇思 MindSpore的考虑范围内。

上图是简化版的盘古脚本,其中红色加粗字体表示的在 昇思 MindSpore中的并行策略。将红色加粗字体去掉,则是单机脚本。

这些并行优化全都由昇思 MindSpore自行完成,这可会节省很大一笔功夫,远比 PyTorch或 TensorFlow实现大规模分布式训练简单得多。昇思MindSpore并没有满足于自动并行策略,在最近发布的 1.5 中,又新增了多种并行调优,训练起来更方便。

模型:MoE 专属并行

Transformer 目前已经成为了深度学习模型的基础组件,之前加大模型的思路就是,在基础组件上单纯地增加模型层数与隐藏层宽度,并期待模型在训练中能充分利用所有参数。但是混合专家模型(Mixture of Expert,MoE)提出了另一种解决思路,即模型中每一个专家独立地去处理数据,并最后一起统筹结果。

MoE 已被验证过在多种任务上有优异的效果,是超大规模模型的基础结构。

如下图所示,Transformer 中每层是由Multi-Head Attention 和 FeedForward(FFN) 这两个基础结构组成的。将 FFN 看做是一个专家(expert),MoE 结构是由多个专家并行组成,并由路由(router)负责将信息分发给各个专家,最后对各个专家的输出进行加权和获得最终结果。


其中比较关键的是路由策略,一般我们可以让模型学会分发到最能处理这类信息的单个专家或者多个专家。但也正是这种路由策略,常规的并行策略并不好处理。

MindSpore1.5已实现了 MoE 的结构和专家并行的功能,允许多专家在多设备上并行执行。如下 Router 经过 AllToAll 算子将 需要计算的信息分配到各个设备上的专家进行计算,而后,又通过 AllToAll 汇聚计算后的结果。


硬件:NPU/GPU/CPU异构并行

一般我们的 GPU/NPU 内存都不会特别大,单块 64GB 已经算是非常大了。但是服务器的CPU内存可以特别大,TB 这样的量级都能上得去。所以如果在并行训练中能利用这些资源,做异构的计算,那么不妨为扩展大模型的一种可行途径。

在 MindSpore1.5 中,异构并行会分析计算图上算子内存占用的大小和计算密集的程度,将内存消耗巨大且适合 CPU 处理的算子切分到 CPU 子图,将内存消耗较小且计算密集的算子切分到GPU/NPU子图。

昇思 MindSpore通过协调不同子图进行训练,能够充分利用异构硬件特点, 有效的提升单卡可训练模型规模。只有这样充分利用服务器的硬件资源,才能尽可能训练大的模型。


对于大规模预训练模型,其主要的瓶颈往往在于参数量过大,设备显存无法存放下来。Mindspore1.5 版本在处理大规模预训练网络时,可以通过优化器异构将优化器指定到 CPU 上,以减少优化器状态量显存占用开销,进而扩展可训练模型规模。如下图所示,将 FP32 的 Adam 优化器放置于CPU 上进行运算,可以减少 60%多的参数显存占用。


实验:几张卡也能训练超大模型

MindSpore团队使用 MoE 结构扩展鹏程.盘古模型,同时应用了上述两种技术。如下图所示,优化器相关的状态及其计算放到 CPU 端,而模型计算相关的过程都放到了 Device(GPU 或 NPU)中。

此外,因为MoE的专属并行方式,第一个专家 FFN1 放到了第一台服务器,第二个专家 FFN2放到了第二台服务器,两个专家之间的「交流」就通过 AllToAll 算子完成。此外,因为 FFN 里面的矩阵乘法特别大,那么也可以通过模型并行将矩阵乘法算子切分为两部分,并分别放到各服务器上的不同 GPU/NPU中。


昇思 MindSpore开发者分别在 8 卡、16 卡、32 卡上验证了优化器异构和专家并行对训练模型规模提升的效果。

如下图所示,使用优化器异构基本都能达到 3 倍的模型规模提升,在 8 卡上可以跑得动612 亿参数量的模型,16 卡上可以跑到 1210 亿参数量,32卡上可以跑到 2420 亿 参数量的模型规模。


为模型打造最合适的计算策略,为计算赋予最强大的模型能力,便是计算与模型相结合的艺术。

在我们看来,这正是「昇思」二字的含义,「昇」代表着昇腾硬件平台的计算力,「思」代表着深度学习模型拟合、思考的能力。当两者像艺术一般相结合,就能为生产、科研提供最坚实的基础。

昇思 MindSpore 在 1.5 中已经将这种框架的逻辑贯彻到底,当昇思拥有了这些基础设施后,MindScience这种结合科学计算与深度学习,MindSpore Boost这种更高阶好用的API等等都能极大地提升 AI 开发效率,这也是昇思MindSpore成为人工智能根技术的重要标志之一。

可能多年以后,当AI遍布生活生产的每个角落,MindSpore这样的深度学习框架会成为一种必不可少,且每个人都能用的「AI操作系统」,它也就成为我们生活的一部分。
产业鹏城实验室华为MindSpore
相关数据
华为机构

华为创立于1987年,是全球领先的ICT(信息与通信)基础设施和智能终端提供商。

https://www.huawei.com/cn/
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

参数模型技术

在统计学中,参数模型是可以使用有限数量的参数来描述的分布类型。 这些参数通常被收集在一起以形成单个k维参数矢量θ=(θ1,θ2,...,θk)。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

推荐文章
暂无评论
暂无评论~