PFRL(v0.3.0)を利用して強化学習プログラムを動かしてみる件

PFRL(https://github.com/pfnet/pfrl) を利用して強化学習プログラムを動かしてみました。ちなみにPFRLとはPFNが提供しているPyTorch向けの深層強化学習ライブラリです。PFRLv0.3.0(2021年7月 version)を動かそうとすると、なかなか動かなかったので、備忘録として動かすまでの工程を記録してみました。
**2023年7月追記：2023年7月にv0.4.0がリリースされました。それを動かしてみた記事は[こちら](https://qiita.com/muzzumuzu/items/bdb4a0a4795aed61a976)になります**。
PFRLはPytorchベースなので、pytorchを入れ、その後、pfrlをいれます（あとで、pip freezeの結果は載せます）。利用したマシン・環境の詳細は以下の通りです。古いという突っ込みはｒｙ。
```
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をいれて、再度ｒｙ
```
(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