如今,大多数机器学习都是在处理器上完成的。有人会说,学习的过程必须由GPU进行加速,但对于多数用户来说,这可能并不是最好的建议。
到目前为止,GPU仍然比其他东西更适合用于机器学习的软件。不过英特尔的一系列努力已经让这种近乎被GPU制霸的状态有所缓和——加上英特尔Xeon SP家族的白金版本,最高性能间的差距已缩小到近2倍,而不是之前的100倍。这可能会让一些人感到震惊,但它的文档记录确实不错,而且当我们了解它的底层架构时,也许就不会那么震惊了。性能上如此接近,使得GPU加速器成为一种奢侈品,而不是必需品——也就是说当我们真正需要的时候,GPU是一个更好的选择。
毫无疑问,机器学习领域中,“加速器”在性能和/或功耗方面都有优势。在这篇文章的结尾,笔者会回过头来谈一谈:“如果我们只做机器学习会怎样?”。由于多数用户需要的不仅仅是一台“机器学习”服务器,笔者将关注的是为何英特尔Xeon SP白金处理器仍然是服务器的最佳选择,包括需要将机器学习作为其工作负载的一部分服务器。
基准在哪里?
英特尔的工程师会告诉你,深度学习的框架是高度偏向于为GPU优化的,而不是CPU。因此,英特尔采取了一些措施——在这些框架缺乏CPU优化的今天,英特尔对已经为GPU优化的框架进行了CPU优化。
结果不言自明。随着CPU优化的增加,TensorFlow基准测试的CPU获得了高达72X的性能(参见Intel博客,标题为关于现代英特尔架构的TensorFlow优化)。类似的,Caffe基准测试中,CPU优化使其增益高达82X(参见Intel的博客,标题为Intel优化Caffe与BVLC Caffe相比)。这只是一个开始。Torch框架的网站中宣称“Torch是一个科学的计算框架,广泛支持将GPU视为首选项的机器学习算法。”
在本文后面,笔者将逐一介绍这些框架和库,并提供下载的链接,详细介绍基准测试结果。
当然,最重要的基准是你自己的程序。因此,我建议您在使用提供CPU优化和GPU优化的框架和库时对比一下结果。
实际上,最流行的框架都有针对CPU优化的版本,尤其是英特尔 Xeon SP处理器。这里有一个部分运行的关键软件,用于加速对英特尔Xeon白金处理器版本的深入学习,这足以使GPU的最佳性能优势接近于2倍,而不是100倍。
我们所了解和热爱的深度学习框架
以下所有这些框架都对英特尔Math内核库(英特尔 MKL)和英特尔高级矢量扩展指令集(Intel AVX)进行了优化。
TensorFlow是谷歌创建的领先的深度学习和机器学习框架。对于Linux来说,对于处理器的Tensorflow优化是可以通过pip安装的。Intel性能测试显示,如果没有这些性能优化,Tensorflow基本版本的CPU性能将提高72倍。要了解更多关于优化工作的信息,以及性能数据,请参阅题为《现代英特尔架构的TensorFlow优化》的博客文章。地址https://software.intel.com/en-us/articles/tensorflow-optimizations-on-modern-intel-architecture
Caffe是最受欢迎的图像识别社区应用程序之一。在CPU上运行时,英特尔已经为改进Caffe的性能做出了贡献,可以参阅https://github.com/BVLC/caffe/tree/intel。一些性能测试显示,对CPU的优化增加了82倍,参阅博客《与BVLC Caffe相比,英特尔优化Caffe的收益》。地址https://software.intel.com/en-us/articles/comparison-between-intel-optimized-caffe-and-vanilla-caffe-by-intel-vtune-amplifier
Torch是一个流行的深度学习框架。在未经调整CPU优化的情况下使用标准的Torch是不现实的。使用英特尔软件优化的Torch,运行在CPU上时会Torch的性能,特别是在英特尔Xeon可扩展处理器上。可参阅:https://github.com/intel/torch。
Theano是一个开放源码的Python库,很受机器学习程序员的欢迎,可以帮助定义、优化和评估涉及多维数组的数学表达式。CPU优化为CPU设备提高了性能,尤其是英特尔Xeon可扩展处理器和英特尔Xeon处理器Phi,参阅https://github.com/intel/theano。
Neon是一种基于python的深度学习框架,旨在为现代深度神经网络的使用和可扩展性提供便利,并致力于在所有硬件上提供最佳性能。Neon是由Nervana推出的,它已被英特尔公司收购。了解更多相关信息:https://www.intelnervana.com/neon/
深度学习数学库
Python和它的库可能是机器学习应用中最流行的基层部分。Python的加速版本在过去的几年里得到了广泛的应用——可以直接下载,或者通过Conda、yum和apt-get、Docker images。运行没有加速Python在多数情况下是不可行的。在此网站上寻找你需要知道的所有信息:https://software.intel.com/distribution-for-python。
BigDL是Apache Spark的分布式深度学习库。对于BigDL,用户可以将他们的深度学习应用程序编写为标准的Apache Spark程序,它可以直接运行在现有的Apache Spark或Hadoop集群之上。以Torch为模型,BigDL为深度学习提供了全面的支持,包括数字计算(通过张量)和高水平的神经网络;此外,用户还可以使用BigDL将预先训练的Caffe或Torch模型加载到Spark程序中。据报道,英特尔声称在BigDL的处理比单节点Xeon处理器上的“开箱即用的开源caffe、Torch或TensorFlow快得多”,与主流GPU相当。它可以从https://github.com/intel-analytics/BigDL获得。
MXNet是一个开源深度学习框架,可以从https://github.com/apache/incubator-mxnet获得。
英特尔MKL-DNN是一个开源的、能提高性能的库,可以通过英特尔MKL-DNN概述博客https://software.intel.com/articles/intel-mkl-dnn-part-1-library-overview-and-installation.获得在CPU上加速深度学习框架的方法。
除了上面提到的框架和库之外,英特尔数据分析加速库(DAAL)是一个开源的优化算法构建块,用于数据分析阶段,此阶段通常与解决大数据问题相关联。该库是为使用流行数据平台而设计的,包括Hadoop、Spark、R和Matlab。可以参阅https://software.intel.com/intel-daal。
如果我们只做机器学习呢?
一个服务器需要支持多种工作负载时,英特尔Xeon可扩展处理器可能是最好的解决方案,但如果我们想要购买一台“机器学习”服务器或超级计算机呢?
笔者的建议是“确定你真正知道你需要什么”,并意识到这个领域的事情正在发生变化。机器学习的加速器可能会从GPU转变为FPGA、ASIC,以及一些描述中有“神经网络”的产品。在所有这些解决方案中,支持各种工作负载的CPU仍然是英特尔Xeon处理器。
加速器的选择越来越多样化。高核心的CPU和FPGA提供了非常灵活的选择,性价比和效率都不差。英特尔的Xeon Phi处理器系统可以进行训练,或者学习一个AlexNet图像分类系统,比使用Nvidia GPU的类似配置系统的速度快2.3倍。(参见英特尔内部:加快机器学习的竞赛https://www.intel.com/content/www/us/en/analytics/machine-learning/the-race-for-faster-machine-learning.html)。英特尔已经表明,英特尔Xeon Phi处理器每美元的性能比一个主机GPU解决方案高出9倍,每瓦的性能提高了8倍。未来还有更多英特尔Nervana专为人工智能设计的产品。
机器学习的基础
Xeon SP处理器,尤其是白金级处理器,为机器学习提供了出色的性能,同时给我们提供了比其他任何解决方案更多的通用性。如果我们需要进行加速,英特尔Xeon可扩展处理器仍然是一个具有加速器的通用系统的核心,而这些加速器的选项正在迅速增多。不管怎样,依靠Skylake处理器和他们对机器学习的出色支持,给了我们一个性能和通用性的最佳组合。
it168网站原创 作者: 谢涛编译