web-dev-qa-db-ja.com

インテルMKL致命的エラー:libmkl_avx2.soまたはlibmkl_def.soをロードできません

pythonスクリプトを実行していますが、このエラーが発生します。

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

両方のファイルはanaconda2/libディレクトリにあります。このエラーを修正するにはどうすればよいですか?ありがとう。

48
Chris Parry

Condaを使用する場合は、次の2つのコマンドを試してください。

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

問題が解決するはずです。

99
Zaikun Xu

Anaconda3(バージョン4.2.0)をインストールした後、この問題に遭遇しました。私の修正は簡単で、mklを使い続けることができました。最新のnumpyバージョンにアップデートするだけです。

conda update numpy
34
Drew Swartz

デフォルトでmklが有効になっている状態で出荷されたAnaconda 4.0.0にこの問題があることに注意してください。以下の簡単なpythonテストで再現できるため、問題は確かにAnacondaにあります。

実際の問題は、Anacondaが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'
$
14
yanir

同じ問題が発生し、次のコマンドを使用して解決しました。

conda install nomkl

この議論から解決策を得た https://github.com/BVLC/caffe/issues/3884

5
Masud

MLPRegressorの実行時にscikit-learn 0.19とnumpy 1.13.3を使用して(MARSと呼ばれるアルゴリズムを実行するpyearthと呼ばれるパッケージでも)同じ問題が発生しました。問題の根本はpythonがAnacondaインストールの一部であるが、scikit-learnとnumpyはpipを介してインストールされたため、mklへの期待が一致してはならないと考えています。

残念ながら、私のフレームワークは私ではなく、会社の専任の管理者によって管理されているため、numpyの再コンパイルをまだ試みていません。しかし、 このスレッド に基づいて回避策を見つけることができました: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に追加すると、問題が消えます。それは非常にハックです。それが何をしているのかを正確に知っていると言ったら嘘をつくでしょう( しかしこれは役に立ちます )、したがって、numpyの再コンパイルがよりクリーンな修正であることを望んでいます。しかし、少なくともそれは動作します。

これらのパッケージのバージョンでmklを使用する方が、パフォーマンス面で優れていることに注意してください。 nomklバージョンのインストールは回避策ですが、真の解決策ではありません。

3
Pavel Komarov

上記で提供されたすべてのソリューションはうまくいきませんでしたが、良い妥協点を見つけました。

同じエラーがあり、Anacondaを自分のコンピューターに保持し、鋼は(numpyとscipyの)良好なプロセスパフォーマンスのためにmklを使用したい人のために、私が提案する解決策:

.bashrcファイルを編集します。

ファイルでexport PATH="/home/anaconda2/bin:$PATH"のようなものを探します。

#を先頭に置いて、スクリプトからコメントを付けます:#export PATH="/home/anaconda2/bin:$PATH"

新しいターミナルを開き、ベースpythonインストールを実行する必要があります。

それは私のために働いた、それが役立つことを願っています。

1
Klipiklop

ValilutzikとZaikun Xuのスレッドを追加したかった。まだ十分なポイントがないため、コメントを追加できません。
conda install nomkl numpy scipy scikit-learn numexprは、mklとmkl-serviceを削除することなく、私のために働きました。

nomklが遅くなる場合のLeeの質問への回答を追加します。mklはIntel数学カーネルライブラリであり、Intel cpus用に手動で最適化されています。 nomklはこれに従ってOpenBlasを使用します。 https://docs.continuum.io/mkl-optimizations/ Intel cpusの多くの行列演算ではmklが非常に高速であるようです( https: //software.intel.com/en-us/articles/performance-comparison-of-openblas-and-intel-math-kernel-library-in-r
nomklがAMD cpusの方が速いと言っている人を見ました(AMDでmklが正しく機能しないためでしょうか?)

1
libphy

誰かがsimilarの問題を抱えていて、libmkl_p4m.soまたはlibmkl_p4.soが見つからないというエラーを受け取った場合(これは特定のnumpy関数を呼び出すときに)、異なるpythonモジュールを再インストール/更新し、Anacondaのさまざまなバージョンに復帰/更新しようとしましたが、どちらも機能しませんでした。しかし、anacondaを完全にアンインストールしてから(バージョン4.4.10に)再インストールすると、問題が解決することがわかりました。

1
KamKam