Windows 10に、GPU版のTensorFlowを利用するKeras環境を構築する方法を載せておきます。これは2018/12/31時点における手順になります。
Contents
使用環境
KerasとTensorFlow-GPUを導入する環境は次の通りです。なお、Anacondaなど基本的なソフトウェアはインストールが完了していることを前提にした手順になっています。
- CPU: Intel Core i7-7700K
- GPU: nVIDIA GeForce GTX 1080(最新のドライバもインストール済み)
- Windows 10 Pro (64bit)
- Anaconda 2018.12 Python 3.7 version (64bit)
GPU版のTensorFlowを利用するには、CUDAが利用できるGPUカードが必要になります。対応したGPUカードが無い場合は、GPUを利用しない通常のTensorFlowを利用する事になります。(以下手順の tensorflow-gpu を tensorflow と読み替えていただけると、CPU版のKeras & TensorFlow環境を構築できます)
TensorFlowの公式なインストール手順はpipを使ってありますが、今回はAnacondaを利用しているためcondaを使って環境を作成しています。
Anacondaでもpipは利用可能ですが、pipとcondaで競合する可能性があるため、可能であればcondaの利用をお勧めします。
Keras / TensorFlow-GPU の導入方法
Pythonでは仮想環境を作成して作業することが一般的なので、この手順でもKeras/TensorFlow-GPU専用の仮想環境を作成し、そこにTensorFlow-GPUとKerasを導入する流れで作業を進めます。
仮想環境の作成
まずはKeras/TensorFlow-GPU用の仮想環境を作成します。仮想環境は個別に名前を付けて管理しますが、ここでは「keras」という名前で仮想環境を作成しました。
現時点でTensorFlowは、Python3系だとPython 3.4~3.6までの対応になるため、利用するPythonのバージョンは3.6を指定しています。
> conda create -n keras python=3.6
TensorFlow-GPUの導入
仮想環境が作成できたら、以下のコマンドでGPU版のTensorFlowを導入します。
CPU版とGPU版のパッケージ名は異なるので、間違わないように注意してください。
- CPU版: tensorflow
- GPU版: tensorflow-gpu
> conda activate keras > conda install tensorflow-gpu
2018/12/31時点では、依存パッケージの「mkl 2019.1」の導入時に、mklに関するdllファイルのサイズが違っていることによる警告メッセージ(SafetyError)が複数表示されます。これはscikit-learnを導入したときにも表示されていましたが、問題無く利用できています。
TensorFlowでGPUを使うには、本家サイトの要件にも書いてあるとおり、CUDA ToolkitやcuDNNなどが必要になるのですが、conda経由でtensorflow-gpuをインストールするとCUDA Toolkit 9.0やcuDNNなどが仮想環境配下に自動で導入されます。
そのため、個別にCUDA Toolkitなどをインストールする必要はありません。また、ここで導入されるCUDA Toolkitなどは、全て仮想環境配下に導入されるため、他の環境には影響を与えません。
TensorFlowが登場した頃は導入が複雑だった気がしますが、今では拍子抜けするくらい簡単にGPU版のTensorFlowが導入できるようになっています。
私の環境では、TensorFlowとは関係の無い要件でCUDA Toolkit 10やcuDNNなどをOSに直接インストールしているのですが、conda経由で導入されたCUDA Toolkit 9.0は、お互いに競合すること無く動作しています。
TensorFlow-GPUの動作確認
次のコマンドでTensorFlow-GPUの簡単な動作確認が行えます。
python -c "import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"
実行結果(見やすいように少し編集しています)
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2 Found device 0 with properties: name: GeForce GTX 1080 major: 6 minor: 1 memoryClockRate(GHz): 1.8225 pciBusID: 0000:01:00.0 totalMemory: 8.00GiB freeMemory: 6.60GiB Adding visible gpu devices: 0 Device interconnect StreamExecutor with strength 1 edge matrix: 0 0: N Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6361 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0, compute capability: 6.1) tf.Tensor(1388.9957, shape=(), dtype=float32)
サンプルコードを実行したときに「Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2」というメッセージが表示されています。
これは、使っているCPUはAVXやAVX2の命令に対応していても、TensorFlowはAVXやAVX2を使うようになっていない…という参考情報なので、無視しても問題ありません。もし、少しでもパフォーマンスを良くするためにAVXやAVX2を使いたいのであれば、TensorFlowをソースからビルドする必要があります。
ビルド方法の詳細は、公式なビルド方法のサイトを参照してください。
Kerasの導入
TensorFlow-GPUの導入が完了したら、Kerasを導入します。
Kerasもcondaに対応しているため、以下のコマンドでインストールを行います。
> conda activate keras > conda install keras
これで、Kerasのインストールが完了しました。
次のコマンドを実行してKerasとTensorFlowの連携が確認できます。正しくTensorFlowが利用されていれば「Using TensorFlow backend.」と表示されます。
python -c "from keras.models import Sequential; model = Sequential()"
導入されたパッケージ一覧(2018/12/31時点)
最後に、今回導入されたパッケージの一覧を参考までに載せておきます。
主要なパッケージとして、python=3.6.7、keras=2.2.4、tensorflow-gpu=1.12.0、cudatoolkit=9.0、cudnn=7.1.4になっています。(TensorFlowのGPU要件として、cuDNNは7.2以上…となっていたのが少し気にはなりますが、とりあえず問題無く利用できているようです)
> conda activate keras > conda list # packages in environment at C:\Users\Kurozumi\Anaconda3\envs\keras: # # Name Version Build Channel _tflow_select 2.1.0 gpu absl-py 0.6.1 py36_0 astor 0.7.1 py36_0 blas 1.0 mkl ca-certificates 2018.03.07 0 certifi 2018.11.29 py36_0 cudatoolkit 9.0 1 cudnn 7.1.4 cuda9.0_0 gast 0.2.0 py36_0 grpcio 1.16.1 py36h351948d_1 h5py 2.9.0 py36h5e291fa_0 hdf5 1.10.4 h7ebc959_0 icc_rt 2019.0.0 h0cc432a_1 intel-openmp 2019.1 144 keras 2.2.4 0 keras-applications 1.0.6 py36_0 keras-base 2.2.4 py36_0 keras-preprocessing 1.0.5 py36_0 libprotobuf 3.6.1 h7bd577a_0 markdown 3.0.1 py36_0 mkl 2019.1 144 mkl_fft 1.0.6 py36h6288b17_0 mkl_random 1.0.2 py36h343c172_0 numpy 1.15.4 py36h19fb1c0_0 numpy-base 1.15.4 py36hc3f5095_0 openssl 1.1.1a he774522_0 pip 18.1 py36_0 protobuf 3.6.1 py36h33f27b4_0 pyreadline 2.1 py36_1 python 3.6.7 h9f7ef89_2 pyyaml 3.13 py36hfa6e2cd_0 scipy 1.1.0 py36h29ff71c_2 setuptools 40.6.3 py36_0 six 1.12.0 py36_0 sqlite 3.26.0 he774522_0 tensorboard 1.12.1 py36h33f27b4_0 tensorflow 1.12.0 gpu_py36ha5f9131_0 tensorflow-base 1.12.0 gpu_py36h6e53903_0 tensorflow-gpu 1.12.0 h0d30ee6_0 termcolor 1.1.0 py36_1 vc 14.1 h0510ff6_4 vs2015_runtime 14.15.26706 h3a45250_0 werkzeug 0.14.1 py36_0 wheel 0.32.3 py36_0 wincertstore 0.2 py36h7fe50ca_0 yaml 0.1.7 hc54c509_2 zlib 1.2.11 h62dcd97_3