在没有MKL的情况下为AMD Ryzen设置Anaconda

时间:2019-07-17 14:26:22

标签: anaconda openblas

与其他许多人一样,我为自己购买了新的Ryzen CPU。我需要使用Anaconda Python作为我的博士学位(以及Tensorflow等)。由于Anaconda现在已经预包装了MKL,这在AMD CPU上运行缓慢,因此什么是用openblas设置Anaconda环境并链接numpy和scikit-learn,同时保持所有其他软件包不变的最佳方法是什么?

我发现以下帖子都指向以某种方式安装某些软件包。

https://anaconda.org/anaconda/nomkl

https://anaconda.org/anaconda/openblas

How to install scipy without mkl

2 个答案:

答案 0 :(得分:1)

放弃MKL的另一种方法是,通过告诉MKL使用与Ryzen兼容的指令集,从而使其在Ryzen CPU上的运行速度更快。通过做

conda install mkl -c intel --no-update-deps
set MKL_DEBUG_CPU_TYPE=5

我发现在Windows 10下,我的Ryzen CPU上使用numpy / theano / PyMC3的速度提高了15倍,而默认的初始miniconda安装速度提高了。

答案 1 :(得分:1)

reddit上的这篇文章对正在发生的事情有更全面的解释,但是由于MKL对非Intel设备造成了令人讨厌的事情,因此这只是您的终端中的一个班轮,可以诱使MKL认为您是Intel系统。 https://www.reddit.com/r/MachineLearning/comments/f2pbvz/discussion_workaround_for_mkl_on_amd/

WINDOWS:

打开具有 admin 权限的命令提示符(CMD)并输入:

setx /M MKL_DEBUG_CPU_TYPE 5

这样做将使更改永久生效,并且可以使用系统上的MKL应用于所有程序,直到您再次从变量中删除条目为止。

LINUX:

只需输入一个终端:

export MKL_DEBUG_CPU_TYPE=5 

从终端的同一实例运行脚本之前。

Linux永久解决方案:

echo 'export MKL_DEBUG_CPU_TYPE=5' >> ~/.profile

将在整个配置文件中应用设置。

一些重点内容,因为我认为您可以单击链接以阅读全文:

“但是,默认情况下,许多软件包随附的数字库是Intel MKL。众所周知,该MKL在AMD CPU上运行缓慢,从而导致某些操作。这是因为Intel MKL使用的是有区别的CPU调度程序高效的代码路径,取决于CPU的SIMD支持,但基于供应商字符串查询的结果。如果CPU来自AMD,则MKL不会使用SSE3-SSE4或AVX1 / 2扩展名,但无论是否AMD CPU是否支持像AVX2这样的更有效的SIMD扩展。

此处提供的方法由MKL强制提供AVX2支持,与供应商字符串结果无关,并且只需不到一分钟的时间即可应用。如果您拥有基于Zen / Zen + / Zen2 µArch Ryzen / Threadripper的AMD CPU,这将极大地提高您的性能。”