この記事は
conda 環境下で numpy とかの mkl に依存しているライブラリを使いたいときに遭遇する mkl ロードエラーの解決法やら原因やらのメモです。 conda で python 環境を構築するたびに様々なバリエーションをもってハマるのでいい加減メモりました。
環境
発生するエラー
python で numpy とかをインポートするタイミングで
Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.
みたいなエラーが出てくる。 -v でログを出しても特に助けになるような情報は出てきません。
pip を併用してはいけない
conda 環境下で pip 使ってパッケージ入れると最悪の場合環境がぶっ壊れます。 すでにやっちゃったぜという人は諦めて anaconda ごと入れ直しましょう。 なお、 pip で入れたのが純粋な python パッケージである場合は環境が壊れたりはしないみたいな情報もありますが、そもそも厄介な依存関係地獄とか招き入れたくないので、はなっから混在させないのが正解だと思います。
windows システム側の mkl を無効化する
python 実行環境下で
where mkl_intel_thread.dll
とタイプした時に出てくるパスに
windows\system32\mkl_intel_thread.dll
が居たりする場合、 system32 側の dll をロードしにいってバージョン不整合しているかもしれません。。
対処法としては、 windows\system32\ 以下の mkl から始まるファイルすべての末尾に .bak 付けるとかして無効化します。 where コマンドで
C:\Users\NuPan\Anaconda3\Library\bin\mkl_intel_thread.dll
みたいな anaconda 環境下の mkl だけが出るようになれば OK です。
ちなみに僕はこれでも治りませんでした(半ギレ)
単に最新版がバグってるだけなのでちょっと昔のバージョンに戻す。
conda list
で mkl のバージョンを見てみると 2019.0 ってなってる。 まだ 2018 年なんですけど。 もしかしてと思って anaconda のリポジトリ情報(Mkl :: Anaconda Cloud)を覗きに行くと最終更新が1ヶ月くらい前になってる。 まさかお前か。
ということで過去バージョンの mkl を入れてみる。
conda info mkl
で情報出してみると
mkl 2018.0.3 1 -------------- file name : mkl-2018.0.3-1.tar.bz2 name : mkl version : 2018.0.3 build string: 1 build number: 1 channel : https://repo.anaconda.com/pkgs/main/win-64 size : 178.1 MB arch : None constrains : () license : proprietary - Intel license_family: Proprietary md5 : 3097902ad98b2f408bad39b7482fa200 platform : None subdir : win-64 timestamp : 1528122407885 url : https://repo.anaconda.com/pkgs/main/win-64/mkl-2018.0.3-1.tar.bz2 dependencies: intel-openmp
あたりが良さそうだ。 ということで
conda install mkl=2018.0.3
で 2019.0-118 から 2018.0.3-1 にダウングレード。 が、ダメ(改善せず)。
過去バージョンへのロールバックというセンでちょっとググってみると
のコメントで
A clean py3.6.6 install is broken with 2018.0.3 and 2019.0,
The ordinal 191 could not be located in the dynamic link library C:\conda\Library\bin\mkl_intel_thread.dll
2018.0.2 works. 2018 complains about ordinal 242, 2019 about 191.
e: note this is with miniconda and not the full-fat anaconda distribution.
って言ってる人がいる。まさか…ということで今度は 2018.0.2 にダウングレード。
conda install mkl=2018.0.2
今度は通った! どうやら windows 10 + 2018年10月半ばの最新 conda 環境だとまともに動かないみたいです。
ちなみに…
mkl を intel 公式からダウンロードしたら ok みたいな記事をちょくちょく見かけますが、conda 管理下で完結させたい(意味不明な依存関係を持ち込みたくない)ので試してません。
感想
conda update -all は幻想だった