65.9K
CodeProject 正在变化。 阅读更多。
Home

优化深度学习性能的工具

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2019年1月10日

CPOL
viewsIcon

7463

本文探讨了开发人员如何利用优化深度学习代码的工具来提高深度学习应用程序的速度和效率。

机器学习和深度学习每年都变得越来越复杂。在 20 世纪 90 年代,深度学习软件的早期,识别数字就被认为是尖端技术。到了 2010 年代初,深度学习研究人员已经转向更令人印象深刻的任务,例如图像分类。在过去的几年里,我们已经看到深度学习被应用于解决大规模车牌识别等挑战,速度快达每张牌 3 毫秒

但要让深度学习保持这种发展速度,程序员需要解决一个挑战。随着深度学习算法越来越复杂,以及它们处理的数据量越来越大,快速且经济高效地交付结果变得越来越困难。这是因为深度学习算法越复杂,执行速度达到可接受水平所需的硬件资源就越多。

另一个因素是,深度学习代码正从学术研究人员或企业研发部门的实验室走向实际的生产应用。因此,保证深度学习的性能变得越来越重要。在实验室中,性能可能不像你创建的深度学习模型的复杂性那样是关键的考虑因素。但在现实世界中,你获得结果的速度至关重要。

考虑到这些挑战,本文探讨了开发人员如何利用优化深度学习代码的工具来提高深度学习应用程序的速度和效率。

如何提高深度学习性能

解决保证深度学习软件性能困境的一个方法是在承载深度学习算法的环境中投入更多的硬件。如果您增加了 CPU、GPU、内存等,很可能会获得更快的性能。

然而,单独增加硬件并不是一种有效且经济的解决方案。它在一定程度上会有帮助(事实上,总的来说,硬件基础设施将需要不断扩展以支持未来日益复杂的深度学习算法),但它并不是程序员应对保证深度学习代码可接受性能挑战的唯一方法。

更好的答案:深度学习优化

相反,现在比以往任何时候都更应该注意优化所编写的深度学习代码。

虽然大多数开发人员在原则上都理解优化的重要性,但实际优化代码可能更难。在深度学习应用程序中尤其如此,其中数据质量和算法复杂性通常比低级代码优化更受重视。

此外,有时很难优化为实验目的编写的深度学习应用程序,当时性能并不是主要目标,但之后您决定在性能和效率更重要的不同环境中对其进行使用。通常,从头开始构建代码比改进现有代码的效率更容易。

尽管这些可能是需要克服的挑战,但事实仍然是,优化不足的深度学习软件不太可能跟上深度学习领域不断变化的需求和期望。它也很难超越概念验证阶段并实现实际应用。

深度学习优化工具

因此,值得看看可用于优化深度学习代码的工具。以下是几种此类工具。

在确定这些工具时,我们寻找那些可以通过最少的重写或代码重构来帮助优化现有深度学习应用程序运行方式的工具。我们还包括了一些在从头开始编写深度学习应用程序时最适合使用的优化工具。

我们还应该注意,就本文而言,“优化”包含两个主要目标。第一个是提高深度学习应用程序的运行速度。第二个是通过允许应用程序消耗更少的硬件资源同时保持相同的性能水平来提高应用程序的效率。这两个目标对于提高深度学习性能和应对上述挑战都很重要。

MKL-DNN

Intel® 数学核心库深度神经网络版(Intel® MKL-DNN)提供了一系列用于构建深度神经网络的函数。这些函数针对 Intel 的 Atom、Core 和 Xeon 处理器以及兼容设备进行了高性能优化。

MKL-DNN 因此提供了现成的函数,这些函数很可能对各种深度学习应用程序有用,并且在这些函数内部进行了代码级别的优化,从而提高了性能和效率。该库是一种构建高性能深度学习软件的便捷方法,无需花费大量时间进行代码优化。

MKL-DNN 的一个关键优势是其函数可以被任何 C 或 C++ 应用程序调用。因此,您不必从头开始编写应用程序即可利用该库。您可以采用现有的 C 或 C++ 应用程序并从中调用 MKL-DNN 函数,或者使用这些函数替换未优化的函数,而无需大规模修改代码库。

MKL-DNN 的开源代码和文档可在 GitHub 上获取。

BigDL

BigDL 的设计正如其名:在 Hadoop 生态系统(Big Data framework)中实现深度学习。具体来说,BigDL 提供了一个用于 Apache Spark 的深度学习函数库。

BigDL 函数通过利用 Intel® 数学核心库(Intel® MKL)来实现高水平的性能,MKL 是一个通用的库,适用于广泛的计算密集型编程任务,而不仅仅是与深度学习或机器学习相关的任务。MKL 针对 Intel 处理器进行了性能优化。此外,BigDL 在每个 Spark 任务中实现了多线程。

据 BigDL 开发人员称,得益于这些优化,BigDL 提供的性能比其他非优化深度学习框架“快几个数量级”(根据 BigDL 开发人员的说法)

DLOPT

深度学习优化库(Deep Learning Optimization Library),简称 DLOPT,是一个采取了略微不同方法来优化深度学习代码的工具。它的目标不是为常见的深度学习任务提供硬件优化函数,而是简化设计和实现高效深度学习应用程序架构的过程。

换句话说,它提供的优化侧重于深度学习软件的架构层面,而不是在硬件层面进行执行优化。

DLOPT 用 Python 编写,依赖于 Keras 和 TensorFlow,是一个在过去一年中创建的新项目。到目前为止,它仅用于研究目的,但其创建者在一篇描述该工具的论文中表示,该库功能齐全,并计划将其转移到商业用途。如果您正在寻找非常新颖、前沿的深度学习优化工具,DLOPT 可能会是一个不错的起点。

McTorch

同样属于今年推出的、专为架构优化设计的非常新的 Python 基础深度学习库类别的是 McTorch,这也是研究人员在今年推出的一款库。McTorch 基于 PyTorch,这是一个已经存在几年的开源机器学习库。

McTorch 和 PyTorch 的主要区别在于,前者旨在更容易地以优化方式为深度学习应用程序实现流形约束,使用与 ManoptPymanopt 相同的方法。

OpenVINO (Open Visual Inference and Neural Network Optimization)

Intel® OpenVINO™ 工具包的发行版是一个面向生产的软件工具包,用于构建可模拟人类视觉的高性能深度学习应用程序。它包含优化函数,并支持跨异构计算环境进行部署,这意味着您可以轻松利用 GPU 和其他视觉加速器来实现大规模并行处理。

如果您正在利用软件包中包含的 30 多个优化预训练模型来创建新的视觉应用程序,那么该工具包将非常有帮助,尽管其统一的通用 API 可以集成到现有的深度学习代码库中,以提高性能和效率。

OpenVINO工具包是 GitHub 上的开源产品,包含深度学习部署工具包(DLDT)和开源模型库

nGraph

在我们列出的深度学习优化工具中,最后一个但不容忽视的是 nGraph,这是 Intel 的另一款深度学习工具集。NGraph 目前尚在开发中,仅提供 Beta 版本,但其目标是提供一个 C++ 库、专用编译器和运行时加速器,旨在轻松实现和部署高性能的深度学习代码。

NGraph 通过“桥接器”工作,将它连接到其他深度学习框架。对于 TensorFlow 和 MXNet 等主要框架,已有预构建的桥接器,并且可以为其他框架实现自定义桥接器。

因此,nGraph 是一个非常有用的工具,可以将您已经用某个框架编写的深度学习应用程序,通过利用优化的编译和执行套件来提高其性能和效率。

结论

编写深度学习代码是一回事。编写(并执行)在可接受的速度下运行且不消耗过多硬件资源的深度学习代码则是另一回事。

上述工具将通过帮助您设计和编写性能更好的深度学习代码,以及(在某些情况下)优化您已编写的深度学习应用程序的性能,来帮助您实现后一个目标。有了这些工具,从概念验证深度学习代码迈向适合生产级别部署的实际应用程序比以往任何时候都更容易。

© . All rights reserved.