本文讨论conda环境下的RL实验相关配置。
首先是在conda中创建环境。这里需要注意,因为stable_baselines3需要python3.8。如果采用了3.7及以下版本,则会在后期报错:
ValueError: unsupported pickle protocol: 5
无法打开pickle文件。
(1)首先创建虚拟环境。
conda create -n XXX python=3.8
python>=3.8会自带pickle。
(2)激活并进入该虚拟环境。
activate XXX
(3)安装相关环境依赖包:gym,pygame,stable_baselines3,pytorch。
关于pytorch,需要根据硬件条件进行配置。最好pytorch>=1.13.0。
# CUDA 11.6
conda install pytorch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 pytorch-cuda=11.6 -c pytorch -c nvidia
# CUDA 11.7
conda install pytorch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 pytorch-cuda=11.7 -c pytorch -c nvidia
# CPU Only
conda install pytorch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 cpuonly -c pytorch
然后安装其它包:
pip install gym
pip install pygame
pip install stable-baselines3
pip install --user git+https://github.com/eleurent/highway-env
or
pip install highway-env
这里可能会存在找不到stable_baselines3模块的情况,一个简单暴力的解决方案是直接把stable_baselines3模块放在文件的同一目录下。(如果没有出现这个情况,请忽略)
后期可能需要用到moviepy来做记录,可以也提前安装好。
pip install moviepy
之后可能会出现import失败报错,尝试重装pillow。这一部分稍微有些玄学,得多试,下面是三种方法:
pip uninstall Pillow
pip install Pillow
python -m pip uninstall Pillow
python -m pip install Pillow
conda install Pillow
最后运行相关的样例代码,如下:
import gymnasium as gym
import highway_env
from stable_baselines3 import DQN
env = gym.make("highway-fast-v0")
model = DQN('MlpPolicy', env,
policy_kwargs=dict(net_arch=[256, 256]),
learning_rate=5e-4,
buffer_size=15000,
learning_starts=200,
batch_size=32,
gamma=0.8,
train_freq=1,
gradient_steps=1,
target_update_interval=50,
verbose=1,
tensorboard_log="highway_dqn/")
model.learn(int(2e4))
model.save("highway_dqn/model")
# Load and test saved model
env = gym.make("highway-fast-v0", render_mode='rgb_array')
model = DQN.load("highway_dqn/model")
while True:
done = truncated = False
obs, info = env.reset()
while not (done or truncated):
action, _states = model.predict(obs, deterministic=True)
obs, reward, done, truncated, info = env.step(action)
env.render()
如果是CPU上跑上述代码,可能会花费20分钟左右,算是一个可以接受的时间长度了。下面是个人电脑配置,仅供参考。
也可以考虑改变model.learn()里面的参数大小,进行相应的观察。
可以得到最终结果(动图)。