Apache MXNet

Apache MXNet 是一个灵活且可扩展的深度学习框架,支持多种深度学习模型、编程语言,并且有一个开发接口,因其易用性而受到高度重视。

什么是 Apache MXNet?

MXNet 是开源深度学习框架,允许用户在多种设备(无论是云基础设施还是移动设备)上定义、训练和部署深度神经网络。该框架具备高度可扩展性,可以进行快速的模型训练,并支持灵活的编程模型和多种语言。

利用 MXNet 可以混合符号和命令式编程,以更大限度提升效率和生产力。该框架的核心是动态依赖性调度程序,可自动即时并行处理符号式操作和命令式操作 图形优化层使符号执行速度更快、内存效率更高。

MXNet 库可移植并且规模小巧。它采用 NVIDIA Pascal™ GPU 加速,可以跨多个 GPU 和多个节点进行扩展,从而更快地训练模型。

为何选择 Apache MXNet?

Apache MXNet 提供以下主要特性和优势:

  • 混合前端:命令符号混合 Gluon API 提供了一种简单的方法,无需牺牲训练速度即可对模型进行原型设计、训练和部署。开发者仅需几行 Gluon 代码,就能构建线性回归、CNN 和循环 LSTM 模型,以用于物体检测、语音识别和推荐引擎等。
  • 可扩展性:MXNet 从头开始专为云基础设施设计,采用分布式参数服务器,可以使用多个 GPU 或 CPU 实现近线性扩展。深度学习工作负载可跨多个 GPU 进行分配,实现近线性可扩展性和自动扩展。Amazon Web Services 运行的测试发现,在包含 128 个 GPU 的集群中,MXNet 的性能比使用单个 GPU 快 109 倍。正是由于 MXNet 具有扩展到多个 GPU(跨多个主机)的能力,及其开发速度和可移植性,AWS 才选择 MXNet 作为深度学习框架,而不是 TensorFlow、Theano 和 Torch 等其他选择。
  • 生态系统:MXNet 具有适用于计算机视觉、自然语言处理、时间序列等的工具包和库。
  • 语言:MXNet 支持的语言包括 Python、C++、R、Scala、Julia、Matlab 和 JavaScript。MXNet 还可以编译成 C++,生成一种轻量级神经网络模型表征,可以在各种设备上运行,包括 Raspberry Pi 等低功耗设备和云服务器。

Apache MXNET 的特性。

MXNet 的工作原理是什么?

MXNet(或“mix-net”)由多学术机构联合创建,并在 Apache Software Foundation 培养而成,旨在混合不同编程方法的优势,以进行深度学习模型开发 – 命令式,明确指定了“如何”执行计算,以及声明式或符号式,主要关注应该执行“什么”。

MXNET 融合了不同编程方法的优势。

图像参考:https://www.cs.cmu.edu/~muli/file/mxnet-learning-sys.pdf

命令式编程模式

MXNet 的 NDArray 包含命令式编程,是 MXNet 存储和转换数据的主要工具。NDArray 用于将模型的输入和输出表示为多维阵列并对其进行操作。NDArray 类似于 NumPy 的 ndarray,但它们可以在 GPU 上运行,以加速计算。

命令式编程的优势在于,有程序编程背景的开发者对其很熟悉,所以参数更新和交互式调试更自然。

符号式编程模式

神经网络通过对输入参数应用多层嵌套函数来转换输入数据。每一层由一个线性函数和一个非线性变换组成。深度学习的目标是通过计算相对于损失指标的偏导数(梯度),优化这些参数(包括权重和偏差)。在前向传播中,神经网络接受输入参数,并向下一层的节点输出置信度分数,直至到达输出层,在该层计算分数误差。在一个称为梯度下降的过程中,通过反向传播,错误会再次通过网络发送回来,并调整权重,从而改进模型。

图形是由已连接节点(称为顶点)和边缘组成的数据结构。每个现代深度学习框架都基于图形的概念,其中神经网络表示为计算的图形结构。

MXNet 符号式编程允许通过计算图形抽象地定义函数。借助符号式编程,复杂函数首先采用占位符值表示。然后,可以通过将这些函数绑定到实际值来执行这些函数。符号式编程还提供预定义的神经网络层,允许以更少的重复性工作和更好的性能简单表示大型模型。

符号式编程。

图像参考:https://www.cs.cmu.edu/~muli/file/mxnet-learning-sys.pdf

符号式编程具有以下优势:

  • 计算图形的清晰边界通过后端 MXNet 执行程序提供更多优化机会
  • 更轻松地为神经网络配置指定计算图形

采用 Gluon API 的混合编程模式

MXNet 的主要优势之一是其包含混合编程接口 Gluon,其在保持命令接口和符号接口的功能和优势的同时,弥合了两者之间的差距。Gluon 是一种易于学习的语言,可以生成快速移动模型。借助 Gluon API,您可以使用 NDArray 命令式创建模型。然后,您可以通过混合命令切换到符号模式,加快模型训练和推理速度。在符号模式下,该模型以经优化的图形形式通过后端 MXNet 执行程序以更快速度运行,并且可以轻松导出,用于在不同语言绑定(如 Java 或 C++)中进行推理。

为何 MXNet 在 GPU 上表现更出色

在架构方面,CPU 仅由几个具有大缓存内存的核心组成,一次只可以处理几个软件线程。相比之下,GPU 由数百个核心组成,可以同时处理数千个线程。

CPU 与 GPU 的区别。

由于神经网络由大量相同的神经元构建而成,因此本质上具有高度并行性。这种并行性会自然映射到 GPU,因此相比仅依赖 CPU 的训练,计算速度会大幅提高。因此,GPU 已成为训练基于神经网络的大型复杂系统的首选平台。推理运算的并行性质也使其十分宜于在 GPU 上执行。

借助改进的算法、更大的数据集以及 GPU 加速计算,深度学习神经网络已经成为图像识别、语音识别、语言翻译等众多行业不可或缺的工具。开发 MXNet 的目的是提供强大的工具,帮助开发者充分利用 GPU 和云计算的全部功能。

简而言之,使用 MXNet 训练算法的 GPU 越多,任务完成得就越快。随着更多 GPU 的采用,该框架在可扩展性能方面脱颖而出,速度几乎呈线性提升。MXNet 还可以根据可用 GPU 自动扩展,这是其在性能调节方面的一个加分点。

用例

智能手机应用程序

MXNet 非常适合图像识别,支持在低功耗且内存有限的平台上运行的模型,这一能力使其成为手机部署的最佳选择。采用 MXNet 构建的模型已经被证明可以提供能在笔记本电脑上运行的高可靠图像识别结果。结合本地和云处理器可以在增强现实、物体和场景识别等领域实现强大的分布式应用。

声音和图像识别应用也为残障人士提供了更多有趣的可能性。例如,移动应用程序可以帮助视障人士更好地感知周围的环境,并帮助听障人士将语音对话转换为文本。

自动驾驶汽车

自动驾驶汽车和卡车必须处理大量数据,以做出近乎实时的决策。为支持自动驾驶车辆车队而开发的复杂网络,以前所未有的程度使用分布式处理,来协调从单辆车的制动决策到整个城市的交通管理的所有工作。

TuSimple 正在建立一个自主货运网络,通过地图绘制的路线,实现美国西南部的自主货运,其选择 MXNet 作为其人工智能模型开发的基础平台。该公司正将自动驾驶技术引入一个长期存在司机短缺问题,以及事故、轮班和燃油效率低下导致的高开销问题的行业。

TuSimple 之所以选择 MXNet,是因为其跨平台可移植性、训练效率以及可扩展性。其中一个因素是将 MXNet 与 TensorFlow 进行比较的基准测试,结果发现在有 8 个 GPU 的环境中,MXNet 速度更快,存储更高效,也更准确。

MXNet 的重要意义……

数据科学家

机器学习是数据科学领域的重要组成部分。对于不熟悉深度学习模型开发重点的人,MXNet 是一个很好的起点。其广泛的语言支持、Gluon API 和灵活性非常适合开发自己的深度学习技能组合的组织。Amazon 的支持可确保 MXNet 能够长期使用,且第三方生态系统将继续发展。许多专家建议将 MXNet 作为未来深入学习更复杂框架的良好起点。

机器学习研究人员

研究人员经常使用 MXNet 快速进行原型设计,从而更轻松地将研究想法转换为模型并评估结果。它还支持命令式编程,为研究人员提供了更多的计算控制。由于 CPU 和 GPU 的利用率高,与其他框架相比,此特定框架在某些类型的模型上也表现出显著的性能。

软件开发者

灵活性是软件工程中很有价值的东西,而 MXNet 是深度学习框架中最灵活的一种。除了其广泛的语言支持之外,它还可以处理各种数据格式(包括 Amazon S3 云存储),并且可以放大或缩小以适合大多数平台。2019 年,MXNet 增加了对优步开发的分布式学习框架 Horovod 的支持。这为软件工程师在指定部署环境(可能包括从笔记本电脑到云服务器等各种环境)方面提供了更大的灵活性。

带 NVIDIA GPU 的 MXNet

MXNet 推荐使用 NVIDIA GPU 来训练和部署神经网络,因为它提供的计算能力明显高于 CPU,从而大幅提升训练和推理性能。开发者可以通过 NGC(NVIDIA GPU 云)轻松开始使用 MXNet。这里,用户可以在其中提取容器,这些容器具有可用于各种任务(例如计算机视觉、自然语言处理等)的预训练模型,且所有依赖项和框架位于一个容器中。借助 NVIDA TensorRT,当使用 GPU 时,可显著提升 MXNet 上的推理性能。

面向开发者的 NVIDIA 深度学习

GPU 加速深度学习框架能够为设计和训练自定义深度神经网络带来灵活性,并为 Python 和 C/C++ 等常用编程语言提供编程接口。MXNet、PyTorch、TensorFlow 等广泛使用的深度学习框架依赖于 NVIDIA GPU 加速库,能够提供高性能的多 GPU 加速训练。

NVIDIA GPU 加速库。

NVIDIA GPU 加速的端到端数据科学

基于 CUDA-X AI 创建的 NVIDIA RAPIDS 开源软件库套件使您完全能够在 GPU 上执行端到端数据科学和分析流程。此套件依靠 NVIDIA CUDA 基元进行低级别计算优化,但通过用户友好型 Python 接口实现了 GPU 并行化和高带宽显存速度。

借助 RAPIDS GPU DataFrame,数据可以通过一个类似 Pandas 的接口加载到 GPU 上,然后用于各种连接的机器学习和图形分析算法,而无需离开 GPU。这种级别的互操作性是通过 Apache Arrow 这样的库实现的。这可加速端到端流程(从数据准备到机器学习,再到深度学习)。

数据准备、模型训练和可视化。

RAPIDS 支持在许多热门数据科学库之间共享设备内存。这样可将数据保留在 GPU 上,并省去了来回复制主机内存的高昂成本。

热门数据科学库。