PFRL(v0.3.0)を利用して強化学習プログラムを動かしてみる件 にてPFRL(v0.3.0)を動かしてみましたが、当該記事を書いた直後に、v0.4.0がデプロイされたので、それを試してみました。
以下は私の環境です。
Ubuntu 20.04
NVIDIA-SMI 530.30.02
GeForce RTX 2080 Ti
CUDA 12.1
とりあえず、クリーンな仮想環境を利用して、python3.8ベースで環境を作成します。
$ virtualenv env -p python3.8
$ source env/bin/activate
(env)$ pip install pfrl
そして、pfrlのexampleである、train_dqn_gym.pyを動かしてみます。
(env)$ python train_dqn_gym.py
...
ModuleNotFoundError: No module named 'packaging'
packagingを入れて、ふたたびチャレンジします。
(env)$ pip install packaging
...
gym.error.DeprecatedEnv: Environment version v0 for `Pendulum` is deprecated. Please use `Pendulum-v1` instead.
デフォルトでは、Pendulum-v0になっているので、これをPendulum-v1に変更して再度実行(プログラム内の~v0を片っ端から変更)。
(env)$ python train_dqn_gym.py
...
File "*/env/lib/python3.8/site-packages/pfrl/utils/batch_states.py", line 13, in <genexpr>
return tuple(x.to(device) for x in batched)
AttributeError: 'dict' object has no attribute 'to'
xにtoの属性がない(xはdict)。gymとかtorchのバージョンによって、利用される型が違うのではないかと推測(現時点のgymのバージョンは0.26.2)。
とりあえず、gymのbug reportを見つけ、gymのバージョンを落としてみることに。bug reportでは、0.19.0にダウングレードしていましたが、Pendulum-v1に未対応だったので、0.22.0にダウングレードしました。
(env) $ pip install gym==0.22.0
(env) $ python train_dqn_gym.py
...
ModuleNotFoundError: No module named 'pygame'
pygameをpipで入れて、再度実行すると
(env) $ python train_dqn_gym.py
Output files are saved in results/20230728T121809.087138
WARNING: Since https://github.com/pfnet/pfrl/pull/112 we have started setting `eval_during_episode=True` in this script, which affects the timings of evaluation phases.
INFO:pfrl.experiments.train_agent:outdir:results/20230728T121809.087138 step:200 episode:0 R:-1.1296703617134025
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/20230728T121809.087138 step:400 episode:1 R:-1.2355617196091453
INFO:pfrl.experiments.train_agent:statistics:[('average_q', nan), ('average_loss', nan), ('cumulative_steps', 400), ('n_updates', 0), ('rlen', 400)]
...
なんとか動きました。