Apache Mxnet 简明教程

Apache MXNet - Introduction

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

What is MXNet?

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

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

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

  2. 包括亚马逊网络服务 (AWS) 和 Microsoft Azure 在内的公共云提供商

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

Why Apache MXNet?

当时,已经存在各种深度学习平台,如 Torch7、Caffe、Theano、TensorFlow、Keras、Microsoft Cognitive Toolkit 等,您可能想知道为什么选择 Apache MXNet?我们来了解一下背后的原因:

  1. Apache MXNet 解决了一个现有的深度学习平台中最大的问题。问题在于,为了使用深度学习平台,人们必须学习另一个系统以采用不同的编程风格。

  2. 借助 Apache MXNet,开发人员可以充分利用 GPU 和云计算的能力。

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

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

Various Features

如果您正在寻找一个灵活的深度学习库来快速开发前沿的深度学习研究,或者一个强大的平台来推动生产工作负载,那么 Apache MXNet 就是您搜索之旅的终点。这是因为它具有以下特点:

Distributed Training

无论是在具有近似线性缩放效率的多 GPU 或多主机训练中,Apache MXNet 都允许开发人员最大程度地利用其硬件。MXNet 也支持与 Horovod 集成,Horovod 是优步创建的一个开源分布式深度学习框架。

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

  1. horovod.broadcast()

  2. horovod.allgather()

  3. horovod.allgather()

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

  1. Device Placement −借助 MXNet,我们可以轻松指定每个数据结构 (DS)。

  2. Automatic Differentiation −Apache MXNet 自动完成微分,即衍生计算。

  3. Multi-GPU training − MXNet 允许我们通过可用 GPU 数量来实现扩展效率。

  4. Optimized Predefined Layers − 我们还可以在 MXNet 中对我们自己的层进行编码,以及针对速度对预定义层进行优化。

Hybridization

Apache MXNet 为其用户提供了混合前端。在 Gluon Python API 的帮助下,它可以弥合理命令和符号功能之间的差距。可以通过调用其混合功能来完成。

Faster Computation

线性运算(如几十个或几百个矩阵乘法)是深度神经网络的计算瓶颈。为了解决这个瓶颈问题,MXNet 提供了:

  1. 针对 GPU 的优化数值计算

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

  3. 通过自动执行常见工作流来帮助简要表达标准 NN。

Language Bindings

MXNet 与 Python 和 R 等高级语言深度集成。它还为其他编程语言(如以下语言)提供支持:

  1. Scala

  2. Julia

  3. Clojure

  4. Java

  5. C/C++

  6. Perl

我们无需学习任何新的编程语言,而且 MXNet 与混合特性相结合,可以非常流畅地从 Python 过渡到我们选择的编程语言的部署。

Latest version MXNet 1.6.0

Apache Software Foundation (ASF) 已于 2020 年 2 月 21 日根据 Apache License 2.0 发布了 Apache MXNet 的稳定版本 1.6.0。这是支持 Python 2 的最后一个 MXNet 版本,因为 MXNet 社区投票决定在以后的版本中不再支持 Python 2。让我们了解一下此版本为其用户带来的一些新特性。

NumPy-Compatible interface

NumPy 由于其灵活性与普遍性,已得到机器学习从业者、科学家和学生们的广泛使用。但我们知道,如今像图形处理单元 (GPU) 这样的硬件加速器已逐渐集成到各种机器学习 (ML) 工具包中,为了利用 GPU 的速度,NumPy 用户需要切换到具有不同语法的框架。

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

Integration with Apache TVM

Apache TVM 是一个针对 CPU、GPU 和专用加速器等硬件后端的开源端到端深度学习编译器堆栈,其目标是填补以生产力为重点的深度学习框架和面向性能的硬件后端之间的空白。借助最新版本 MXNet 1.6.0,用户可以利用 Apache(incubating) TVM 在 Python 编程语言中实现高性能操作内核。这项新功能的两个主要优点包括:

  1. 简化了以往基于 C++ 的开发流程。

  2. 可以在多个硬件后端(如 CPU、GPU 等)之间共享相同的实现。

Improvements on existing features

除了上述 MXNet 1.6.0 的特性外,它还对现有特性进行了一些改进。改进内容如下:

Grouping element-wise operation for GPU

正如我们所知,逐元素运算的性能取决于内存带宽,因此,链接此类运算可能会降低整体性能。Apache MXNet 1.6.0 实现了逐元素运算融合,这实际上会按需生成即时融合运算。此类逐元素运算融合还能减少存储需求并提高整体性能。

Simplifying common expressions

MXNet 1.6.0 消除冗余表达式,并简化通用表达式。这种增强还有利于提高内存使用情况和全部执行时间。

Optimizations

MXNet 1.6.0 还对现有特性和操作符提供多种优化,如下所示:

  1. Automatic Mixed Precision

  2. Gluon Fit API

  3. MKL-DNN

  4. Large tensor Support

  5. TensorRT integration

  6. Higher-order gradient support

  7. Operators

  8. Operator performance profiler

  9. ONNX import/export

  10. Improvements to Gluon APIs

  11. Improvements to Symbol APIs

  12. 超过 100 个错误修复