Tendorflowのバージョンを、1.6以上にあげるのはリスクがあります。
1.5.0までは問題なくtensorflowを実行できていたPCで、突然、実行不可能になる場合があるみたいです。
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では実行できなくなったっぽいのです。
まとめた部分を引用すると。
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みたいです。
ためしに、IDLEを起動して、いくつか実行してみましたが、正常に処理されました。
最後に
やれやれ。
それにしても、tensorflowはシビアですね。
古いCPUなんかバシバシ切り捨てられます。
まあ、技術が進歩するときって、こんなものなんでしょうけど。