2021年1月時点では、TensorFlow 2.3.0が公開されています。
しかし、TensorFlow 2系で動くサンプルコードはまだまだ少ないです。
実際、サンプルコードやライブラリは、TensorFlow 1.14.0を利用しているケースが多いです。
そのため、githubで見つけたコードが動かないのは日常茶飯事となっています。
また、そのコードがCPU版のTensorFlow 1.14.0で動くなら、まだマシです。
中には、GPU版のTensorFlow 1.14.0専用ということもあります。
そうなると、TensorFlow 1.14.0(GPU版)をインストールする必要が出てきます。
このような状況の人には、参考となる記事内容となっています。
ただし、TensorFlow 1.14.0(GPU版)のインストールは失敗する可能性が高いです。
新しく購入したPCであればあるほど、その可能性は高まります。
本記事の内容
- TensorFlow 1.14.0(GPU版)のインストールに失敗する理由
- TensorFlow 1.14.0(GPU版)のシステム要件
- TensorFlow 1.14.0(GPU版)のインストール
- TensorFlow 1.14.0(GPU版)の動作確認
それでは、上記に沿って解説していきます。
TensorFlow 1.14.0(GPU版)のインストールに失敗する理由
新しいPCであるほど、TensorFlow 1.14.0(GPU版)のインストールに失敗します。
その理由は、TensorFlow 1.14.0(GPU版)が古いからです。
こう書くだけだと、元も子もありません。
もう少し説明すると、GPUはハード(デバイス)であり、環境に大きく依存します。
その環境依存の大きいGPUを利用するためには、利用する側もその依存関係に縛られます。
利用する側とは、TensorFlow 1.14.0(GPU版)のことです。
つまり、TensorFlowはGPUの事情に振り回されると言えます。
この関係性において、GPU側がバージョンアップしたら、どうなるでしょうか?
ハード依存が大きいので、互換性を保つのは難しいでしょう。
そうなると、TensorFlowは動かない可能性が高いです。
じゃあ、TensorFlow側もバージョンアップしますよね。
グダグダ書きましたが、簡単に言うと次の一言です。
「TensorFlowのGPU版は、システム要件が厳しい!!」
では、次ではTensorFlow 1.14.0(GPU版)のシステム要件を確認していきます。
TensorFlow 1.14.0(GPU版)のシステム要件
TensorFlow 1.14.0(GPU版)のシステム要件のポイントは、以下。
- Python
- CUDA
- cuDNN
- Microsoft Visual C++(コンパイラ)
それぞれを説明していきます。
ここを理解することが、最も重要です。
Python
公式にサポートしているPythonのバージョンは、以下。
- Python 3.5
- Python 3.6
- Python 3.7
かなり狭いです。
2021年1月時点におけるPythonの最新バージョンは、3.9.1です。
その一つ前の3.8でもアウトです。
Pythonのバージョンは、以下のコマンドで確認します。
>python -V Python 3.7.9
CUDA
CUDAは、NVIDIA製GPU向けの統合開発環境のことです。
CUDAには、NVIDIA製GPUを利用するためのAPIが用意されています。
つまり、GPUを利用するにはCUDAを利用する必要があるということです。
そして、サポートされているバージョンは一つだけ。
CUDA 10.0 のみです。
CUDA 10.0のインストールは以下の記事で解説しています。
このCUDAが、TensorFlowのGPU版で最も注意すべきポイントです。
cuDNN
これは、それほど気にする必要はありません。
バージョン 7.4でTensorFlowのほぼすべてのバージョンに対応できます。
例外は、TensorFlow 1.12.0(GPU版)だけです。
でも、このバージョンはもう無視しましょう。
なお、cuDNNのインストール自体は簡単です。
単純にフォルダ・ファイルを指定の場所に設置するだけになります。
Microsoft Visual C++(コンパイラ)
公式では、Visual Studio 2017と指定されています。
正確には、そこに含まれるMicrosoft Visual C++のバージョンが重要です。
つまり、Visual C++ 15.0 and 15.7が指定されていることになります。
ただ、最新バージョンであるVisual Studio 2019はVisual Studio 2017,2015と互換性があります。
そのため、Visual Studio 2019をインストールすればOKです。
Visual Studio 2019のインストールは、以下の記事で解説しています。
TensorFlow 1.14.0(GPU版)のインストール
システム要件さえ整えば、もうこっちのモノです。
あとは、pipで簡単にインストールできます。
その前に、現状のインストール済みパッケージを確認しておきます。
>pip list Package Version ---------- ------- pip 20.3.3 setuptools 51.1.2
次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip
では、TensorFlow 1.14.0(GPU版)のインストールです。
TensorFlow 1.14.0(GPU版)のインストールは、以下のコマンドで行います。
pip install tensorflow-gpu==1.14.0
インストールには、しばらくかかります。
インストールが完了したら、パッケージの確認をしましょう。
>pip list Package Version -------------------- ------- absl-py 0.11.0 astor 0.8.1 cached-property 1.5.2 gast 0.4.0 google-pasta 0.2.0 grpcio 1.34.1 h5py 3.1.0 importlib-metadata 3.4.0 Keras-Applications 1.0.8 Keras-Preprocessing 1.1.2 Markdown 3.3.3 numpy 1.19.5 pip 20.3.3 protobuf 3.14.0 setuptools 51.1.2 six 1.15.0 tensorboard 1.14.0 tensorflow-estimator 1.14.0 tensorflow-gpu 1.14.0 termcolor 1.1.0 typing-extensions 3.7.4.3 Werkzeug 1.0.1 wheel 0.36.2 wrapt 1.12.1 zipp 3.4.0
結構な数の依存ライブラリがあるのですね。
これだけ依存ライブラリが多いと、容易に導入するのは困難かもしれません。
最後にTensorFlow 1.14.0(GPU版)の動作確認を行います。
TensorFlow 1.14.0(GPU版)の動作確認
インストールしたTensorFlowのバージョンを確認します。
import tensorflow as tf print(tf.__version__)
上記のコードを実行した結果は・・・
以下の警告が出ます。
それもたくさん。
FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'. _np_qint8 = np.dtype([("qint8", np.int8, 1)])
どうやら、これはNumpyのバージョンがTensorFlow 1.14.0では適さないとのことです。
この警告を非表示にする対応もあるようです。
でも、根本的に解決したいのでNumpyを入れ替えます。
pip install numpy==1.16.5
上記を実行すると、バージョン1.19.5がアンインストールされます。
それと入れ替えで、バージョン1.16.5をインストールするということになります。
では、再度TensorFlowのバージョンを確認しましょう。
1.14.0
警告が消えました。
では、次にGPUの認識状況を確認します。
from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())
上記のコードを実行する、ズラズラと表示されます。
その中に以下のような「GPU」という記述があれば、GPUは認識されています。
[name: "/device:CPU:0" device_type: "CPU" memory_limit: 268435456 locality { } incarnation: 10481203413496209636 , name: "/device:GPU:0" device_type: "GPU" memory_limit: 7059508429 locality { bus_id: 1 links { } }
「device_type: “GPU”」とありますね。
ここまで確認できれば、TensorFlow 1.14.0(GPU版)の動作確認が完了です。