TensorFlow 2.0 Alpha版が公開されているので、GPU版のTensorFlow 2.0.0 Alpha0の環境をWindowsで作成する方法を載せておきます。
なお、既にWindows向けにビルドしてあるパッケージを使用する方法で環境を作成するので、TensorFlow 2.0 Alphaのビルド方法については載せていません。
Contents
インストール手順
事前準備
公式サイトでもTensorFlow 2.0 Alpha(GPU版)のインストール手順が公開されていますが、GPU版を動かすためには、CUDA 10.0とcuDNN 7.4.1以上が必要になります。(CUDAとcuDNNの導入方法の詳細はnVIDIA CUDA Toolkit 10 のインストールを参考にしてください)
また、以下のCUDAとCUPTIのパスを、環境変数PATHに追加してください。
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
公開されているビルド済みのパッケージは、CUDA 10.0を利用する前提でビルドしてあります。そのため、CUDA 10.1など異なるバージョンのCUDAを利用している場合は、そのままでは動きません。CUDA 10.1で動かしたい場合は、後半に載せている追加の手順を参考にしてください。
仮想環境の作成とTensorFlow 2.0 Alphaのインストール
以下の手順で仮想環境tf2a0
を作成し、TensorFlow 2.0 Alpha0を導入します。なお、Python.orgの純粋なPython 3.6.8を利用しています。
> python -m venv C:\venvs\tf2a0 > C:\venvs\tf2a0\Scripts\activate.bat > python -m pip install --upgrade pip > pip install tensorflow-gpu==2.0.0-alpha0
これでTensorFlow 2.0 Alpha 0の導入が完了です。導入されたパッケージは次のようになります。
(tf2a0) >pip list Package Version -------------------- -------------------- absl-py 0.7.0 astor 0.7.1 gast 0.2.2 google-pasta 0.1.4 grpcio 1.19.0 h5py 2.9.0 Keras-Applications 1.0.7 Keras-Preprocessing 1.0.9 Markdown 3.0.1 numpy 1.16.2 pip 19.0.3 protobuf 3.7.0 setuptools 40.6.2 six 1.12.0 tb-nightly 1.14.0a20190301 tensorflow-gpu 2.0.0a0 termcolor 1.1.0 tf-estimator-nightly 1.14.0.dev2019030115 Werkzeug 0.14.1 wheel 0.33.1
コマンドプロンプトから、簡単に動作確認が可能です。
(tf2a0) C:\>python -c "import tensorflow as tf; print(tf.__version__); print(tf.keras.__version__);" 2.0.0-alpha0 2.2.4-tf
CUDA 10.1で利用したい場合の追加手順
TensorFlow 2.0 AlphaはCUDA 10.0向けにビルドしてあるので、CUDA 10.1を利用していると実行時に以下のようなエラーが表示されます。(要は必要なCUDAのdllファイルが見つからない…という事)
> python -c "import tensorflow as tf; print(tf.__version__); print(tf.keras.__version__);" Traceback (most recent call last): File "c:\venvs\tf2a0\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in <module> from tensorflow.python.pywrap_tensorflow_internal import * File "c:\venvs\tf2a0\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 28, in <module> _pywrap_tensorflow_internal = swig_import_helper() File "c:\venvs\tf2a0\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 24, in swig_import_helper _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description) File "C:\Python36\lib\imp.py", line 243, in load_module return load_dynamic(name, filename, file) File "C:\Python36\lib\imp.py", line 343, in load_dynamic return _load(spec) ImportError: DLL load failed: 指定されたモジュールが見つかりません。 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<string>", line 1, in <module> File "c:\venvs\tf2a0\lib\site-packages\tensorflow\__init__.py", line 27, in <module> from tensorflow._api.v2 import audio File "c:\venvs\tf2a0\lib\site-packages\tensorflow\_api\v2\audio\__init__.py", line 8, in <module> from tensorflow.python.ops.gen_audio_ops import decode_wav File "c:\venvs\tf2a0\lib\site-packages\tensorflow\python\__init__.py", line 49, in <module> from tensorflow.python import pywrap_tensorflow File "c:\venvs\tf2a0\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 74, in <module> raise ImportError(msg) ImportError: Traceback (most recent call last): File "c:\venvs\tf2a0\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in <module> from tensorflow.python.pywrap_tensorflow_internal import * File "c:\venvs\tf2a0\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 28, in <module> _pywrap_tensorflow_internal = swig_import_helper() File "c:\venvs\tf2a0\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 24, in swig_import_helper _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description) File "C:\Python36\lib\imp.py", line 243, in load_module return load_dynamic(name, filename, file) File "C:\Python36\lib\imp.py", line 343, in load_dynamic return _load(spec) ImportError: DLL load failed: 指定されたモジュールが見つかりません。 Failed to load the native TensorFlow runtime. See https://www.tensorflow.org/install/errors for some common reasons and solutions. Include the entire stack trace above this error message when asking for help.
CUDA 10.1のdllファイルを認識させる方法
CUDA 10.0向けにビルドされたTensorFlowの場合、*_100.dll
という名前のDLLファイルをロードするようになっています。そのため、CUDA 10.1で導入されているDLLファイルに対して*_100.dll
というファイル名でシンボリックリンクを作成し、DLLファイルがロードできるようにします。(DLL Hellの問題を逆手にとった対応)
なお、DLLファイルに含まれるAPIのインターフェースが変わっている場合は、DLLファイル名が一致したとしても正しく動作しません。CUDA 10.1はCUDA 10.0から変わった部分が少ないので大抵の部分は動くと思いますが、もしかすると一部の機能は正しく動かないかもしれません。
仮想環境をC:\venvs\tf2a0
に作成した場合、その配下のScripts
フォルダがPATHの先頭に来るようになるので、名前を変えたDLLファイルへのシンボリックリンクも、Scriptsフォルダ配下に作成します。こうしておけば、影響範囲が今回の仮想環境の範囲内だけになり、オリジナルのCUDA 10.1環境などに影響を与えることはありません。
コマンドプロンプトを管理者モードで起動し、以下コマンドでScriptsフォルダ配下にシンボリックリンクを作成します。
> cd /d "C:\venvs\tf2a0\Scripts" > mklink nppisu64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nppisu64_10.dll" > mklink cufftw64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cufftw64_10.dll" > mklink nppc64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nppc64_10.dll" > mklink nvblas64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvblas64_10.dll" > mklink cudart32_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cudart32_101.dll" > mklink cudart64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cudart64_101.dll" > mklink nppicom64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nppicom64_10.dll" > mklink nppitc64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nppitc64_10.dll" > mklink nppicc64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nppicc64_10.dll" > mklink nvrtc-builtins64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvrtc-builtins64_101.dll" > mklink cuinj64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cuinj64_101.dll" > mklink nppim64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nppim64_10.dll" > mklink nppidei64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nppidei64_10.dll" > mklink npps64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\npps64_10.dll" > mklink nppial64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nppial64_10.dll" > mklink nvrtc64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvrtc64_101_0.dll" > mklink nppist64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nppist64_10.dll" > mklink nppig64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nppig64_10.dll" > mklink cublasLt64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cublasLt64_10.dll" > mklink nppif64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nppif64_10.dll" > mklink curand64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\curand64_10.dll" > mklink cublas64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cublas64_10.dll" > mklink cusparse64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cusparse64_10.dll" > mklink cufft64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cufft64_10.dll" > mklink nvgraph64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvgraph64_10.dll" > mklink cusolver64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cusolver64_10.dll" > mklink cupti64_100.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\CUPTI\lib64\cupti64_101.dll"
シンボリックリンクを作成したら、Python環境のコンソールに戻ってDLLファイル(のシンボリックリンク)が認識されているか、whereコマンドで確認します。
(tf2a0) C:\>where *_100.dll c:\venvs\tf2a0\Scripts\cublas64_100.dll c:\venvs\tf2a0\Scripts\cublasLt64_100.dll c:\venvs\tf2a0\Scripts\cudart32_100.dll c:\venvs\tf2a0\Scripts\cudart64_100.dll c:\venvs\tf2a0\Scripts\cufft64_100.dll c:\venvs\tf2a0\Scripts\cufftw64_100.dll c:\venvs\tf2a0\Scripts\cuinj64_100.dll c:\venvs\tf2a0\Scripts\cupti64_100.dll c:\venvs\tf2a0\Scripts\curand64_100.dll c:\venvs\tf2a0\Scripts\cusolver64_100.dll c:\venvs\tf2a0\Scripts\cusparse64_100.dll c:\venvs\tf2a0\Scripts\nppc64_100.dll c:\venvs\tf2a0\Scripts\nppial64_100.dll c:\venvs\tf2a0\Scripts\nppicc64_100.dll c:\venvs\tf2a0\Scripts\nppicom64_100.dll c:\venvs\tf2a0\Scripts\nppidei64_100.dll c:\venvs\tf2a0\Scripts\nppif64_100.dll c:\venvs\tf2a0\Scripts\nppig64_100.dll c:\venvs\tf2a0\Scripts\nppim64_100.dll c:\venvs\tf2a0\Scripts\nppist64_100.dll c:\venvs\tf2a0\Scripts\nppisu64_100.dll c:\venvs\tf2a0\Scripts\nppitc64_100.dll c:\venvs\tf2a0\Scripts\npps64_100.dll c:\venvs\tf2a0\Scripts\nvblas64_100.dll c:\venvs\tf2a0\Scripts\nvgraph64_100.dll c:\venvs\tf2a0\Scripts\nvrtc-builtins64_100.dll c:\venvs\tf2a0\Scripts\nvrtc64_100.dll
Scriptsフォルダ配下の*_100.dll
ファイルが見つかっていれば、後は通常通りTensorFlow 2.0 Alpha 0が使用できます。
(tf2a0) C:\>python -c "import tensorflow as tf; print(tf.__version__); print(tf.keras.__version__);" 2.0.0-alpha0 2.2.4-tf
簡単に試した感じでは、CUDA 10.1、cuDNN 7.5の組み合わせでTensorFlow 2.0 Alpha0(GPU版)を利用できていますが、全てが正しく動くかどうかは分かりません。気になる場合は、無難にCUDA 10.0を使った方が良いと思います。