NVIDAのグラフィックボードを積んだPCがあるので、kerasやtensorflow をgpuで動かしたいと思っていたのですが、開発環境を作るのがたいへんですね。
バージョンの組み合わせとか、もうおまじないのレシピみたいです。
windowsで何とかできたので覚書。金子邦彦研究室のサイトがとても参考になりました。ありがとうございました。
インストールしたものの最終的なバージョンのまとめ
OS: windows 10 pro
cuda 10.1
cuDNN 7.6.5
conda 4.8.3
python 3.7
tensorflow-gpu 2.1.0
keras 2.4.3 –> 2.3.1 (2020/8/31変更)
gym 0.17.2
keras-rl 0.4.2
keras-rl2 1.0.4
GPU基本環境(GPU使用しないならスキップ)
NVIDIAドライバ インストール
NVIDIA CUDAツールキット 10.1 のインストール
金子邦彦研究室NVIDIA CUDA ツールキット 10.1,10.0 のインストール(Windows 上)参照
バージョン確認はコマンドプロンプトから
1 |
nvcc -V #10.1 |
NVIDIA cuDNN インストール
金子邦彦研究室 NVIDIA cuDNN 7 のインストール(Windows 上)参照
Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.1
展開して既存のフォルダにコピー。
バージョンは、7.6.5
Anaconda で仮想環境を作りtensorflow-gpu/tensorflow をインストール
pythonとパッケージのバージョン管理をするには、windows だったらconda がよさそうです。以下を参考にしました。
Anaconda 3 2020年2月版(Python 開発環境)と人工知能フレームワーク類のインストール(Windows 上)
バージョン確認はコマンドプロンプトから
1 |
conda info #4.8.4 |
Anaconda prompt を管理者権限で開いて、以下のコマンドでcondaのパッケージの更新と古いパッケージの削除。
1 2 3 |
conda update -n base conda conda update --all conda clean --packages |
※ -y のオプションを入れると y/n が出ないですむ。
例:conda clean -y –packages
仮想環境作成。py37tf21という仮想環境名にした場合。python3.7で作成(python3.8ではうまくいきませんでした)。
1 |
conda create -n py37tf21 python==3.7 |
仮想環境をアクティベートして、tensorflow-gpuをinstall。
1 2 3 |
conda activate py37tf21 conda install -y tensorflow-gpu==2.1.0 tensorflow-datasets # gpu利用 conda install -y tensorflow==2.1.0 tensorflow-datasets # gpu使用せず |
確認。
1 |
python -c "import tensorflow as tf; print( tf.__version__ )" # v2.1.0 |
強化学習環境を整える
Keras, openaiGym, keras-rl のインストール。gym とkeras-rlは、conda では入らないですね。pipで入れました。
1 2 3 4 |
conda install keras==2.3.1 pip install gym==0.17.2 pip install keras-rl==0.4.2 pip install keras-rl2==1.0.4 |
この最後のkeras-rl2というのが重要で、これがないとサンプルプログラムが動きませんでした。
gym とは、OpenAI Gym のことで、強化学習の様々な環境がそろっているすごいライブラリです。
github はこちら。
keras-rlというのは、OpenAI Gym と動かすことができるDQNなどの深層強化学習モデルです。自分でモデルを簡単に改良できます。
githubはこちら。
これで、keras-rl のguthub のexamplesの、dqn_cartpole.py, dqn_pendulum.pyのどちらも動きました。
ただし、
1 2 3 |
from keras.models import Sequential from keras.layers import Dense, Activation, Flatten from keras.optimizers import Adam |
のkerasの初めに以下のようにtensorflow.をつける修正が必要です。
1 2 3 |
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Activation, Flatten from tensorflow.keras.optimizers import Adam |
以下、棒立てのデモ、dqn_cartpole.py です。モデルの部分はすぐに改良できそうですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import numpy as np import gym from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Activation, Flatten from tensorflow.keras.optimizers import Adam from rl.agents.dqn import DQNAgent from rl.policy import BoltzmannQPolicy from rl.memory import SequentialMemory ENV_NAME = 'CartPole-v0' # Get the environment and extract the number of actions. env = gym.make(ENV_NAME) np.random.seed(123) env.seed(123) nb_actions = env.action_space.n # Next, we build a very simple model. model = Sequential() model.add(Flatten(input_shape=(1,) + env.observation_space.shape)) model.add(Dense(16)) model.add(Activation('relu')) model.add(Dense(16)) model.add(Activation('relu')) model.add(Dense(16)) model.add(Activation('relu')) model.add(Dense(nb_actions)) model.add(Activation('linear')) print(model.summary()) # Finally, we configure and compile our agent. You can use every built-in Keras optimizer and # even the metrics! memory = SequentialMemory(limit=50000, window_length=1) policy = BoltzmannQPolicy() dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=1e-2, policy=policy) dqn.compile(Adam(lr=1e-3), metrics=['mae']) # Okay, now it's time to learn something! We visualize the training here for show, but this # slows down training quite a lot. You can always safely abort the training prematurely using # Ctrl + C. dqn.fit(env, nb_steps=50000, visualize=True, verbose=2) # After training is done, we save the final weights. dqn.save_weights('dqn_{}_weights.h5f'.format(ENV_NAME), overwrite=True) # Finally, evaluate our algorithm for 5 episodes. dqn.test(env, nb_episodes=5, visualize=True) |
コメントを残す