Apache MXNet - 简介


本章重点介绍 Apache MXNet 的功能,并讨论此深度学习软件框架的最新版本。

什么是 MXNet?

Apache MXNet 是一个强大的开源深度学习软件框架工具,可帮助开发人员构建、训练和部署深度学习模型。过去几年,从医疗保健到交通运输再到制造业,事实上,在我们日常生活的方方面面,深度学习的影响已经非常广泛。如今,企业纷纷寻求深度学习来解决一些难题,如人脸识别、物体检测、光学字符识别 (OCR)、语音识别和机器翻译。

这就是 Apache MXNet 获得以下企业支持的原因:

  • 一些大公司,如英特尔、百度、微软、Wolfram Research 等。

  • 公共云提供商,包括亚马逊网络服务 (AWS) 和 Microsoft Azure

  • 一些大型研究机构,如卡内基梅隆大学、麻省理工学院、华盛顿大学和香港科技大学。

为什么选择 Apache MXNet?

有各种深度学习平台,如 Torch7、Caffe、Theano、TensorFlow、Keras、Microsoft Cognitive Toolkit 等,那么您可能想知道为什么选择 Apache MXNet?让我们来看看背后的一些原因:

  • Apache MXNet 解决了现有深度学习平台最大的问题之一。问题是,为了使用深度学习平台,人们必须学习另一个系统以获得不同的编程风格。

  • 借助 Apache MXNet,开发人员可以充分利用 GPU 和云计算的全部功能。

  • Apache MXNet 可以加速任何数值计算,并特别强调加快大规模 DNN(深度神经网络)的开发和部署。

  • 它为用户提供了命令式和符号式编程的功能。

各种功能

如果您正在寻找一个灵活的深度学习库来快速开发尖端的深度学习研究或一个强大的平台来推动生产工作负载,您的搜索将在 Apache MXNet 结束。这是因为它具有以下特点:

分布式训练

无论是多 GPU 还是具有近线性扩展效率的多主机训练,Apache MXNet 都允许开发人员充分利用他们的硬件。MXNet 还支持与 Horovod 集成,Horovod 是 Uber 创建的开源分布式深度学习框架。

对于此集成,以下是 Horovod 中定义的一些常见分布式 API:

  • horovod.broadcast()

  • horovod.allgather()

  • horovod.allgather()

在这方面,MXNet 为我们提供了以下功能:

  • 设备放置 −借助 MXNet,我们可以轻松指定每个数据结构 (DS)。

  • 自动微分 − Apache MXNet 自动执行微分,即导数计算。

  • 多 GPU 训练 − MXNet 使我们能够利用可用 GPU 数量实现扩展效率。

  • 优化的预定义层 − 我们可以在 MXNet 中编写自己的层,也可以优化预定义层以提高速度。

混合

Apache MXNet 为用户提供了混合前端。借助 Gluon Python API,它可以弥合其命令式和符号式功能之间的差距。这可以通过调用其混合功能来实现。

更快的计算

数十或数百个矩阵乘法等线性运算是深度神经网络的计算瓶颈。为了解决这一瓶颈,MXNet 提供了 −

  • 针对 GPU 优化的数值计算

  • 针对分布式生态系统优化的数值计算

  • 常见工作流程的自动化,借助此流程可以简要表达标准 NN。

语言绑定

MXNet 与 Python 和 R 等高级语言深度集成。它还支持其他编程语言,例如-

  • Scala

  • Julia

  • Clojure

  • Java

  • C/C++

  • Perl

我们不需要学习任何新的编程语言相反,MXNet 结合混合功能,可以非常顺利地从 Python 过渡到我们选择的编程语言的部署。

最新版本 MXNet 1.6.0

Apache 软件基金会 (ASF) 已于 2020 年 2 月 21 日根据 Apache 许可证 2.0 发布了 Apache MXNet 的稳定版本 1.6.0。这是支持 Python 2 的最后一个 MXNet 版本,因为 MXNet 社区投票决定在以后的版本中不再支持 Python 2。让我们来看看此版本为用户带来的一些新功能。

与 NumPy 兼容的接口

由于其灵活性和通用性,NumPy 已被机器学习从业者、科学家和学生广泛使用。但我们知道,如今的硬件加速器(如图形处理单元 (GPU))已越来越多地融入各种机器学习 (ML) 工具包,NumPy 用户为了利用 GPU 的速度,需要切换到具有不同语法的新框架。

随着 MXNet 1.6.0 的推出,Apache MXNet 正在向与 NumPy 兼容的编程体验迈进。新界面为熟悉 NumPy 语法的从业者提供了同等的可用性和表现力。此外,MXNet 1.6.0 还使现有的 Numpy 系统能够利用 GPU 等硬件加速器来加速大规模计算。

与 Apache TVM 集成

Apache TVM 是一个开源端到端深度学习编译器堆栈,适用于 CPU、GPU 和专用加速器等硬件后端,旨在填补以生产力为中心的深度学习框架与以性能为导向的硬件后端之间的空白。借助最新版本的 MXNet 1.6.0,用户可以利用 Apache(孵化中)TVM 在 Python 编程语言中实现高性能运算符内核。此新功能的两个主要优点如下 −

  • 简化了以前基于 C++ 的开发过程。

  • 允许在多个硬件后端(如 CPU、GPU 等)之间共享相同的实现。

对现有功能的改进

除了上面列出的 MXNet 1.6.0 的功能外,它还对现有功能进行了一些改进。改进如下 −

为 GPU 分组元素操作

众所周知,元素操作的性能是内存带宽,因此,链接此类操作可能会降低整体性能。Apache MXNet 1.6.0 执行元素操作融合,实际上会在可能时生成即时融合操作。这种逐元素操作融合还减少了存储需求并提高了整体性能。

简化常用表达式

MXNet 1.6.0 消除了冗余表达式并简化了常用表达式。这种增强还可以改善内存使用率和总执行时间。

优化

MXNet 1.6.0 还对现有功能和运算符进行了各种优化,具体如下:

  • 自动混合精度

  • Gluon Fit API

  • MKL-DNN

  • 大张量支持

  • TensorRT 集成

  • 高阶梯度支持

  • 运算符

  • 运算符性能分析器

  • ONNX 导入/导出

  • Gluon API 改进

  • Symbol 改进API

  • 修复了 100 多个错误