"BOKU"のITな日常

62歳・文系システムエンジニアの”BOKU”は日々勉強を楽しんでます

Tensorflowを1.6以上にすると、CPUによっては実行できなくなる/tensorflowのバージョン指定インストールの方法

Tendorflowのバージョンを、1.6以上にあげるのはリスクがあります。 

1.5.0までは問題なくtensorflowを実行できていたPCで、突然、実行不可能になる場合があるみたいです。

f:id:arakan_no_boku:20190223140326j:plain

 

tensorflowのバージョンアップで動かなくなった

 

自分は1.5.0から1.8.0にあげた後、突然「ImportError: DLL load failed: ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。」というエラーがでるようになって、tensorflowを動かすことができなくなりました。

Traceback (most recent call last):
File "C:\anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 14, in swig_import_helper
return importlib.import_module(mname)
File "C:\anaconda3\envs\tensorflow\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 666, in _load_unlocked
File "<frozen importlib._bootstrap>", line 577, in module_from_spec
File "<frozen importlib._bootstrap_external>", line 914, in create_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
ImportError: DLL load failed: ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。

どうも、tensorflowはバージョン1.6から、AVX(Advanced Vector Extensions)をサポートしていないCPUでは実行できなくなったっぽいのです。

github.com

e-words.jp

 

まとめた部分を引用すると。

Starting with TensorFlow 1.6, binaries use AVX instructions which may not run on older CPUs.

つまり

TensorFlow 1.6以降、バイナリはAVX命令を使用します。

これは古いCPUでは実行できません。

ということです。 

CPUの非互換なので、どうしようもないみたいですね。

 

tensorflowのダウングレード

 

上記のエラーがでたら、Tensorflowは1.5.0にダウングレードするしかないです。

 

 

単純な上書きダウングレードはうまくいかない

 

一度バージョン1.8.0にしたものを、なかったことにして、1.5.0を入れ直すのはなかなかうまくいきません。 

バージョンを指定してインストールすれば、自動的にpipが処理してくれて、ダウングレードできるような記事を参考に、やってみたところ、自分のPCでは微妙・・な状態になりました。

確かに、処理は正常終了して、上記のエラーもでなくはなりました。

でも、「pip list」で確認すると、tensorflowのバージョンは 1.8.0のままになってたりしてます。 

気にしないで使う手もあるかもしれませんが、少々気持ち悪いです。

 

 

新しい仮想環境を作ってインストールしなおす

 

違う方法をとることにします。 

幸い、自分の環境は「anaconda」です。 

conda create で新しい仮想環境を作って、そこに1.5.0をインストールし直すのが一番てっとり速いです。

 

ダウングレード用仮想環境構築とバージョン指定インストール

 

まず、仮想環境を作ります。 

pythonのバージョンは絶対3.5でないとだめです。 

python=3.6にすると、後の工程で「pip install・・」の時にエラーになります。 

conda create -n tensorflow1.5 python=3.5

作成した仮想環境をアクティブにします。 

activate tensorflow1.5

バージョン1.5を指定してインストールします。 

pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-1.5.0-cp35-cp35m-win_amd64.whl

 

2018/10/11追記

>上記のやり方がネットではよくでてきますけど、以下のやり方でもいけました。

>以下は1.5.0を指定してインストールしています。

pip install --upgrade tensorflow==1.5.0

 >ようするに、バージョンを==で指定してやればよい・・と。

>この方がかなり楽です。

 

さていけたかな。

pip list | find "tensor"

OKみたいです。

f:id:arakan_no_boku:20180620205735j:plain

ためしに、IDLEを起動して、いくつか実行してみましたが、正常に処理されました。 

 

最後に

 

やれやれ。 

それにしても、tensorflowはシビアですね。 

古いCPUなんかバシバシ切り捨てられます。 

まあ、技術が進歩するときって、こんなものなんでしょうけど。