前两天有小伙伴发了篇文章给我,让我验证一下靠不靠谱,标题写着《如何在 i5 上实现 20 倍的 Python 运行速度?》,我看了不以为然,八成又是个标题党。看了看发现是篇译文,歪果仁原文标题是 How Does a 20X Speed-Up in Python Grab You? 似乎有点意思,于是我按照文章给出的方法做了一些验证性的尝试。
首先给出大家结论,今年2月份,Intel Python发布了第二版更新,其优化主要针对科学计算(后面会详细说),日常使用(比如我这种写爬虫的)就不用凑热闹了,在我的机器上(i7 6700k/Windows 10 x64)性能提升为5-15倍。环境不同,提升性能可能不同,所以那篇文章说的20倍加速也不算耸人听闻。而且中文社区对Intel® Distribution for Python的讨论的确比较少,所以虽然干货不多,还是抛砖引玉地写一篇笔记出来。
我们都知道,Anaconda是一个Python的科学计算发行版本,里面除了有原生Python以外,还自带了numpy、scipy等科学计算常用的库。那么同样,Intel Distribution则是其另一个发行版本,对某些特定类型运算和内存管理做了优化,而且可以通过Anaconda的conda直接进行安装和管理。
那么效果究竟如何?以下是我在本地电脑按照原文作者方法的实测。
PS 由于网络问题,我没能成功按照原文的方法直接使用conda安装,后面会给出其他办法。
首先是Anaconda Python 3.6
然后是Intel Python 3.5
的确可以看到5~12倍运行速度上的提升。
下面具体来说安装。
安装有两种办法:
一种是本机已有Anaconda,通过conda来安装,这样可以通过新建环境来方便多版本的Python管理,但是我自己通过这种办法一直失败,报错是time out,应该是国内的网络原因,大家可以尝试一下。
另一种办法,适用于本地没有装Anaconda,或者像我一样因为网络原因没办法直接通过命令行安装,可以利用官方提供的安装包来安装,其中也附带了conda,可以像Anaconda一样使用和管理。
先说方法一的步骤,以下是官方说明,我自己没有亲测成功:
https://software.intel.com/en-us/articles/using-intel-distribution-for-python-with-anaconda
1、conda update conda
2、conda config –add channels intel
在这里解释一下conda中channel的作用。利用conda install命令时,程序会到我们设定好的路径(channel)中寻找相应的包。之前说过的通过修改为国内镜像加速下载也是这个院里。这边呢是因为Intel在conda上有自己单独的channel,所以要修改为intel。
3、conda create -n idp intelpython3_core python=3
或者
conda create -n idp intelpython3_full python=3
区别在于一个只装核心部分,另一个是装全部的。
如果想要Python 2.x,则为
conda create -n idp intelpython2_core python=2
这里的话,新建了一个名为idp的env,在后续可以直接激活环境。
4、activate idp
激活环境,后续就是正常的使用了。
如果要在原有的环境中,单独更新某一个包为Intel版本,可以使用
conda install numpy -c intel --no-update-deps
# 我试了几次都遇到了timeout报错。而且由于要修改channel为intel,也没办法用清华大学的镜像加速下载。
方法二:
https://software.intel.com/en-us/intel-distribution-for-python/try-buy
在这边下载相应版本的免费社区版本,然后进行安装。
这边提供一个我下载好的Python 3版本安装包 http://pan.baidu.com/s/1o89FjWQ
之后按照正常的Python路径管理就可以了。
由于我自己不做机器学习,用科学计算也比较少,所以就在这里打住了。有需求的小伙伴可以自己尝试一下性能提升的具体效果。对加速原理感兴趣的可以继续看下面的参考链接。
参考:
http://www.infoworld.com/article/3187484/software/how-does-a-20x-speed-up-in-python-grab-you.html
https://software.intel.com/en-us/articles/intelr-distribution-for-python-2017-update-2
https://software.intel.com/en-us/articles/using-intel-distribution-for-python-with-anaconda