WindowsにKerasとTensorFlow(GPU)をインストールして機械学習の環境を作ろう!

ここ最近は機械学習にはまっていて、前々から気になっていたTensorFlowを試してみたいと思い、実際にWindowsにインストールしてみたので、その導入手順を紹介したいと思います。手順自体は比較的簡単だと思ったのですが、実際にやってみるといくつか引っかかったので、その点なども含め記録として残しておきたいと思います。
まず、TensorFlow(テンソルフロー)について簡単に説明しておくと、ディープラーニングが行える機械学習ライブラリです。Googleが開発しオープンソースで公開しているもので、実際にGoogleの中でも使われている実績のあるライブラリであり、そのため数多くの開発者がこのTensorFlowを利用しています。
WindowsにKerasとTensorFlow(GPU)をインストール!

WindowsにKeras+TensorFlow(GPU)の環境構築に必要なのは以下の3つです。今回はインストールまでの手順からコマンドの詳細まで記述したので、プログラミングの知識がなくてもインストールできるのではないかと思います。機械学習やディープラーニングに興味のある人はぜひ試してみることをおすすめします。
必要なもの
- NVIDIA GeForce GTX グラフィックカード(CPUで動かす場合は必要なし)
- Anaconda(Python)
- CUDA Toolkit 9.0
- cuDNN v7.1.4 for CUDA 9.0
CUDA Toolkit

NVIDIAのサイトのCUDA Toolkit Archiveから過去のCUDA Toolkit 9.0をダウンロードしてインストールします。
CUDA Toolkit Archive私がTensorFlowを入れた6月24日当時ではpipで入るTensorFlowのバージョンが1.8でCUDA9.2が対応しておらず、CUDA Toolkit 9.0とcuDNN v7.1.4 for CUDA 9.0でインストールしました。今後TensorFlowの最新バージョンの対応状況が変わった場合は、動作する最新のバージョンのCUDA Toolkitをインストールすることを調べてからインストールすることをおすすめします。
cuDNN

CUDA Toolkitと対応するcuDNNをダウンロードしてきます。今回の場合はcuDNN v7.1.4 for CUDA 9.0です。cuDNNはNVIFIA DEVELOPERの登録後にダウンロード可能です。
Download cuDNN v7.1.4 (May 16, 2018), for CUDA 9.0
https://developer.nvidia.com/cudnn
ダウンロードしたcuDNNを回答してcudaフォルダ内のbinフォルダの中にあるcudnn64_7.dllをコピーします。

コピーしたcudnn64_7を以下のフォルダ内にコピーします。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin
Anaconda(Python)

Anacondaの公式サイトからPython 3.6 versionのAnacondaをダウンロードします。
Download Anaconda Distribution
ダウンロードしたAnaconda3-5.2.0-Windows-x86_x64.exeを起動します。

「Next」を押します。

「I Agree」を押します。

「Just Me」を選択して「Next」を押します。

インストール先を選択して「Next」をクリックします。

「Add Anaxoda to my PATH envlronment variable」と「Register Anaconda as my default Python 3.6」にチェックを入れて「Install」を押します。

インストールが終わるまでしばらく待ちます。

これでインストールは終了です。「Next」を押します。

「Microsoft VSCode」をインストールするか聞かれるので、もしインストールしてない人は入れておくと開発が楽になります。VSCodeについてはレビュー記事を書いているので、気になる方はそちらをご覧ください。
無料で使える軽量なコードエディタのVisual Studio Code(VS Code)を使ってみよう!
「Finish」を押してAnacondaのインストールは完了です。

Anaconda Navigatorを起動するとこのように表示されます「OK」を押します。

Anaconda Navigatorの画面です。
Anaconda Prompt

WindowsメニューからAnaconda Promptを起動します。pythonと打つとpython 3.6.5がインストールされていることが確認できます。ここからpythonの環境を作っていきます。

Anacondaでは仮想環境を作ることができるのpython3.6でenvironmentを作ります。以下のコマンドを打ちます。
conda create -n py36 python=3.6

以下のコマンドを打ってenvironmentを確認します。
conda info -e
先ほど作成したpy36が追加されていることを確認します。*がついているのが今現在アクティブになっている環境になります。

py36をアクティブにするために以下のコマンドを打ちます。
activate py36
すると(base)C:\Users\admin>となっていたものが(py36)C:\Users\admin>とpy36がアクティブに変わります。

続いてtensorflow-gpu(GPU版)をインストールするコマンドを打ちます。
pip install tensorflow-gpu
GPU版ではなくCPU版をインストールしたい場合は以下のようにします
pip install tensorflow

続いてJupyterをインストールします。jupyterがあるとブラウザ上でpythonのコードを書いて簡単に実行できます。
pip install jupyter
jupyter

Windowsメニューからjupyter Notebookを起動します。右側の「New」から仮想環境のpy36を選択します。

jupyterで仮想環境が表示されない場合は以下のコマンドで確認してください。
jupyter kernelspec list
これでpy36が表示されなければ仮想環境を追加するコマンドを打ちます。
ipython kernel install --user --name=py36 --display-name=py36
もう一度jupyter kernelspec listを表示してpy36が表示されていればOKです。

GPUをTensorFlowで認識できているかjupyterでテストしてみます。
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
これでdevice_type:"GPU"の表記があればGPUがTensorFlowで認識されています。

TensorFlowでGPUが認識されない場合は、tensorflow_self_check.pyを実行してみると原因が解るかもしれません。正しくインストールされていればTensorFlow successfully installed.The installed version of TensorFlow includes GPU support.と表示されます。
TensorFlow on Windows self-check(tensorflow_self_check.py) - GitHub
MNIST動作確認用コード(TensorFlow)のページにアクセスしてコードをコピーして実行してみましょう。
MNIST動作確認用コード(TensorFlow)
このように進んでいけば成功です。

最後にaccuracy(正解率)が表示されれば実行完了です。

TensorFlowの分析中はGPUが上がっていることが確認できます。特にGPUのメモリがギリギリまで使用されるようです。

これでTensorFlowが入ったので最後にkerasを入れましょう。
pip install keras
これでkerasも入り、kerasからTensorFlowを実行する環境が構築できました。あとはコードを書いてディープラーニングを実行すればいいだけです。
TensorFlowのインストールに失敗してしまう場合の対応策
TensorFlowのインストールで一番引っかかったのは、最初の時点でTensorFlowのインストールに失敗しており、その後何度アンインストールしてインストールしても前回ビルドしたキャッシュからインストールが行われて毎度失敗してしまうという現象に陥ってしまったことです。こういう場合は--no-cache-dirをつけて、pipでキャッシュを無効にしてライブラリを再インストールする必要があります。
pip --no-cache-dir install -I TensorFlow
TensorFlowのインストールに失敗してしまう場合はぜひ一度キャッシュを無効にしてみることをおすすめします。
今回の個人的感想&まとめ
今回は久しぶりに開発者向けの記事です。私は最近機械学習で色々と試しているので、その中の一つとしてKerasとTensorFlowを使ってみたわけですが、手順さえわかってしまえば比較的環境構築は簡単だと思います。このブログではあんまりこういう記事は書かないのですが、今回は色々試して解決に時間がかかってしまったので、同じように解決できない人がいた際の助けになればと思い記事に残しました。
今回は導入手順自体は簡単でしたがTensorFlowのインストールのキャッシュとCUDAとcnnvの部分で引っかかりました。TensorFlow自体はインストールが簡単ですぐにCPUでサンプルが動くところまでは行けたのですが、TensorFlowをGPUで動作させるのにはかなり手間がかかりました。なぜGPUで動かないのかというのを色々と調べると、どうやら最新のCUDAバージョン9.2だとTensorFlow1.8が動かないという記述を見かけたので、CUDAバージョン9に下げることが必要でした。それに加えてTensolFlow-GPUのインストールが失敗していることに気がつくのに時間がかかってしまったのがでかかったです。
それにしても予想外のところで導入に時間がかかってしまいましたが、導入自体は非常に簡単で驚きました。Windowsだと少し手間がかかる部分もあるかもしれませんが、MacやLinuxならコマンドでちょちょいとTensorFlowの環境を導入できるんですから楽ですよね。しかも今回はGPU版を導入しましたのでかなり高速に分析を行うことが可能です。私のグラボはGeForce GTX970と少し古いのですがそれでも、6コアのCPUで動かしたCPU版と比較しても10倍近くも高速ですね。グラボを導入している人はGPU版で高速に処理できるのでおすすめです。ちなみに私の動かしたPCの環境の詳細について気になる方は以下の記事を御覧ください。
久しぶりに新しい自作PCを組みました!昔はディープラーニングと言えば、高性能なマシンと高度な知識がなければ到底無理な代物でしたが、今はこういったライブラリが多数出ているので、敷居がだいぶ下がっていますよね。Keras+TensorFlowでニューラルネットワークの構築がこんなに簡単にできてしまうのは驚きです。しかもGPUに対応しているライブラリならCPU処理に比べて何十倍も速度が出ますし、そういった意味でも個人で開発して遊べるレベルまでなったのは非常に良い事だと思います。
TensorFlowによるディープラーニングに興味のある人はぜひ導入してみてはいかがでしょう?