Windows10へTensorFlow2をインストールする

## はじめに

4月になって、新しいPCを購入しました。
またゼロからTensorFlow環境を構築したので記録を残します。
ということで、何も入っていない状態からのインストールです。


## 環境

- OS           : Windows 10 64bit
- Python       : Python 3.7.7
- TensorFlow   : 2.1.0
- jupyterlab   : 2.1.1
- CUDA         : 10.1 update 2
- cuDNN        : 7.6.5
- GPU NVIDIA GeForce MX250

## TensorFlow2 の動作要件

TensorFlow2 の動作要件は、[https://www.tensorflow.org/install?hl=ja](https://www.tensorflow.org/install?hl=ja)から確認できます。

- Windows 7 以上<br>
  Windows10にインストールするので問題なし。
- Python 3.5–3.7<br>
  Python 3.7系の最新である、Python 3.7.7 をインストールします。


インストールするツールのバージョンは[https://www.tensorflow.org/install/gpu#pip_package](https://www.tensorflow.org/install/gpu#pip_package)で確認します。

TensorFlow2の場合は下記の要件になります。

- TensorFlow 2.1.0 以降は CUDA 10.1 に対応しています。<br>
  最新は10.2ですが、10.1にします。
- CUDA 10.1の場合、VIDIA GPU ドライバ は 418.x 以降が必要です。<br>
  これは、「NVIDIA コントロール パネル」で確認できます。低い場合はアップデートします。
- cuDNN は7.6 以降が必要です。<br>
  7.6.5をインストールします。


## Python 3.7.7 のインストール

[https://www.python.org/](https://www.python.org/)から、「Downloads」-「All releases」と選択します。
各バージョンのリストがあるので、Python 3.7.7 の Download をクリックします。
Files の一覧から「Windows x86-64 executable installer」をクリックしてダウンロードします。
ダウンロードしたファイルを実行して、インストールします。

インストールが完了したら、下記を実行してバージョンを確認します。

```
>python -V
Python 3.7.7
```

## CPUの拡張命令セットの確認

[こちら](https://qiita.com/yasthon/items/5fc54c3c5530472f9123)を参考に、CPUの拡張命令セットを確認します。

得られた結果は下記です。

```
Vendor ID         : GenuineIntel
CPU name          : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
Microarchitecture : kabylake
Vector instructions supported:
SSE       : Yes
SSE2      : Yes
SSE3      : Yes
SSSE3     : Yes
SSE4.1    : Yes
SSE4.2    : Yes
SSE4a     : --
AVX       : Yes
AVX2      : Yes
BMI1      : Yes
BMI2      : Yes
```

AVX2に対応しているので、TensorFlowは1.6以上をインストール可能です。
現時点で最新のバージョンをインストールします。


## GPUの確認

念のために、GPUを確認しておきます。
購入時点ですでに、「NVIDIA コントロール パネル」がインストールされていたので、これを使用します。

1. デスクトップで右クリックして「NVIDIA コントロール パネル」を選択します。
2. 「ヘルプ」メニューから「システム情報」を選択します。
3. 「グラフィックス カード情」に「GeForce MX250」と書かれています。<br>
   ※「グラフィックス カード情」は、「情報」の脱字ではないです。本当にこのように表示されています。

## Visual Studio 2017 のインストール

[https://docs.nvidia.com/cuda/archive/10.1/cuda-installation-guide-microsoft-windows/index.html](https://docs.nvidia.com/cuda/archive/10.1/cuda-installation-guide-microsoft-windows/index.html)に、CUDA 10.1で必要なものが書かれています。

Visual Studioが必要で、「Table 2. Windows Compiler Support in CUDA 10.1」の表にサポートされているVisual Studioのバージョンが書かれています。

Visual Studio 2019 は、Preview releasesなので、Visual Studio 2017をインストールします。

[https://visualstudio.microsoft.com/ja/downloads/](https://visualstudio.microsoft.com/ja/downloads/)からダウンロードします。
「古いバージョンのダウンロード」をクリックします。
「2017」を展開して、右側の「ダウンロード」をクリックする。

Microsoft アカウントでログインして、ダウンロードします。

今回は、「Visual Studio Community 2017 (version 15.9)」ダウンロードしました。

ダウンロードした「vs_Community.exe」をダブルクリックしてVisual Studio Installer を起動します。
「C++によるデスクトップ開発」を選択して「インストール」をクリックします。


## CUDA 10.1 update 2 のインストール

NVIDIA CUDA Toolkit をダウンロードします。
[https://developer.nvidia.com/cuda-toolkit-archive](https://developer.nvidia.com/cuda-toolkit-archive)にアクセスします。
「CUDA Toolkit 10.1 update2 Archive」を選択して、ダウンロードします。

「Installer Type」は、ネットワークインストーラーを選択しました。（19.9MB）
ちなみにフルインストーラーだと2.5GBのファイルをダウンロードします。

ダウンロードした「cuda_10.1.243_win10_network.exe」をダブルクリックして、インストールします。


## cuDNN 7.6.5 のインストール

cuDNNは、[https://developer.nvidia.com/cudnn](https://developer.nvidia.com/cudnn)からダウンロードします。

「Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.1」を展開して、
「cuDNN Library for Windows 10」をダウンロードします。

ダウンロードした「cudnn-10.1-windows10-x64-v7.6.5.32.zip」を解凍して、
中にあるCUDAディレクトリを任意のディレクトリに置きます。

CUDAを置いたディレクトリをシステム環境変数に設定します。

| 環境変数名 | path |
|:--|:--|:--|
| CUDNN_PATH | c:\tf\CUDA |
| PATHの最後に追加 | c:\tf\CUDA\bin |

※CUDAディレクトリを「c:\tf\」に置いた場合。


## pip のバージョンアップ

TensorFlow2 をインストールするためには、pip 19.0より新しいバージョンが必要です。
バージョンが低いようなら、バージョンアップします。

```
pip install -U pip
```

## TensorFlow2 のインストール

下記コマンドだけでOKです。

```
>pip install tensorflow
```

動作確認を行います。
まずは、下記のファイルを作成します。

```python:tensotflow_test.py
import tensorflow as tf
import os

print(tf.__version__)
print(tf.keras.__version__)

print(tf.random.normal([5, 5]))
```

実行します。
環境変数 TF_CPP_MIN_LOG_LEVEL は、余計なメッセージを表示しないためのものです。

```shell
>set TF_CPP_MIN_LOG_LEVEL=2
>python tensorflow_test.py
2.1.0
2.2.4-tf
tf.Tensor(
[[ 0.9073535  -0.30908114 -1.1792291  -0.03576818 -0.350677  ]
 [-0.30494577  0.0393485  -1.7498294   0.01919838 -0.881274  ]
 [-0.8610118  -1.6675215  -0.9653552   0.4389885  -0.06305566]
 [-0.6703128   0.85750896  1.0951182   0.029854    1.1836303 ]
 [ 0.5926097   0.5141883  -0.84746957  0.668688    0.30143082]], shape=(5, 5), dtype=float32)
```

TensorFlowとKerasのバージョンが表示され、5x5 の乱数も表示されました。
TensorFlowも2.1.0 がインストールされていることが確認できました。

## jupyterlab のインストール

何かと便利なjupyterlab をインストールします。

```shell
>pip install jupyterlab
```

jupyterlab をバックグラウンドで起動します。

```shell
>start /b jupyter lab
```

起動すると、自動的にブラウザでjupyterlab へつながります。

自動的につながらない場合は、ブラウザで```http://localhost:8888/lab```へアクセスます。
tokenは、jupyterlab 起動時のメッセージに書かれています。

## 最後に
TensorFlow2の実行環境ができました。
ゼロからのインストールだと、すんなり完了しました。
後にバージョンアップを行うときが怖いですが、今はこの環境で楽しみます。