|
from easydict import EasyDict |
|
|
|
|
|
env_name = 'PongNoFrameskip-v4' |
|
|
|
if env_name == 'PongNoFrameskip-v4': |
|
action_space_size = 6 |
|
elif env_name == 'QbertNoFrameskip-v4': |
|
action_space_size = 6 |
|
elif env_name == 'MsPacmanNoFrameskip-v4': |
|
action_space_size = 9 |
|
elif env_name == 'SpaceInvadersNoFrameskip-v4': |
|
action_space_size = 6 |
|
elif env_name == 'BreakoutNoFrameskip-v4': |
|
action_space_size = 4 |
|
|
|
|
|
|
|
|
|
gpu_num = 2 |
|
collector_env_num = 8 |
|
n_episode = int(8*gpu_num) |
|
evaluator_env_num = 3 |
|
num_simulations = 50 |
|
update_per_collect = 1000 |
|
batch_size = 256 |
|
max_env_step = int(1e6) |
|
reanalyze_ratio = 0. |
|
eps_greedy_exploration_in_collect = False |
|
|
|
|
|
|
|
|
|
atari_muzero_config = dict( |
|
exp_name= |
|
f'data_mz_ctree/{env_name[:-14]}_muzero_ns{num_simulations}_upc{update_per_collect}_rr{reanalyze_ratio}_ddp_{gpu_num}gpu_seed0', |
|
env=dict( |
|
stop_value=int(1e6), |
|
env_name=env_name, |
|
obs_shape=(4, 96, 96), |
|
collector_env_num=collector_env_num, |
|
evaluator_env_num=evaluator_env_num, |
|
n_evaluator_episode=evaluator_env_num, |
|
manager=dict(shared_memory=False, ), |
|
), |
|
policy=dict( |
|
model=dict( |
|
observation_shape=(4, 96, 96), |
|
frame_stack_num=4, |
|
action_space_size=action_space_size, |
|
downsample=True, |
|
self_supervised_learning_loss=True, |
|
discrete_action_encoding_type='one_hot', |
|
norm_type='BN', |
|
), |
|
cuda=True, |
|
multi_gpu=True, |
|
env_type='not_board_games', |
|
game_segment_length=400, |
|
random_collect_episode_num=0, |
|
eps=dict( |
|
eps_greedy_exploration_in_collect=eps_greedy_exploration_in_collect, |
|
|
|
|
|
type='linear', |
|
start=1., |
|
end=0.05, |
|
decay=int(1e5), |
|
), |
|
use_augmentation=True, |
|
update_per_collect=update_per_collect, |
|
batch_size=batch_size, |
|
optim_type='SGD', |
|
lr_piecewise_constant_decay=True, |
|
learning_rate=0.2, |
|
num_simulations=num_simulations, |
|
reanalyze_ratio=reanalyze_ratio, |
|
ssl_loss_weight=2, |
|
n_episode=n_episode, |
|
eval_freq=int(2e3), |
|
replay_buffer_size=int(1e6), |
|
collector_env_num=collector_env_num, |
|
evaluator_env_num=evaluator_env_num, |
|
), |
|
) |
|
atari_muzero_config = EasyDict(atari_muzero_config) |
|
main_config = atari_muzero_config |
|
|
|
atari_muzero_create_config = dict( |
|
env=dict( |
|
type='atari_lightzero', |
|
import_names=['zoo.atari.envs.atari_lightzero_env'], |
|
), |
|
env_manager=dict(type='subprocess'), |
|
policy=dict( |
|
type='muzero', |
|
import_names=['lzero.policy.muzero'], |
|
), |
|
collector=dict( |
|
type='episode_muzero', |
|
import_names=['lzero.worker.muzero_collector'], |
|
) |
|
) |
|
atari_muzero_create_config = EasyDict(atari_muzero_create_config) |
|
create_config = atari_muzero_create_config |
|
|
|
if __name__ == "__main__": |
|
""" |
|
Overview: |
|
This script should be executed with <nproc_per_node> GPUs. |
|
Run the following command to launch the script: |
|
python -m torch.distributed.launch --nproc_per_node=2 ./LightZero/zoo/atari/config/atari_muzero_multigpu_ddp_config.py |
|
""" |
|
from ding.utils import DDPContext |
|
from lzero.entry import train_muzero |
|
from lzero.config.utils import lz_to_ddp_config |
|
with DDPContext(): |
|
main_config = lz_to_ddp_config(main_config) |
|
train_muzero([main_config, create_config], seed=0, max_env_step=max_env_step) |
|
|