2016-04-16 85 views
29

我運行一個python腳本,我得到這個錯誤:英特爾MKL致命錯誤:無法加載libmkl_avx2.so或libmkl_def.so

Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so. 

這兩個文件都存在於anaconda2/lib目錄。我該如何解決這個錯誤?謝謝。

+0

https://software.intel.com/en-us/articles/a-new-linking-model-single-dynamic-library-mkl_rt-since-intel-mkl-103 –

回答

62

如果使用暢達,嘗試用以下兩條命令:

conda install nomkl numpy scipy scikit-learn numexpr 
conda remove mkl mkl-service 

應該解決您的問題。

+6

'nomkl'版本將會比較慢? – Lee

+4

你是怎麼知道這個的?你是一位天才神。 – RSHAP

+5

可笑掩蓋和有益的。 –

10

只是想說明,默認啓用mkl的Anaconda 4.0.0有這個問題。 這個問題的確與Anaconda有關,因爲它可以通過下面的簡單python測試來重現。

實際的問題是,與蟒蛇掛MKL,但不能與libmkl_core.so,因此它有一個丟失的符號,並且可以通過運行可以看出:

$ LD_DEBUG=symbols python -c 'import sklearn.linear_model.tests.test_randomized_l1' 2>&1 | grep -i error 
     2200:  /opt/anaconda/lib/python2.7/site-packages/scipy/special/../../../../libmkl_avx.so: error: symbol lookup error: undefined symbol: mkl_dft_fft_fix_twiddle_table_32f (fatal) 

我不想卸載MKL ,因爲我想要提高性能,所以我找到了一個解決方法,這對我來說很有效 - 在執行之前預先加載libmkl_core.so。

$ python -c 'import sklearn.linear_model.tests.test_randomized_l1' 
Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.so. 
$ 
$ LD_PRELOAD=/opt/anaconda/lib/libmkl_core.so python -c 'import sklearn.linear_model.tests.test_randomized_l1' 
$ 
+0

對原因和解決方案的真正的好解釋是有意義的,因爲MKL是英特爾本地編譯器,並且比GCC具有更好的性能。是的,卸載給了我更多的問題。 –

+0

感謝你 - 一旦我添加了第二個庫,它就可以工作:'LD_PRELOAD = $ CONDA_PREFIX/lib/libmkl_core.so:$ CONDA_PREFIX/lib/libmkl_sequential.so python ...'。 –

22

安裝anaconda3(vesion 4.2.0)後,我遇到了這個問題。對我來說修復很簡單,我可以繼續使用mkl。只需更新到最新的numpy版本。

conda update numpy 
+0

也使用'anaconda2'(conda版本4.3.16)。 –

+0

從anaconda2版本4.3.14獲得成功。另請參閱https://github.com/ContinuumIO/anaconda-issues/issues/720關於此修復的一些信息:在刪除mkl之前,嘗試用'conda install -f numpy'重新安裝numpy。 – Jason

+0

只要'conda install -f numpy'爲我工作(不必刪除mkl) – Ansari

0

想要補充Valilutzik和Zaikun Xu的帖子。由於我還沒有足夠的積分,我無法添加評論。
conda install nomkl numpy scipy scikit-learn numexpr爲我工作,無需刪除mkl和mkl服務。

如果nomkl會更慢,請給Lee的問題添加一個答案: mkl是英特爾數學內核庫,針對intel cpus進行了手動優化。 nomkl根據這個使用OpenBlas:https://docs.continuum.io/mkl-optimizations/ 似乎mkl在Intel cpus的許多矩陣操作上相當快(請參閱https://software.intel.com/en-us/articles/performance-comparison-of-openblas-and-intel-math-kernel-library-in-r
我見過有人說nomkl對於AMD cpus更快(可能是因爲mkl無法正常工作?在AMD)

1

所有的解決方案上面爲我提供沒有工作,但我找到了一個很好的妥協:

的人誰擁有了同樣的錯誤,並希望是讓蟒蛇在他的電腦上,和鋼使用MKL對於(numpy和scipy)良好的工藝性能,我建議的解決方案:

編輯y我們的.bashrc文件。

在文件中尋找類似export PATH="/home/anaconda2/bin:$PATH"的東西。

將一個#在開始從腳本評論它: #export PATH="/home/anaconda2/bin:$PATH"

打開一個新的終端,你應該運行基本Python安裝。

它爲我工作,希望它會有幫助。

+0

我這樣做了 - 'export PATH =「/ home/akshay/anaconda2/pkgs/mkl-2017.0.1-0/lib: $ PATH「' –

0

的解決方案,我用scikit學習0.19和numpy的1.13有同樣的問題。 3運行MLPRegressor時(還有一個叫做pyearth的軟件包,運行一種名爲MARS的算法)。我認爲問題的根源在於我們的python是Anaconda安裝的一部分,但scikit-learn和numpy是通過pip安裝的,他們對mkl的期望不能達成一致。

不幸的是我的框架是由一些專門的公司管理員管理的,而不是由我來管理的,所以我還沒有讓我的傢伙嘗試重新編譯numpy。但是我能夠根據this thread找到解決方法:將export LD_PRELOAD=/path/to/anaconda/lib/libmkl_def.so:/path/to/anaconda/lib/libmkl_avx.so:/path/to/anaconda/lib/libmkl_core.so:/path/to/anaconda/lib/libmkl_intel_lp64.so:/path/to/anaconda/lib/libmkl_intel_thread.so:/path/to/anaconda/lib/libiomp5.so添加到我的~/.bashrc會導致問題消失。這是超級哈克,我會說如果我知道它在做什麼(but this is helpful),所以我希望重新編譯numpy是一個更清晰的修復。但至少它有效。

請注意,使用mkl的這些軟件包的版本具有更好的性能。安裝nomkl版本是一種解決方法,但不是真正的解決方案。