PFRL(https://github.com/pfnet/pfrl) を利用して強化学習プログラムを動かしてみました。ちなみにPFRLとはPFNが提供しているPyTorch向けの深層強化学習ライブラリです。PFRLv0.3.0(2021年7月 version)を動かそうとすると、なかなか動かなかったので、備忘録として動かすまでの工程を記録してみました。
2023年7月追記:2023年7月にv0.4.0がリリースされました。それを動かしてみた記事はこちらになります。
PFRLはPytorchベースなので、pytorchを入れ、その後、pfrlをいれます(あとで、pip freezeの結果は載せます)。利用したマシン・環境の詳細は以下の通りです。古いという突っ込みはry。
Ubuntu 18.04.6 LTS
NVIDIA-SMI 440.100
GeForce RTX 2080
まずは、PytorchとPFRLをpipにていれてみます。空の仮想環境を利用しました。
(pfrl)$ pip install torch
(pfrl)$ pip install pfrl
ここで、PFRLのexamplesにあるgymのプログラム(https://github.com/pfnet/pfrl/blob/master/examples/gym/train_dqn_gym.py) を動かしてみると。
(pfrl)$ python train_dqn_gym.py
ImportError: cannot import name 'Monitor' from 'gym.wrappers' (/home/****/src/pfrl/lib/python3.8/site-packages/gym/wrappers/__init__.py)
Monitorがないと怒られる。ここで@sekishokuさんの記事を考慮し、gymのバージョン等をダウングレードします。
(pfrl)$ pip install gym[atari]==0.22.0
再度実行すると
(pfrl)$ python train_dqn_gym.py
gym.error.DeprecatedEnv: Environment version `v0` for `Pendulum` is deprecated.
Please use the latest version `v1`
とでるので、ソースコード内のPendulumをv1に編集し再度実行すると
ModuleNotFoundError: No module named 'pygame'
pygameをいれて、再度ry
(pfrl)$ pip install pygame
(pfrl)$ python train_dqn_gym.py
今度はcudaのバージョンが古すぎて怒られる
Traceback (most recent call last):
File "train_dqn_gym.py", line 272, in <module>
main()
File "train_dqn_gym.py", line 175, in main
agent = DQN(
File "/home/***/src/pfrl/lib/python3.8/site-packages/pfrl/agents/dqn.py", line 208, in __init__
assert torch.cuda.is_available()
AssertionError
cudaのバージョンを上げたくないので、torchをデグレードさせる方向で考える。
TorchのHP(https://pytorch.org/get-started/previous-versions/) で調べると
CUDA 10.2
pip install torch==1.12.1+cu102 torchvision==0.13.1+cu102 torchaudio==0.12.1 --extra-index-url >https://download.pytorch.org/whl/cu102
となっているので、torchの1.12.1にダウングレードしてみる
$ pip install torch==1.12.1
そして実行してみると
(pfrl)$ python train_dqn_gym.py
INFO:pfrl.experiments.train_agent:outdir:results/20230705T160731.884995 step:200 episode:0 R:-1.497769952072162
INFO:pfrl.experiments.train_agent:statistics:[('average_q', nan), ('average_loss', nan), ('cumulative_steps', 200), ('n_updates', 0), ('rlen', 200)]
INFO:pfrl.experiments.train_agent:outdir:results/20230705T160731.884995 step:400 episode:1 R:-1.1668629019656298
INFO:pfrl.experiments.train_agent:statistics:[('average_q', nan), ('average_loss', nan), ('cumulative_steps', 400), ('n_updates', 0), ('rlen', 400)]
INFO:pfrl.experiments.train_agent:outdir:results/20230705T160731.884995 step:600 episode:2 R:-1.4407584984543595
INFO:pfrl.experiments.train_agent:statistics:[('average_q', nan), ('average_loss', nan), ('cumulative_steps', 600), ('n_updates', 0), ('rlen', 600)]
INFO:pfrl.experiments.train_agent:outdir:results/20230705T160731.884995 step:800 episode:3 R:-1.2485210908819078
動きました。pip freezeの結果は以下の通りです
(pfrl)$ pip freeze
ale-py==0.7.5
cloudpickle==2.2.1
cmake==3.26.4
filelock==3.12.2
gym==0.22.0
gym-notices==0.0.8
importlib-metadata==6.7.0
importlib-resources==5.12.0
Jinja2==3.1.2
lit==16.0.6
MarkupSafe==2.1.3
mpmath==1.3.0
networkx==3.1
numpy==1.24.4
nvidia-cublas-cu11==11.10.3.66
nvidia-cuda-cupti-cu11==11.7.101
nvidia-cuda-nvrtc-cu11==11.7.99
nvidia-cuda-runtime-cu11==11.7.99
nvidia-cudnn-cu11==8.5.0.96
nvidia-cufft-cu11==10.9.0.58
nvidia-curand-cu11==10.2.10.91
nvidia-cusolver-cu11==11.4.0.1
nvidia-cusparse-cu11==11.7.4.91
nvidia-nccl-cu11==2.14.3
nvidia-nvtx-cu11==11.7.91
pfrl==0.3.0
Pillow==10.0.0
pkg_resources==0.0.0
pygame==2.5.0
sympy==1.12
torch==1.12.1
triton==2.0.0
typing_extensions==4.7.1
zipp==3.15.0