Apache MXNet - 简介


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

什么是 MXNet?

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

这就是 Apache MXNet 受到以下支持的原因:

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

  • 公共云提供商,包括 Amazon Web Services (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 的优化数值计算

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

  • 常见工作流程的自动化,借助它可以简单地表达标准神经网络。

语言绑定

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

  • 斯卡拉

  • 朱莉娅

  • 克洛尤尔

  • 爪哇

  • C/C++

  • 珀尔

我们不需要学习任何新的编程语言,而是 MXNet 与混合功能相结合,允许从 Python 异常平滑地过渡到我们选择的编程语言的部署。

最新版本MXNet 1.6.0

Apache 软件基金会 (ASF) 于 2020 年 2 月 21 日在 Apache License 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 的改进

  • 对符号 API 的改进

  • 修复了 100 多个错误