端の知識の備忘録

技術メモになりきれない、なにものか達の供養先

Windows10 + anaconda + cuda 10.0環境でTensorflow2の導入

概要

今更だけどもWindows10のcuda10.0固定環境にてTensorflow2を使いたくなったのでインストールをしたときのメモ。

TensorflowでGPUを使おうとすると、ドライババージョンやCUDAバージョン、GPUのCompatibility、対応するPython、cuDNN、Tensorflowのバージョンととにかく依存関係の処理が面倒くさい……

今の時代大人しくクラウドnvidiaのマシンイメージ入れてDockerであれこれいじるのが一番ラクだし再現性も確実なのだが、どうしてもオンプレミスのWindows環境でなにかやる機会は無くならないものだ。

特に最近この記事で紹介されているようにGPUをDockerで動かす障壁も無くなってきているので、この記事は別途Linux環境を準備できてしまえば読む必要などない。

まとめ

(2021/5/10)意外と見られているようなので、少し追記した。

  • tensorflow install からCUDAやPython、Tensorflowのバージョン対応を確認
  • 何故かcondaで認識されるCUDAバージョンが異なる現象が発生
  • 仕方がないのでpipでTensorflowをインストールしたらなんとかなった

一応動いたもののあまりきれいな解決ではないので、詳しい人いたら教えてください。

追記

結局これはCondaの仮想環境が引き起こしている問題ですので、Condaを使わなければこの問題にはぶち当たらない。もしかしたら .condarcで仮想環境で使うCUDAのパスを変えたりできれば下に記したエラーは回避できるのかもと思ったり。

ただ私は別の記事でも書いたがAnacondaは商用利用のライセンスが面倒になったことやこういう特殊な仮想環境にまつわるトラブルが絶えないということもあり、最近は使うのをやめてしまった。

AnacondaなしでTensorflow + GPUの環境を作るのもきちんとバージョンを合わせた上で手順を踏めば実はそんなに難しくないので、本記事にあるような特殊な事情( Windows10 + anaconda + cuda 10.0がどうしても必要)がない場合、下記URLなどを参考にインストールを試みるのをおすすめする。

Python 3.7, TensorFlow 1.15, Keras, MatplotLib, opencv-python,その他Python 開発環境(JupyterLab, spyder)のインストール(Windows 上)

ここのサイトは非常に詳細かつステップバイステップで手順を記してくれているので、とても参考になります。CUDA、cuDNNのインストールもここのサイト見ながら入れるのがおすすめです。

詳細な手順は下へ

前提

  • Windows 10 pro 1909
  • conda 4.8.4
  • CUDA toolkit(cuda_10.0.130_win10_network.exe をインストール済み)

はインストール済みとします。

CUDAドライバーはこちらから

> nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 442.23       Driver Version: 442.23       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 2070   WDDM  | 00000000:42:00.0  On |                  N/A |
| 45%   38C    P8    16W /  N/A |   1012MiB /  8192MiB |     11%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    No running processes found                                               |
+-----------------------------------------------------------------------------+

nvidiaドライバーのバージョンは442.23なので、CUDA10.0には問題なく対応しているはず。 CUDA toolkit documentation

インストールするバージョンの確認

まず、Tensorflow + CUDA + CUDNN + Pythonのバージョン対応を確認する。ここを怠ると面倒なことになる。

tensorflow install の下のほう。

今回の場合CUDA10.0に固定するのがネックになるので、これに合わせようとすると 結果、Pythonは3.6、Tensorflow2.0、CUDNN7.4が最新になるらしい

また、どうやらTensorflow2.0はまだCPU版とGPU版が統合されていないようなので、インストール時にはtensorflow-gpuを指定する必要がある。

Python3.6のAnaconda環境を作成

> conda create -n tensorflow2 python=3.6

cuDNN インストール

> conda install cudnn==7.3.1

    added / updated specs:
      - cudnn==7.3.1
The following packages will be downloaded :

    package                    |            build
    ---------------------------|-----------------
    cudnn-7.3.1                |       cuda10.0_0       148.7 MB
    ------------------------------------------------------------
                                           Total:       148.7 MB



The following NEW packages will be INSTALLED:

    cudatoolkit        pkgs/main/win-64::cudatoolkit-10.0.130-0
    cudnn              pkgs/main/win-64::cudnn-7.3.1-cuda10.0_0

tensorflow-gpuのインストール

なぜかtensorflow-gpuのインストールをcondaからしようとすると、

> conda install tensorflow-gpu==2.0.0

The following specifications were found to be incompatible with your system:

    - feature:/win-64:: _cuda==10.2=0 
    - feature:|@/win-64::_cuda==10.2=0

Your installed version is: 10.2

といわれてしまいインストールできない。

nvcc -V の結果は

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:04_Central_Daylight_Time_2018
Cuda compilation tools, release 10.0, V10.0.130

としっかりCUDA10.0なのに。。。

この問題は、どうやらcondaが独自のCUDAを持つことに起因する?しかし、cudnnインストール時にcuda-toolkitも同時にインストールされており、そのバージョンは10.0であるためこのエラーが起こる理由にはならないような気も... Cuda Problem #35270 -pytorch-

あまりpipとcondaを混ぜてはいけないというのは広く言われていることであるが、condaが原因であるならばということで、今回は仕方なく

pip install tensorflow-gpu==2.0.0

を行ったところ何の問題もなくインストールができた。

from tensorflow.python.client import device_lib 
print(device_lib.list_local_devices())


[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 2016828516408465505
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 6624727531
locality {
  bus_id: 1
  links {
  }
}
incarnation: 17117474705175694148
physical_device_desc: "device: 0, name: GeForce RTX 2070, pci bus id: 0000:42:00.0, compute capability: 7.5"
]

ときちんとGPUを認識しているようである。

Tensorflow関連の記事

RadeonでTensorFlowを使える!tensorflow-directmlがすごいというお話 - 端の知識の備忘録