对从业人员

Anaconda中的TensorFlow CPU优化

2019年6月25日
由斯坦利Seibert

由Stan Seibert, Anaconda, Inc.和Nathan Greeneltch, Intel公司TensorFlow是大规模机器学习最常用的框架之一,特别是深度学习(我们将其简称为“DL”)。这个流行的框架已经越来越多地用于解决各种复杂的研究、商业和社会问题。自2016年以来,Intel和谷歌合作,优化TensorFlow在cpu上的DL训练和推理速度性能。Anaconda发行版已经将这个cpu优化的TensorFlow作为过去几个TensorFlow发行版的默认TensorFlow。cpu的性能优化由软件层图优化和特定于硬件的代码路径提供。特别是,软件层图优化使用了Intel深度神经网络数学内核库(Intel MKL-DNN),这是一个用于Intel架构上的DL应用程序的开源性能库。硬件特定的代码路径通过先进的x86处理器指令集进一步加速,特别是Intel advanced Vector Extensions 512 (Intel AVX-512)和Intel深度学习Boost (Intel DL Boost)特性中发现的新指令ndIntel Xeon可扩展处理器。让我们进一步了解这两种优化方法以及如何从Anaconda获得这些加速。

硬件级深度学习优化

硬件级优化使用新的x86处理器指令来优化DL模型训练和推理的性能。随着最近推出的2nd可扩展处理器,英特尔直接在CPU上对深度学习架构进行了额外的改进。这个新的硬件特性被称为Intel DL Boost,它包含了对INT8的增强优化,使用了一个名为向量神经网络指令(VNNI)的新向量指令集。有了新的指令,处理器可以在每个时钟周期内完成更多的指令,有助于加快执行速度。图1比较了常用图像分类模型中cpu优化的TensorFlow与未优化的库存版本的推理吞吐量性能。切换到cpu优化版本后,Resnet-101模型的性能立即提高了高达11倍。1推理吞吐量性能:CPU优化的TensorFlow与未优化的(库存)TensorFlow比较

TensorFlow_Perf_Graph

图1:流行DL模型的张量流推理吞吐量性能比较。注:TensorFlow 1.14将为INT8提供带Intel DL Boost的完整性能优化。请参阅下面附录中的测试配置细节。

软件层执行图优化

用高级语言(如Python)编写的深度神经网络在TensorFlow中表示为执行图。可以对该图进行优化,以加速相应神经网络的性能。TensorFlow提供了许多图优化,旨在加速深度学习工作负载的执行。下面是在Intel cpu上执行时发生的一些优化。

运营商融合

cpu优化的TensorFlow将计算与内存访问重叠,以节省计算周期。这些融合优化寻找按顺序出现的不同类型的运算符(如计算限定、内存限定、I/O限定等),并将它们融合为单个运算符。图2中的示例融合了Padding操作符和Convolution操作符。

图2:图优化示例:Before and After Fusion A另一个例子是将2D卷积与BiasAdd和ReLU操作符融合。Intel的图优化通道不仅可以识别两个可融合算子的模式,还可以组合两个以上算子的序列。一个这样的例子是,通过优化消除在不同数据格式下运行的神经网络引入的冗余转置。关于执行图的融合版本,请参见图3。

图3:图优化示例:融合B之前和之后转置是一种内存限制的操作,在这种特殊情况下会浪费计算周期。如图3所示,如果让二维卷积直接对原始布局中的数据进行操作,这两个转置都可以成为冗余。过滤器缓存卷积神经网络通常有滤波器作为卷积运算的输入。Intel MKL-DNN为这些过滤器使用了针对Intel cpu优化的内部格式,与本地TensorFlow格式不同。当这个过滤器是一个常数时(通常是推理的情况),我们可以一次性将过滤器从TensorFlow格式转换为Intel MKL-DNN格式,缓存它,然后在后续迭代中重用,而不需要再次执行这些格式转换。这只是Intel添加到TensorFlow的当前性能策略和优化的部分列表。工作正在进行中,未来将添加新的优化。如何获得优化的套餐?Anaconda将cpu优化的TensorFlow二进制文件作为其开源发行版和企业软件栈的一部分,以方便安装和包维护。所以,无论你要解决的是多么复杂的问题,你的指尖都会有正确的解决方案!要通过Anaconda包管理器尝试cpu优化的TensorFlow,请运行以下命令或将包添加到Anaconda Enterprise中的项目中。

conda安装tensorflow

现在,您可以为项目利用cpu优化的TensorFlow了。性能测试中使用的软件和工作负载可能只针对英特尔微处理器上的性能进行了优化。性能测试,如SYSmark和MobileMark,是使用特定的计算机系统、组件、软件、操作和功能进行测量的。这些因素的任何改变都可能导致结果的变化。您应参考其他信息和性能测试,以帮助您全面评估预期购买的产品,包括该产品与其他产品结合时的性能。欲了解更多信息,请访问www.intel.com/benchmarks.性能结果是基于截至2019年4月5日的测试,可能不反映所有公开可用的安全更新。没有任何产品或组件是绝对安全的。配置:

  1. 截至2019年4月5日,英特尔对英特尔®至强®处理器上的TensorFlow吞吐量性能进行了测试。2插槽Intel®Xeon®铂金8180处理器,28核HT On Turbo On总内存384 GB(12插槽/ 32GB/ 2633 MHz), BIOS: SE5C620.86B.0D.01.0286.121520181757, CentOS 7.6, 4.19.5-1.el7.elrepo。x86_64,深度学习框架2插槽Intel®Xeon®铂金8280处理器,28核HT On Turbo On总内存384 GB(12槽位/ 32GB/ 2933 MHz), BIOS: sec5c620.86 b . 0d .01.0271.120720180605 (ucode:0x4000013),CentOS 7.6, 4.19.5-1.el7.elrepo。x86_64,深度学习框架SW细节:TensorFlowhttps://github.com/tensorflow/tensorflow提交身份证30 f17fe3862fb855e6d9fa161a00f0a74d18857b使用合成数据FP32, INT8 w/ Batch Size = 128。(本次测量中使用的所有INT8相关优化预计将在TensorFlow 1.14版本中提供)https://github.com/IntelAI/models/blob/87261e70a902513f934413f009364c4f2eed6642/models/image_recognition/tensorflow/resnet50/https://github.com/IntelAI/models/blob/87261e70a902513f934413f009364c4f2eed6642/models/image_recognition/tensorflow/resnet101/https://github.com/IntelAI/models/blob/87261e70a902513f934413f009364c4f2eed6642/models/image_recognition/tensorflow/inceptionv3/

英特尔技术的特性和优势取决于系统配置,可能需要启用硬件、软件或服务激活。性能因系统配置而异。没有任何产品或组件是绝对安全的。与您的系统制造商或零售商联系,或在intel.com了解更多信息。优化注意:对于非英特尔微处理器的优化,英特尔的编译器可能会优化到相同的程度,也可能不会。这些优化包括SSE2、SSE3和SSSE3指令集和其他优化。英特尔不保证在非英特尔生产的微处理器上的任何优化的可用性、功能性或有效性。本产品中与微处理器相关的优化旨在与英特尔微处理器一起使用。某些不特定于英特尔微架构的优化保留给了英特尔微处理器。请参考适用的产品用户和参考指南,以获得更多关于本通知所涵盖的具体指令集的信息。 Notice Revision #20110804 Intel, the Intel logo, Intel Xeon, and Intel DL Boost are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries. *Other names and brands may be claimed as the property of others.

本网站使用cookie确保您在我们的网站上获得最佳的体验。隐私政策
接受
Baidu
map