本記事の内容
Windows10マシンにCUDA使ってTensorflowが動くところまで機械学習環境を構築します。
導入環境
CPU: Intel core-i9 9900K
GPU: RTX2080Ti
OS: Windows10 Pro
入れるもの
Visual Studio 2017 community
CUDA 10.0
cuDNN 7.4.1 for CUDA10.0
Anaconda 2019.03 for Windows 64 bit
tensorflow-gpu==2.0.0rc0
python packageいろいろ (numpy, pandas, scipy, matplotlib, seaborn, scikit-learn)
CUDA, cuDNN, tensorflowのバージョン選定
今回使うGPUはturingアーキテクチャのRTX2080TiですのでCUDAは10.0以降でないと使えません。
https://en.wikipedia.org/wiki/CUDA
PyPIに置いてあるtensorflow-gpuは特定のバージョンのCUDA用にビルドされたものですので、例えばwindows用にビルドされたtensorflow-gpu==1.13.0ではCUDA9しか使えません。2019年5月20日現在CUDA10以降対応のビルドはtensorflow-gpu==2.0.0alphaのみで、CUDA10.0用のビルドとなります。自分でビルドすれば1.13.0でCUDA10.1を使うようなことも出来るようですがpipでインストール出来ちゃうならそれで良いですよね。tensorflow2では書き方含めいろいろ変わっちゃいますが、今回の用途ならそれで構いません。
https://www.tensorflow.org/install/source_windows
cuDNNのバージョンは〇〇以降という指定がされてる筈なんですが、どこに書いてあるのか見つけられませんでした。こちらの記事にcuDNN 7.4.1以降対応とありましたので、7.4.1を使うことにしました。
https://dev.infohub.cc/tensorflow2-alpha-gpu/
ということで、使用バージョンは以下となります。
CUDA 10.0
cuDNN 7.4.1 for CUDA10.0
tensorflow-gpu==2.0.0alpha
1. Visual Studio 2017 communityをインストールする
MicrosoftのサイトからVisual Studio 2017 communityをダウンロードしてインストールします
https://visualstudio.microsoft.com/ja/vs/older-downloads/
オプション設定メニューでC++によるデスクトップ開発とユニバーサルWindowsプラットフォーム開発を有効にしてインストールします
2. CUDA, cuDNNをインストールする
NVIDIAの公式サイトからダウンロードしてインストールします。僕の環境だとWin10, x86_64になります。
https://developer.nvidia.com/cuda-downloads
インストールを実行します。グラフィックドライバーも一緒に入れてくれます。
システムの環境変数のPATHに以下3つを追加します。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\libnvvp
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\CUPTI\libx64
PATHが通ったか確認しておきます。
> where nvcc.exe nvvp.exe cupti64*
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin\nvcc.exe
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\libnvvp\nvvp.exe
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\CUPTI\lib64\cupti64_100.dll
ついでにnvccコマンドを呼んでみます。
> nvcc -V
これでバージョン情報が表示されたら正常です。
3. cuDNNをインストールする
公式サイトからダウンロードします。
今回はcuDNN v7.4.1 for CUDA10.0のWindows10用のものを使用しました。
https://developer.nvidia.com/rdp/cudnn-download
ダウンロードしてきたcudnn-10.0-windows10-x64-v7.4.1.5.zipを解凍し、出てきたフォルダを「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0」にコピーします。
4. Anacondaでpython環境をインストール
公式サイトからWindows用python3系64bit版インストーラーをダウンロードしてインストールします。
https://www.anaconda.com/distribution/
5. conda環境を作ってpackageをインストールする
Anaconda Promptを起動してconda環境をつくります。2019年8月時点でtensorflowはpython3.5~3.6にしか対応していません。必ずpythonのバージョンを指定するようにします。指定しないとpython 3.7がインストールされてしまってtensorflowが正常に動きません (importに失敗するはずです)。以下では「tf」という名前でpython=3.6のconda環境を作成します。
(base) > conda create -n tf python=3.6
conda環境をつくったら有効にしてtensorflow-gpuをインストールします。他のpackageをインストールした後にtensorflow-gpuをインストールするとtensorflow-gpuのimportに失敗するようになる事があるので最初にインストールして動作を確認するのがオススメです。
(base) > conda activate tf
(tf) > pip install tensorflow-gpu==2.0.0rc0
(tf) > python
>>> import tensorflow as tf
上記でインポートがすんなり通ったらCUDA, cuDNNが正常にインストールされています。
6. 機械学習系パッケージをインストールする
(tf) $ pip install pip optuna tensorflow_addons numpy pandas xlrd sklearn scipy catboost xgboost lightgbm matplotlib seaborn boruta pydot3 graphviz ipywidgets jupyter tqdm pyarrow psutil
これでとりあえずの機械学習環境は用意できたと思います。
えんじょい
上手くいかないときにチェックすべきこと
- pythonのバージョンが3.5または3.6か (3.7はダメ)
- VC++コンパイラが入っているか (CUDAインストール時にVC++コンパイラがないことを警告されていないか)
- グラフィックボードに対応したCUDAを使っているか (2080TiだとCUDA10.0以降)
- CUDAバージョンに合ったcuDNNを使っているか (CUDAバージョンごとにcuDNNは別になるので注意)
- nvcc.exe, nvvp.exe, cupti64_***.dllにパスが通っているか
- tensorflow-gpuのバージョンは適切か (pipでインストールできるビルド済みtensorflowは特定のCUDAバージョンでしか使えない)
- ぜんぶ合ってるのにimportが通らない場合はconda環境を作り直して最初にtensorflowをインストールすると直ることがある
詳しくはこの辺を参照
https://en.wikipedia.org/wiki/CUDA
https://www.tensorflow.org/install/source_windows
https://dev.infohub.cc/tensorflow2-alpha-gpu/
更新履歴
20190905: conda環境作成~パッケージインストール手順を修正しました
20190905: 上手くいかないときにチェックすべきことを追記しました