为科学创新插上模型翅膀,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操作系统」,它也就成为我们生活的一部分。

  举报/反馈