ホーム > カテゴリ > Python・人工知能・Django >

WindowsでTensorFlow(GPU)の環境を構築する [初心者向け]

Python/TensorFlowの使い方(目次)

今回はWindows10の本体にPython、TensorFlowをインストールします。

WindowsのWSL2(Windows Subsystem for Linux)の中のUbuntuを利用する方法もありますが、それだと「Windows 10 Insider Preview」に登録してOSを開発版(ベータ版/実験版)にする必要があります。メインで使用しているマシンが不安定だと困るので却下しました。

目次

1. Tensorflowについて
2. Python3.6のインストール
3. NVIDIAドライバのインストール
4. コンパイラのインストール
5. CUDA Toolkitのインストール
6. cuDNNのダウンロード
7. 環境変数の確認
8. cuDNNのコピー
9. TensorFlowのインストール
10. Jupyter Notebook
11. TensorFlowのテスト
12. Matplotlib
13. mnist.py
14. GPUの温度
15. NVIDIAコントロールパネル

Windowsでやる背景

2018年6月頃からUbuntu16.04とDocker、nvidia-docker2でTensorFlow(GPU)をやってましたが、2018年10月から放送大学へ入学とともにAI学習をSTOP。その時にUbuntu環境を壊してWindowsマシンにしてしまいました。

2021年3月には大学の卒業要件の124単位中残り8単位のみになりましたので、今度はWindowsでAI学習を再開することになりました。

1. Tensorflowについて

「Tensorflow 1.x系」と「Tensorflow 2.x系」の2つあります。

TensorFlow 1.x系ではCPU パッケージとGPUパッケージは別のものとなります。今回はTensorFlow 1.x系の最終バージョン(2021年1月7日版)の「tensorflow-gpu==1.15.5」のGPU版をインストールします。

※2.x系でも同様な作業となります。

Tensorflow(GPU)に必要なもの

・Python
※プログラミング言語
・TensorFlow(GPU)
※Pythonパッケージ。pipコマンドでインストール
・Visual Studio
※必要なのはコンパイラ(ビルドツール)
・CUDA Toolkit
※GPUを扱う開発環境
・cuDNN
※ディープラーニング用ライブラリ

各々、必要バージョンは公式に明記されています。

https://www.tensorflow.org/install/source_windows#gpu

Pythonに関しては「tensorflow_gpu-1.x系」と「tensorflow_gpu-2.x系」で動作するバージョンが多い3.6系にします。

Visual Studioに関しては総合開発環境ではなくビルドツールのみとします。

2. Python3.6のインストール

Stable Releases(安定版)のPython3.6.8の「Windows x86-64 executable installer」をダウンロードする。

https://www.python.org/downloads/windows/

ダウンロード後、右クリックメニューで「管理者として実行」から実行する。

インストール後、「コマンドプロンプト」(Winキー + Rでcmdを実行する)で次のコマンドを実行して確認する。

python -V
pip -V

3. NVIDIAドライバのインストール

最初から入っていると思いますので、やるとしたら最後の調整でやります。

4. コンパイラのインストール

「Build Tools for Visual Studio 2019」(MSVC 2017も含む)のコンパイラのみをインストールします。[すべてのダウンロード][Visual Studio 2019のツール][Build Tools for Visual Studio 2019]をダウンロードします。

https://visualstudio.microsoft.com/ja/downloads/

「C++ Build Tools」を選択する。右側にある「MSVC v141 VS2017 C++ x64/x86ビルドツール」もオンにする。そして、インストールボタン。

「MSVC 2015 Update 3」が欲しい方はhttps://visualstudio.microsoft.com/ja/vs/older-downloads/から「Microsoft Build Tools 2015 Update 3」をダウンロードします。

5. CUDA Toolkitのインストール

CUDA Toolkit 10.0

https://developer.nvidia.com/cuda-toolkit-archive

ダウンロード後、インストールします。

「カスタム」にして「CUDA」だけを選ぶようにする。

このままインストールするのですが、次のように失敗した場合。

Visual Studio Integrationのチェックをオフにしてインストールします。

6. cuDNNのダウンロード

tensorflow_gpu-1.15.0の場合はcuDNNは「7.4」と公表されていますが、その環境でTensorFlowを実行すると次のエラーが発生します。

Loaded runtime CuDNN library: 7.4.1 but source was compiled with: 7.6.0. CuDNN library major and minor version needs to match or have higher minor version in case of CuDNN 7.0 or later version. If using a binary install, upgrade your CuDNN library. If building from sources, make sure the library loaded at runtime is compatible with the version specified during compile configuration.

ロードされたランタイムCuDNNライブラリ:7.4.1ですが、ソースは7.6.0でコンパイルされました。 CuDNN 7.0以降のバージョンの場合、CuDNNライブラリのメジャーバージョンとマイナーバージョンは、一致するか、より高いマイナーバージョンである必要があります。 バイナリインストールを使用している場合は、CuDNNライブラリをアップグレードしてください。 ソースからビルドする場合は、実行時にロードされるライブラリが、コンパイル構成中に指定されたバージョンと互換性があることを確認してください。

なので、[Download cuDNN][cuDNN Download][Archived cuDNN Releases][Download cuDNN v7.6.0 (May 20, 2019), for CUDA 10.0] [cuDNN Library for Windows 10]の「7.6.0」をダウンロードします。

https://developer.nvidia.com/cudnn

7. 環境変数の確認

Windowsの「環境変数」(システム環境変数)を確認する。

// Path
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\libnvvp

// CUDA_PATH
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0

// CUDA_PATH_V10_0
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0

8. cuDNNのコピー

ダウンロードしたcuDNNの圧縮ファイルを展開します。

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0

に展開した次のファイルを移動(コピー)するだけです。

・bin\cudnn64_7.dll
・include\cudnn.h
・lib\x64\cudnn.lib
・NVIDIA_SLA_cuDNN_Support.txt

9. TensorFlowのインストール

コマンドプロンプトを管理者として実行します。

pip install tensorflow-gpu==1.15.5

pip freeze

NumPyが新しすぎるのでダウングレードします。

pip uninstall numpy
pip install numpy==1.16.4

9-1. GPUの確認

コマンドプロンプトで次のコマンドを実行する。

python

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

2021-03-28 23:19:31.922346: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll
>>> device_lib.list_local_devices()
2021-03-28 23:19:34.326462: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2021-03-28 23:19:34.338584: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2021-03-28 23:19:34.4a04959: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties:
name: GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.6705
pciBusID: 0000:01:00.0
2021-03-28 23:19:34.405140: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll
2021-03-28 23:19:34.409500: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_100.dll
2021-03-28 23:19:34.413287: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_100.dll
2021-03-28 23:19:34.414921: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_100.dll
2021-03-28 23:19:34.419925: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_100.dll
2021-03-28 23:19:34.423048: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_100.dll
2021-03-28 23:19:34.434567: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2021-03-28 23:19:34.434801: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
2021-03-28 23:19:35.002616: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1159] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-03-28 23:19:35.002798: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1165]      0
2021-03-28 23:19:35.003651: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1178] 0:   N
2021-03-28 23:19:35.004071: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1304] Created TensorFlow device (/device:GPU:0 with 9640 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:01:00.0, compute capability: 6.1)
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 14911962606196949283
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 10108528231
locality {
  bus_id: 1
  links {
  }
}
incarnation: 7057132613506236887
physical_device_desc: "device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:01:00.0, compute capability: 6.1"
]

GPUが表示されていればOK。私の場合は「メインメモリ32GB」で「GeForce GTX 1080 Ti」(11GB)を使用しています。

9-2. CUDAのバージョン確認

9-3. cuDNNのバージョン確認

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include\cudnn.h
---
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 0
---
※上記だと7.6.0

10. Jupyter Notebook

コマンドプロンプトを管理者として実行します。

[Jupyter Notebookのインストール]

pip install jupyter

[Jupyter Notebookの起動]

cd C:\Users\ユーザー名\Desktop
jupyter notebook

http://localhost:8888/treeがブラウザで自動的に表示されます。

ブラウザの右側にある[New]「Python3」で新しい「Untitled.ipynb」を作成します。

1+1を入力して▶Runを押すと実行できます。

確認したら、[Edit][Delete Cells]で全てを削除します。(一つのセルは残ります) 次に[File][Close and Halt]で終了します。

Jupyter Notebookを閉じるときはログアウトしてからコマンドプロンプトでCtrl+Cです。次からTensorFlowのテストを行います。

11. TensorFlowのテスト

Jupyter Notebookで行いますがpythonコマンドからでも実行可能です。

※コードはTensorFlow1.x系です。

11-1. Hello World

import tensorflow as tf
 
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
sess.close()

結果は11-3へ。

11-2. 行列演算(加算)

次の行列演算をTensorFlowで実行します。

import tensorflow as tf
import numpy as np
 
with tf.Session():
    input1 = tf.constant(1.0, shape=[2, 3])
    input2 = tf.constant(np.reshape(np.arange(1.0, 7.0, dtype=np.float32), (2, 3)))
    output = tf.add(input1, input2)
    result = output.eval()
print(result)

結果は11-3へ。

11-3. 結果

12. Matplotlib

ついでにMatplotlibもインストールします。

pip install matplotlib 

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.plot([1, 3, 2, 4])
plt.title('Untitled')
plt.ylabel('Y label')
plt.xlabel('X label')

関連記事:Matplotlibの使い方

13. mnist.py

MNISTはAIのアルゴリズムや開発手法などを学ぶ際に使用されます。最初に学ぶものなのでプログラム言語の「Hello World」的な存在です。

[mnist.py]

from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf

#mnistデータを格納したオブジェクトを呼び出す
mnist = input_data.read_data_sets("data/", one_hot=True)

"""モデル構築開始"""
#入力データを定義
x = tf.placeholder(tf.float32, [None, 784])
#整形
img = tf.reshape(x,[-1,28,28,1])

#畳み込み層1
f1 = tf.Variable(tf.truncated_normal([5,5,1,32], stddev=0.1))
conv1 = tf.nn.conv2d(img, f1, strides=[1,1,1,1], padding='SAME')
b1 = tf.Variable(tf.constant(0.1, shape=[32]))
h_conv1 = tf.nn.relu(conv1+b1)

#プーリング層1
h_pool1 = tf.nn.max_pool(h_conv1, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')

#畳み込み層2
f2 = tf.Variable(tf.truncated_normal([5,5,32,64], stddev=0.1))
conv2 = tf.nn.conv2d(h_pool1, f2, strides=[1,1,1,1], padding='SAME')
b2 = tf.Variable(tf.constant(0.1, shape=[64]))
h_conv2 = tf.nn.relu(conv2+b2)
#プーリング層2
h_pool2 = tf.nn.max_pool(h_conv2, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')


#畳み込まれているものをフラットな形に変換
h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])

#全結合層
w_fc1 = tf.Variable(tf.truncated_normal([7*7*64, 1024], stddev=0.1))
b_fc1 = tf.Variable(tf.constant(0.1, shape=[1024]))
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, w_fc1) + b_fc1)

#出力層
w_fc2 = tf.Variable(tf.truncated_normal([1024, 10], stddev=0.1))
b_fc2 = tf.Variable(tf.constant(0.1, shape=[10]))
out = tf.nn.softmax(tf.matmul(h_fc1, w_fc2) + b_fc2)

#正解データの型を定義
y = tf.placeholder(tf.float32, [None, 10])
#誤差関数(クロスエントロピー)
loss = tf.reduce_mean(-tf.reduce_sum(y * tf.log(out + 1e-5), axis=[1]))

#訓練
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

#評価
correct = tf.equal(tf.argmax(out,1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))

init =tf.global_variables_initializer()

"""実行部分"""
with tf.Session() as sess:
    sess.run(init)
    #テストデータをロード
    test_images = mnist.test.images
    test_labels = mnist.test.labels

    for step in range(1000):
        train_images, train_labels = mnist.train.next_batch(50)
        sess.run(train_step, feed_dict={x:train_images ,y:train_labels})

        #100ステップごとに精度を検証
        if step % 100 == 0:
            acc_val = sess.run( accuracy, feed_dict={x:test_images, y:test_labels})
            print('Step %d: accuracy = %.2f' % (step, acc_val))

これは「TensorFlowではじめるDeepLearning実践入門」の参考書のコードです。著作権は参考書の著者にあります。

原本(MITライセンス):https://github.com/thinkitcojp/TensorFlowDL-samples/blob/master/conv/mnist.py

※2018年発行の書籍なのでWARNINGがでますが実行可能です。

エラーが発生した場合

「ModuleNotFoundError: No module named 'tensorflow.examples.tutorials'」というエラーが発生した場合は「tutorials」がインストールされていません。https://github.com/tensorflow/tensorflow/tree/r1.15の[Code][Download ZIP]からダウンロードします。

tensorflow-r1.15\tensorflow\examples
の中にあるtutorialsのフォルダを
C:\Program Files\Python36\Lib\site-packages\tensorflow_core\examples
の中にコピーすればOKです!

14. GPUの温度

Ubuntu16.04の時は「NVIDIA X Server Setting」でGPUの温度が表示されていたのですが、Windowsの「NVIDIAコントロールパネル」では表示されないようです。

その代わりに「タスクマネージャー」の[パフォーマンス][GPU]の下部に表示されるようです。

15. NVIDIAコントロールパネル

環境によってはこの時点で「NVIDIAコントロールパネル」が開けなくなっている場合があります。そのままでも良い方はスキップしてください。

ドライバをダウンロードします。

https://www.nvidia.co.jp/Download/index.aspx?lang=jp#

[GeForce GTX 1080 Tiの場合]

※全て初期設定のままでインストールします。

以上となります。長時間、お疲れさまでした。

おもちゃのAI研究室

https://www.petitmonte.com/ai/





関連記事



公開日:2021年03月29日 最終更新日:2021年04月16日
記事NO:02895