ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

conda 環境下で mkl のロードに失敗するときの対処法あれこれ

この記事は

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 は幻想だった