> Source: MindSpore
华为宣布其TensorFlow和PyTorch风格的MindSpore深度学习中间件现已开源。 在这篇文章中发现其最相关的特征。
华为刚刚宣布,其用于人工智能应用程序开发的MindSpore框架已开源,可在GiHub和Gitee上使用。 MindSpore是另一个用于训练神经网络模型的深度学习框架,类似于旨在从Edge到Cloud使用的TensorFlow或PyTorch,它同时支持GPU和明显的华为Ascend处理器。
去年8月,当华为宣布正式推出其Ascend处理器时,首次引入了MindSpore。 比使用TensorFlow的其他主流培训卡更能训练AI模型。"
的确,近年来出现了许多框架,也许MindSpore只是与TensorFlow(由Google支持)和PyTorch(由Facebook支持)甚至可以远程竞争的众多框架之一。 但是几天前我读到这个新内容时,MindSpore变得开源了,就像我2015年11月第一次阅读TensorFlow一样,我的身体也洋溢着激动。 就像那时一样,我不能说什么,但是有件事告诉我,MindSpore可能会成为不一致的第三方。
这就是为什么在这个复活节周末,我们所有人都处于同样的境地,#StayAtHome,我现在开始更加深入地研究这个框架了。 可用的技术文档仍然非常稀缺,杂乱无章且有许多错误,但这并不能阻止我对它们的建议有所了解。 下面我与大家分享我的第一个发现。
系统架构
MindSpore网站描述了该框架由三个主要层构成:前端表达式,图形引擎和后端运行时。 下图显示了一个可视方案:
> Source: MindSpore
MindSpore的第一层为程序员提供了Python API。 由于我们社区中的通用语言实际上是Python,因此不可能做到这一点,因此MindSpore希望与PyTorch和TensorFlow竞争。 使用此API,程序员可以管理模型(训练,推理等)并处理数据。 该第一层还包括对代码中间表示(MindSpore IR)的支持,该中间表示将基于可以在并行化和自动微分(GHLO)中执行的许多优化。
下面是Graph Engine层,提供了必要的功能来创建和执行执行图的自动区分。 我可以在网站上阅读到,他们使用MindSpore选择了不同于PyTorch(创建动态执行图)或TensorFlow(虽然最初采用了创建更高效的静态执行图的选项)的自动差异化模型,但目前 提供动态执行图的选项,并使用其低级API的@ 装饰器允许使用静态图版本。 MindSpore选项包括将原始代码转换为中间代码格式(MindSpore IR),以便可以利用这两种模型(更多详细信息,请参见MindSpore网站上的"自动区分"部分)。 我没有检查过GiHub代码,也没有能够评估该代码,但是看来他们提出的方法很有意义。
MindSpore安装和我的第一个神经网络
当出现一个新框架时,通常会发生这种情况,安装部分中的信息非常匮乏,因为没有适用于所有平台的二进制代码,因此您必须动手等待解决方案出现在GitHub / Gitee的Issues部分中。 就我而言,在MacBook Pro(Intel Core i7)上,我可以按照Gitee上此问题网页上的说明,在他们的Docker Hub上安装他们提供的docker。
有了这个泊坞窗,花了一点时间,我就能够使用MindSpore API对我的第一个神经网络进行编程。 具体来说,LeNet基于MindSpore教程提供的代码示例对MNIST数字进行分类。 在后续文章中,我将更详细地介绍此代码,以表明MindSpore API实际上是从TensorFlow的PyTorch API和Keras API借用了很多语法。 因此,对于在神经网络编程中活跃的任何人来说,使用这个新的API都很容易上手。
支持训练过程的可视化
根据MindSpore教程,虽然无法安装和使用它们,但它们具有MindInsight来生成可视化效果,这在某种程度上让人联想到TensorFlow的TensorBoard。 看看他们在其网站上显示的一些屏幕截图:
> Source: MindSpore
> Source: MindSpore
根据手册,MindSpore当前在训练过程中使用回调机制(使人联想到Keras的工作方式)来记录(在日志文件中)我们想要的模型的所有这些参数和超参数以及图形 神经网络到中间代码的编译完成时的计算。
平行性
由于安装了具有单个CPU(通过docker)的MindSpore版本,因此我无法测试其执行的并行化,并且目前在其网站上有关此主题的信息很少。
目前,我可以在他们的教程中提及他们讨论了两种并行化模式(DATA_PARALLEL和AUTO_PARALLEL),并给出了一个代码示例,该示例使用Asifend 910处理器的CIFAR数据集训练ResNet-50(我无法验证) )。 我可以想象到DATA_PARALLEL是指通常称为数据并行性的策略,该策略包括将训练数据分为几个子集,每个子集在同一模型副本中执行,但在不同的处理单元中执行。
据我所知,Graph Engine层支持是为代码的并行化提供的,尤其是为AUTO_PARALLEL并行性提供的。 AUTO_PARALLEL模式通过将数据并行化并行化策略(如上所述)与模型并行化策略相结合来自动优化并行化,其中模型被划分为不同的部分,并且每个部分在不同的处理单元中并行执行。 这种自动模式选择了提供最大收益的并行化策略,可以在MindSpore网站的"自动并行"部分中进行阅读(尽管它们没有详细说明评估和决策的方式)。
为了扩展文档并了解有关自动并行化策略的更多详细信息,我们将不得不等待给技术团队提供时间。 但是很明显,这种自动并行化策略至关重要,这是它们必须且可以与TensorFlow或PyTorch竞争的地方,使用华为处理器可以获得明显更高的性能。
计划的路线图以及如何做出贡献
显然,有很多工作要做,目前,他们已在此页面上共享的广泛路线图中确定了他们明年的想法,但他们声称优先级将根据用户进行调整 反馈。 目前,我们可以找到以下主要内容:
· 支持更多模型(待定经典模型,GAN,RNN,变形金刚,强化学习模型,概率编程,AutoML等)。
· 扩展API和库以提高可用性和编程经验(更多的运算符,更多的优化器,更多的损失函数等)
· 全面支持华为Ascend处理器并优化其性能(优化编译,改善资源使用等)
· 软件堆栈的演化和对计算图的优化(提高中间表示IR,增加更多的优化机会,等等)。
· 支持更多的编程语言(不仅限于Python)。
· 通过优化自动调度,数据分发等来改进分布式培训。
· 改进MindInsight工具,使程序员在训练过程中更容易"调试"并改善超参数的调整。
· 在Edge中的设备中提供推理环境的功能方面的进步(安全性,通过ONNX标准的其他框架的支持模型等)
在"社区"页面上,您可以看到MindSpore在华为和中国以外还有合作伙伴,例如爱丁堡大学,伦敦帝国理工学院,明斯特大学(德国)或巴黎萨克莱大学。 他们说他们将遵循一个开放的治理模型,并邀请整个社区在代码和文档中做出贡献。
结论
乍看之下,设计和实现决策(例如并行性和自动区分)似乎是正确的,它可以增加机会以允许进行改进和优化,从而获得比他们想要击败的框架更好的性能。 但是要赶上PyTorch和TensorFlow仍有大量工作要做,最重要的是要在周围创建社区,这并不容易! 但是,我们已经知道,在像华为这样的行业大公司的支持下,一切皆有可能,或者三年前PyTorch(Facebook)的第一个版本问世时,一切都可能即将结束。 TensorFlow(Google)的追随者?
我希望这篇文章对您有所帮助,至少我发现撰写这篇文章非常有趣。 在下一篇文章中见,我将告诉您有关如何在MindSpore中编程第一个神经网络的更多详细信息。 由于我们处于#StayAtHome情况,因此很有趣。
(本文翻译自Jordi TORRES.AI的文章《Huawei's MindSpore: A new competitor for TensorFlow and PyTorch?》,参考:)