点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

导读

对于想学习深度学习的同学们来说,学习资源网上有很多,但是计算资源确很少,而GPU又太贵,怎么办呢?通过简单的设置,将CPU做深度学习的速度提升到3倍以上,大家又可以愉快的学习深度学习了!

在过去的几年里,无论是在学术界还是产业界,深度学习的速度都在加快。现在每家公司都在寻找基于人工智能的问题解决方案。这种繁荣有它自己的优点和缺点,但这是另一篇文章,改天再说。机器学习实践者的激增已经渗透到学术界的根源,几乎每个领域的学生都可以通过课程、mooc、书籍、文章,当然还有课程论文,接触到人工智能和ML知识。

然而,硬件资源的可用性阻碍了这种增长。GPU是你能够以一定的速度执行ML任务的最佳设备之一。然而高性能GPU的价格甚至可以到20449美元(NVIDIA Tesla GPU V100 32 gb) 。此外,使用高级GPU的消费级笔记本电脑,使用1050Ti或1080Ti之类的GPU,售价约为2000美元。为了减轻这种痛苦,谷歌、Kaggle、Intel和Nvidia免费提供了基于云的高计算系统,但对空间、计算能力、内存或时间都有限制。但是这些在线服务也有其缺点,包括管理数据(上传/下载)、数据隐私等。这些问题导致了我的文章的主要观点,“为什么不优化我们的cpu来实现深度学习任务的加速?”

性能的提升

对于下面提到的各种实验,我会展示我观察到的时间和利用率的提高。

  1. 10层深度CNN用于CIFAR-100图像分类。

  2. 3层深度LSTM进行IMDB情绪分析。

  3. 6层深度密集神经网络用于MNIST图像分类。

  4. 9层全卷积MNIST自动编码器。

这些任务用Keras写代码,使用tensorflow后端,数据集和代码和和可执行库放在一个盘里。所使用的是SSD硬盘。

我们将考虑以下六种优化组合。

  1. 英特尔(R) Core (TM) i7。

  2. Intel(R) Xeon(R) CPU E3-1535M v6。

  3. 英特尔(R)核心(TM) i7与英特尔Python(英特尔i7*)。

  4. Intel(R) Xeon(R) CPU E3-1535M v6采用Intel Python (Intel Xeon*)。

  5. Intel(R) Core (TM) i7与Intel Python和处理器线程优化(Intel i7(O))。

  6. Intel(R) Xeon(R) CPU E3-1535M v6采用Intel Python和处理器线程优化(Intel Xeon(O))。

对于每个任务,epochs的数量固定在50。从下图中我们可以看到,对于一个Intel(R) Core (TM) i7-7700HQ CPU @ 2.80GHz CPU, epoch的平均时间接近4.67秒,经过适当的优化后下降到1.48秒,即提高3.2倍。对于一个Intel(R) Xeon(R) CPU E3-1535M v6 @ 3.10GHz CPU,epoch的平均时间接近2.21秒,经过适当的优化后下降到0.64秒,提高了3.45倍。

每个epoch的平均时间

优化不仅仅是在时间上,优化的分布也优化了CPU的利用率,这最终导致更好的热量管理,你的笔记本电脑不会像以前训练深度神经网络时那么热。

使用率

我们可以看到,在不进行任何优化的情况下,训练时CPU利用率最高达到100%,从而减慢了所有其他进程并使系统升温。然而,通过适当的优化,i7和Xeon的利用率分别下降到70%和65%,但是在运行时间上却减少了。

这两个指标可以用以下相关术语进行总结。

在上面的图中,越低的值越好,即以Intel Xeon为基准进行所有优化,而一个Intel Core i7处理器在优化后,每个epoch花费的时间几乎是Xeon的两倍。上面的图表清楚地显示了从训练神经网络的时间和CPU的使用情况来看,英特尔Python优化是前途光明的。

设置Intel的Python发行版

Intel Software提供了一个关于如何设置此选项的详尽的资源列表,但是我们通常可能会遇到一些问题。更多关于发行版的详细信息看这里:(https://software.intel.com/en-us/distribution-for-python)。你可以选择安装的类型,即本地pip或conda。我更喜欢conda,因为它为我节省了大量的麻烦,而且我可以专注于ML,而不是解决我的库的兼容性问题。

1) 下载安装Anaconda

你可以从这里:(https://www.anaconda.com/distribution/)下载Anaconda。他们的网站列出了在windows、ubuntu和macOS环境中安装Python的所有步骤,并且很容易做。

2) 在你的Anaconda发布中设置Intel python

这一步通常比较棘手。最好为Intel发行版创建一个虚拟环境,这样你就可以随时在一个地方添加/更改优化后的库。让我们创建一个名为“intel.”的虚拟环境。

conda create -n intel -c intel intelpython3_full

这里-c表示通道,因此我们不将Intel添加为通道,而是通过-c调用该通道。在这里,intelpython3_full将自动从Intel发行版获取必要的库,并将它们安装到你的虚拟环境中。这个命令将安装以下库。

The following NEW packages will be INSTALLED:
asn1crypto         intel/win-64::asn1crypto-0.24.0-py36_3
bzip2              intel/win-64::bzip2-1.0.6-vc14_17
certifi            intel/win-64::certifi-2018.1.18-py36_2
cffi               intel/win-64::cffi-1.11.5-py36_3
chardet            intel/win-64::chardet-3.0.4-py36_3
cryptography       intel/win-64::cryptography-2.3-py36_1
cycler             intel/win-64::cycler-0.10.0-py36_7
cython             intel/win-64::cython-0.29.3-py36_1
daal               intel/win-64::daal-2019.3-intel_203
daal4py            intel/win-64::daal4py-2019.3-py36h7b7c402_6
freetype           intel/win-64::freetype-2.9-vc14_3
funcsigs           intel/win-64::funcsigs-1.0.2-py36_7
icc_rt             intel/win-64::icc_rt-2019.3-intel_203
idna               intel/win-64::idna-2.6-py36_3
impi_rt            intel/win-64::impi_rt-2019.3-intel_203
intel-openmp       intel/win-64::intel-openmp-2019.3-intel_203
intelpython        intel/win-64::intelpython-2019.3-0
intelpython3_core  intel/win-64::intelpython3_core-2019.3-0
intelpython3_full  intel/win-64::intelpython3_full-2019.3-0
kiwisolver         intel/win-64::kiwisolver-1.0.1-py36_2
libpng             intel/win-64::libpng-1.6.36-vc14_2
llvmlite           intel/win-64::llvmlite-0.27.1-py36_0
matplotlib         intel/win-64::matplotlib-3.0.1-py36_1
menuinst           intel/win-64::menuinst-1.4.1-py36_6
mkl                intel/win-64::mkl-2019.3-intel_203
mkl-service        intel/win-64::mkl-service-1.0.0-py36_7
mkl_fft            intel/win-64::mkl_fft-1.0.11-py36h7b7c402_0
mkl_random         intel/win-64::mkl_random-1.0.2-py36h7b7c402_4
mpi4py             intel/win-64::mpi4py-3.0.0-py36_3
numba              intel/win-64::numba-0.42.1-np116py36_0
numexpr            intel/win-64::numexpr-2.6.8-py36_2
numpy              intel/win-64::numpy-1.16.1-py36h7b7c402_3
numpy-base         intel/win-64::numpy-base-1.16.1-py36_3
openssl            intel/win-64::openssl-1.0.2r-vc14_0
pandas             intel/win-64::pandas-0.24.1-py36_3
pip                intel/win-64::pip-10.0.1-py36_0
pycosat            intel/win-64::pycosat-0.6.3-py36_3
pycparser          intel/win-64::pycparser-2.18-py36_2
pyopenssl          intel/win-64::pyopenssl-17.5.0-py36_2
pyparsing          intel/win-64::pyparsing-2.2.0-py36_2
pysocks            intel/win-64::pysocks-1.6.7-py36_1
python             intel/win-64::python-3.6.8-6
python-dateutil    intel/win-64::python-dateutil-2.6.0-py36_12
pytz               intel/win-64::pytz-2018.4-py36_3
pyyaml             intel/win-64::pyyaml-4.1-py36_3
requests           intel/win-64::requests-2.20.1-py36_1
ruamel_yaml        intel/win-64::ruamel_yaml-0.11.14-py36_4
scikit-learn       intel/win-64::scikit-learn-0.20.2-py36h7b7c402_2
scipy              intel/win-64::scipy-1.2.0-py36_3
setuptools         intel/win-64::setuptools-39.0.1-py36_0
six                intel/win-64::six-1.11.0-py36_3
sqlite             intel/win-64::sqlite-3.27.2-vc14_2
tbb                intel/win-64::tbb-2019.4-vc14_intel_203
tbb4py             intel/win-64::tbb4py-2019.4-py36_intel_0
tcl                intel/win-64::tcl-8.6.4-vc14_22
tk                 intel/win-64::tk-8.6.4-vc14_28
urllib3            intel/win-64::urllib3-1.24.1-py36_2
vc                 intel/win-64::vc-14.0-2
vs2015_runtime     intel/win-64::vs2015_runtime-14.0.25420-intel_2
wheel              intel/win-64::wheel-0.31.0-py36_3
win_inet_pton      intel/win-64::win_inet_pton-1.0.1-py36_4
wincertstore       intel/win-64::wincertstore-0.2-py36_3
xz                 intel/win-64::xz-5.2.3-vc14_2
zlib               intel/win-64::zlib-1.2.11-vc14h21ff451_5

你可以看到,对于每个库,都以“Intel/…”开头,这表示正在从Intel的发行渠道下载该库。一旦你同意安装这些库,就会开始下载和安装它们。

这一步是会出现一个问题。有时,这些库不会被下载,列表会往下走,或者出现SSL错误,然后命令退出。这个问题甚至可能被延迟,也就是说,现在所有东西都将被下载和安装,但是稍后如果你想添加任何新的库,提示符将抛出SSL错误。有一个方式可以简单的修复这个问题,为英特尔创建虚拟环境之前需要完成。

在你的shell或命令提示符中,通过下面的命令关闭anaconda的默认SSL验证

conda config --set ssl_verify false

一旦关闭了SLL验证,你可以重复步骤2,删除之前创建的环境并重新启动。

3) 设置TensorFlow

恭喜你!!现在,你已经在电脑中设置了Intel的python发行版。现在是进入ML pipeline的时候了。

英特尔已经通过所有的发行版为tensorflow提供了优化,设置起来非常顺利。(https://software.intel.com/en-us/ai/frameworks/tensorflow)。让我们看看如何为CPU安装优化过的tensorflow。英特尔软件提供了一个优化的数学内核库(mkl),优化数学操作,并为用户提供所需的加速。因此,我们将按如下方式安装tensorflow-mkl。

conda install tensorflow-mkl

或者使用pip,可以将其设置为如下所示。

pip install intel-tensorflow

Tensorflow现在已经启动并在你的系统中运行,并进行了必要的优化。如果你是Keras的粉丝,你可以用一个简单的命令来设置它:-

conda install keras -c intel

4) 设置Jupyter

由于我们创建了一个新的虚拟环境,但它不是spyder或jupyter notebooks的默认环境。然而,设置这些是很简单的。只要一行命令,我们就能做到。

conda install jupyter -c intel

5) 激活环境开始做实验

既然我们已经设置好了所有的东西,现在是动手的时候了,我们开始在优化的CPU系统上编写代码并尝试各种ML和DL方法。首先,在执行任何代码之前,确保使用了正确的环境。在使用安装在虚拟环境中的库之前,需要激活虚拟环境。这个激活步骤是一个永久的过程,并且是毫不费力的。在anaconda提示符中编写以下命令,就可以开始了。

conda activate intel

要对环境进行全面检查,在激活环境后,在命令提示符/shell中键入以下命令。

python

输入python后按enter,命令提示符中应该出现以下文本。确保显示的是“Intel Corporation”,并显示“Intel(R) Distribution for Python is brought to you by Intel Corporation.”。这些验证了英特尔Python发行版的正确安装。

Python 3.6.8 |Intel Corporation| (default, Feb 27 2019, 19:55:17) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Intel(R) Distribution for Python is brought to you by Intel Corporation.
Please check out: https://software.intel.com/en-us/python-distribution

现在,你可以使用命令行进行试验,或者在其他地方编写脚本来运行。

(intel) C:\Users\User>python script.py

通过以下步骤1到4,使你的系统具备上面的性能基准图中提到的Intel xyz级别。这些仍然不是基于多处理器的线程优化。我将在下面讨论如何进一步优化你的多核CPU。

多核优化

要为你的多核系统添加进一步的优化,你可以将以下代码行添加到.py文件中,它将相应地执行脚本。这里NUMPARALLELEXEC_UNITS表示内核的数量,我有一个四核i7,因此这个数字是4。

from keras import backend as K
import tensorflow as tf
NUM_PARALLEL_EXEC_UNITS = 4
config = tf.ConfigProto(intra_op_parallelism_threads=NUM_PARALLEL_EXEC_UNITS, inter_op_parallelism_threads=2,allow_soft_placement=True, device_count={'CPU': NUM_PARALLEL_EXEC_UNITS})
session = tf.Session(config=config)
K.set_session(session)
os.environ["OMP_NUM_THREADS"] = "4"
os.environ["KMP_BLOCKTIME"] = "30"
os.environ["KMP_SETTINGS"] = "1"
os.environ["KMP_AFFINITY"] = "granularity=fine,verbose,compact,1,0"

如果你不喜欢使用Keras而更喜欢使用tensorflow,那么脚本几乎保持不变,只需删除以下两行。

from keras import backend as K
K.set_session(session)

在你的代码中添加了这些行之后,应该可以达到上面性能图表中的Intel xyz(O)条目相当的性能。

如果你的系统中有GPU,并且它与当前库集冲突,或者抛出一个cudnn错误,那么你可以在代码中添加以下行来禁用GPU。

os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

总结

现在你已经有了一个用于测试和开发机器学习项目和思想的优化pipeline。这一渠道为学生提供了大量的机会,让他们参与到学术研究中,用他们所拥有的资源继续他们的工作。这条pipeline还将防止从业者的私有数据的隐私泄露问题。

同样值得注意的是,通过适当的微调,一个人可以在他们的工作流程中获得3.45倍的加速,这意味着如果你正在试验你的想法,你现在可以比以前快三倍。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

优化你的CPU来做深度学习相关推荐

  1. 关于做深度学习,如何配置本地工作站(CPU、GPU等一系列问题扫盲和推荐)

    前言 大家都知道做深度学习研究,特别是进行多层次神经网络的运算,需要耗费大量的计算机算力和时间,而一个好的硬件可以大大减少降低训练的时间成本,特别是当我们需要对模型进行反复调参数时,时间成本的增加将会 ...

  2. TVM 优化 ARM GPU 上的移动深度学习

    TVM 优化 ARM GPU 上的移动深度学习 随着深度学习的巨大成功,将深度神经网络部署到移动设备的需求正在迅速增长.与桌面平台上所做的类似,在移动设备中使用 GPU 既有利于推理速度,也有利于能源 ...

  3. Google首席科学家谈Google是怎么做深度学习的

    Google首席科学家谈Google是怎么做深度学习的 dongfeiwww  2016-03-26 10:17 收藏64 评论1 2016年3月7日,谷歌首席科学家,MapReduce.BigTab ...

  4. 人人都可以做深度学习应用:入门篇

    一.人工智能和新科技革命 2017年围棋界发生了一件比较重要事,Master(Alphago)以60连胜横扫天下,击败各路世界冠军,人工智能以气势如虹的姿态出现在我们人类的面前.围棋曾经一度被称为&q ...

  5. 免费使用3天!52CV GPU云大促,疫情期间做深度学习的首选!

    52CV GPU云是52CV 与深脑链合作的云平台,以打造学生能用的起的低价优质GPU云为己任,目前已有几百位稳定用户. 网址在这里:gpu.52cv.net 在这个宅在家里为国家做贡献的时刻,作为G ...

  6. 人人都能够做深度学习应用:入门篇

    一.人工智能和新科技革命 2017年围棋界发生了一件比較重要事,Master(Alphago)以60连胜横扫天下,击败各路世界冠军.人工智能以气势如虹的姿态出现在我们人类的面前.围棋以前一度被称为&q ...

  7. 【腾讯Bugly干货分享】人人都可以做深度学习应用:入门篇

    导语 2016年,继虚拟现实(VR)之后,人工智能(AI)的概念全面进入大众的视野.谷歌,微软,IBM等科技巨头纷纷重点布局,AI 貌似将成为互联网的下一个风口. 很多开发同学,对人工智能非常感兴趣, ...

  8. 实验室一块GPU都没有怎么做深度学习?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 链接: https://www.zhihu.com/questio ...

  9. 云服务器做深度学习推荐+autoDL云服务器进行深度学习教程

    目录 主流云服务器 autoDL云服务器进行深度学习教程 1.购买autoDL云服务器 2.向服务器上传项目数据 3.解压服务器上的项目数据 4.终端训练 4.1 远程IDE 4.2  代码执行结束自 ...

最新文章

  1. 用XMLHTTP获取动态页生成的HTML内容
  2. Handler源码剖析
  3. 为什么要使用Node.js进行数据科学
  4. iOS 图片部分模糊,类似于美图秀秀
  5. 2007浙大复试上机考试题目1--最小长方形
  6. 18.卷1(套接字联网API)---路由套接字
  7. AVI、 MPEG 、 DivX、 Indeo Video 常见的编码与常见的文件格式
  8. 测试手机软件打开速度的app,16个软件打开速度测试 iPhoneXS怒胜三星Note9
  9. JavaScript 运输公司计算运费,路程越远,运费的折扣越高
  10. 漫谈中国数字电视标准的诞生
  11. mobaxterm配置Tunneling隧道连接服务器
  12. 从《西部世界》到GAIL(Generative Adversarial Imitation Learning)算法
  13. 【0049】报错:fe_sendauth: invalid authentication request from server: AUTH_REQ_SASL_CONT without
  14. 《Microduino实战》——2.7 总结
  15. 事物的特点:(一句话让你知道什么是事物)?
  16. 条款20:宁以pass-by-reference-to-const替换pass-by-value
  17. 极光推送收费标准_《天涯明月刀OL腾讯旗下 北极光工作室的 厄运魔咒:“做什么凉什么”》...
  18. 网易数据治理工具产品实践
  19. nRF52832学习记录(十、PWM 脉冲调制)
  20. UML建模工具更新情况(2020年8月更新)

热门文章

  1. 4000个“不会数学”的程序员出现大反转!居然能学AI,玩算法,搞逻辑!背后原因首次曝光...
  2. GitHub日收12000星,微软新命令行工具引爆程序员圈!
  3. Google又放大招:高效实时实现视频目标检测 | 技术头条
  4. 科大讯飞全新1024:3大计划,200项A.I.能力,全链路驱动应用场景创新!
  5. 每天导航超4亿公里,百度地图整合AI功能
  6. 用不惯VMware?试试这款更轻量级的虚拟机!
  7. SpringBoot多线程环境下,解决多个定时器冲突问题
  8. 还在用分页?太Low !试试 MyBatis 流式查询,真心强大!
  9. Spring 下,关于动态数据源的事务问题的探讨
  10. 一千个不用 Null 的理由