TensorFlow(GPU) と Keras を用いて機械学習を行う環境を、
Windows Server 2019 上に Anaconda をベースにして作成した時のメモ。
今回の最終目標は Keras-RL を用いて Deep Q-Learning を行うこと。
Contents
事前調査
Keras-RL は Keras が必要で、Keras は TensorFlow で動かす。
(Keras は TensorFlow に取り込まれたが、Keras-RL は今の所 Keras が必要)
TensorFlow はできれば GPU で処理させたい。
GPU を使うとなると自分の手元では以下の選択肢がある。
- Ubuntu + TensorFlow(GPU)
- Windows Server + TensorFlow(GPU)
- Docker on Ubuntu
なお、私は macOS も利用しているが、
データ解析, メールやスライド作成など比較的軽い作業が多く、ノートPCである。
この手の開発は何かと情報が少なかったり、遅かったりするのでメインにはしていない。
また CUDA のサポートも v10.2 で辞めるそうだ。
というわけで、macOS はひとまず考えないことにする。
また、3つ目の TensorFlow(GPU)など一切の環境含む Dockerコンテナは、
NVIDIA Docker (NVIDIA Container Toolkit) を使っており、
これは Linux上でしか動きません。
TensorFlow のページを見ると、Linux や macOS では
ライブラリやドライバの ver指定が非常に細かく動かすのが大変そうに"見えた" ので(*後述)、
まずは Windows Server 2019 上に環境を作ってみることにした。
GPU は、NVIDIA Quadro RTX 6000。
環境作り
各種インストーラーを指定する際に、陽に Windows Server 2019 が見当たらない場合は、
Windows 10 用を用いれば大丈夫だった。
グラフィックドライバのインストール
後述する CUDA や cuDNN 等は特定のver以降のドライバ上でしか動かないので、
新しめのドライバを入れておく。(グラフィックドライバとCUDAの対応表)
この手のドライバのインストールは、リモートでやってはいけない(1敗)。
面倒だがコンソールからやるようにする。
リモートからやって失敗した場合は、
失敗時のゴミが残っていることがあるようなので、
アンインストールしてからやりなおす。
CUDA, cuDNN のインストール
TensorFlow, GPU とかでググると、必須の手順として説明されるが、
Anaconda で環境を作る場合は多分要らない(*後述)。
今回、これが分かったので後で Ubuntu 環境でも試して検証してみるつもり。
私はこれを後から気づいたので、試したときは両者をインストールはした。
その際の手順を念の為残しておく。
CUDA
ココ からダウンロードする。
OS, Arch などを指定してダウンロード。
network と local はどちらでも良い。
やはりリモートでインストールしてはいけない。
cuDNN
無料の会員登録が必要。
CUDAのverを指定してダウンロード。
Windows の場合、C:\tools\cuda に別途展開する方法もあるようだが、
cuDNN と CUDA間のバージョンの連動が必要なようなので、
私は CUDA 関係のファイルがある以下のディレクトリに直接展開した。
--> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
Path の設定
上記CUDA関連ファイルへ Path を通す。
"システムの詳細設定 → 環境変数" と巡るとユーザーの変数が設定できないので、
"コントロールパネル → ユーザーアカウント → ユーザーアカウント → 環境変数の変更" と行き、
上半分のユーザーの環境変数の中から Path に以下を追加する。
(vX.x はCUDAのバージョン番号)
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.x\bin
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.x\extras\CUPTI\lib64
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.x\include
Anaconda
Anaconda の環境は前提としておきます。
入っていない場合は、難しくないので自分で適当に入れてください。
以下は専用テスト仮想環境の作成と、必要モジュールのインストールのみ説明。
(Anaconda v2019.10, conda v4.7.12)
専用仮想環境の作成
別途 CPU で Keras-RL v0.4.2 との動作を確認できた、
TensorFlow v1.14.0, Keras v2.2.4 を入れる。
1 2 3 4 5 6 7 8 9 10 11 |
conda create -n keras-rl-gpu python=3.7.4 conda activate keras-rl-gpu conda install matplotlib numpy jupyter conda install tensorflow-gpu=1.14.0 conda install keras pip install keras-rl pip install gym # jupyter kernel の作成 ipython kernel intall --user --name=keras-rl-gpu --display-name=keras-rl-gpu |
TensorFlow (GPU) の動作確認
jupyter から先程作成した keras-rl-gpu の kernel を指定して、
単に
import tensorflow としてみたり、
以下のようにデバイスとして見えるかなど。
in [1]:
1 2 |
from tensorflow.python.client import device_lib device_lib.list_local_devices() |
out[1]:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[name: "/device:CPU:0" device_type: "CPU" memory_limit: 268435456 locality { } incarnation: 10666911495820709609, name: "/device:GPU:0" device_type: "GPU" memory_limit: 20309735506 locality { bus_id: 1 links { } } incarnation: 17525338586124666502 physical_device_desc: "device: 0, name: Quadro RTX 6000, pci bus id: 0000:d8:00.0, compute capability: 7.5"] |
どこかから TensorFlow の簡単なサンプルをコピペで持ってきて、
ELSA System Graph 等で GPU のロードを確認できれば尚良し。
Anaconda で環境を作る場合の CUDA, cuDNN について
conda install tensorflow-gpu とした場合に、依存関係の解決で、
cudatoolkit や cudnn が合わせてインストールされる。
私はシステムには CUDA v10.2.89 を入れてあったが、
tensorflow-gpu=1.14.0 を指定した場合には、cudatoolkit として v10.0.130 がインストールされた。
これらは C:\Users\[uname]\.conda\envs\[envname] 以下に配置されており、
conda activate 等としたときは Path に適切な値が設定されるようだ。
Windows Server 上の jupyter をリモートから利用する
jupyter(と firewall)させ適切に設定すれば、リモートから接続できるが、
リモートデスクトップ・セッションを1つ専有するのは勿体ないので、
SSH でログイン、Anaconda に載って jupyter を叩けるようにする。
jupyter の設定
jupyter notebook --generate-config で 雛形を生成。
(C:\Users\[uname]\.jupyter\jupyter_notebook_config.py)
以下を適当に設定。
1 2 3 4 5 6 7 |
c.NotebookApp.allow_remote_access = True c.NotebookApp.ip = "*" # c.NotebookApp.notebook_dir = ... # c.NotebookApp.password = u'sha1:xxxx...' # c.NotebookApp.password_required = True c.NotebookApp.token = '' # c.NotebookApp.port = 8888 |
SSH(サーバー) の設定
アプリ → オプション機能の管理 → 機能の追加 → OpenSSHサーバー をインストール。
コンピュータの管理 → サービス から "OpenSSH SSH Server" を起動, 自動に設定
これでリモートからシェル(コマンドプロンプトの画面)に入れるようになる。
ちなみに、WSL を入れている場合、
ログイン後に bash と打つと、WSL の方に切り替えることもできる。
Anaconda 環境に (素の)コマンドプロンプトから入れるようにする
Path に以下を追加。
- C:\ProgramData\Anaconda3\bin
- C:\ProgramData\Anaconda3\Scripts
SSH でログイン後、
conda init cmd.exe。
再接続すると、
conda activate [envname] などで Anaconda 環境に入れるようになる。
デスクトップ環境においても、Windows メニューから Anaconda プロンプトを開く必要がなくなります。
今回の場合、SSH でログイン後、
1 2 |
conda activate keras-rl-gpu jupyter notebook |
として jupyter を起こしておけば、リモートから GPU を使って TensorFlow の演算等が行える。