Nyx*_*nyx 7 python reinforcement-learning ray rllib ray-tune
我正在使用 Ray & RLlib 在 Ubuntu 系统上训练 RL 代理。Tensorboard 用于通过将其指向~/ray_results所有运行的所有日志文件的存储位置来监控训练进度。未使用 Ray Tune。
例如,在开始新的 Ray/RLlib 训练运行时,将在以下位置创建一个新目录
~/ray_results/DQN_ray_custom_env_2020-06-07_05-26-32djwxfdu1
Run Code Online (Sandbox Code Playgroud)
为了可视化训练进度,我们需要使用以下命令启动 Tensorboard
tensorboard --logdir=~/ray_results
Run Code Online (Sandbox Code Playgroud)
问题:是否可以配置 Ray/RLlib 以将日志文件的输出目录从~/ray_results其他位置更改?
另外,不是登录到一个名为类似的目录DQN_ray_custom_env_2020-06-07_05-26-32djwxfdu1,这个目录名称可以由我们自己设置吗?
尝试失败:尝试设置
os.environ['TUNE_RESULT_DIR'] = '~/another_dir`
Run Code Online (Sandbox Code Playgroud)
在运行之前ray.init(),但结果日志文件仍在写入~/ray_results。
不使用 Tune,您可以使用 rllib 的“Trainer”更改日志目录。如果您想指定保存日志的位置,“Trainer”类会采用可选的“logger_creator”(请参阅此处)。
一个具体的例子:
def custom_log_creator(custom_path, custom_str):
timestr = datetime.today().strftime("%Y-%m-%d_%H-%M-%S")
logdir_prefix = "{}_{}".format(custom_str, timestr)
def logger_creator(config):
if not os.path.exists(custom_path):
os.makedirs(custom_path)
logdir = tempfile.mkdtemp(prefix=logdir_prefix, dir=custom_path)
return UnifiedLogger(config, logdir, loggers=None)
return logger_creator
Run Code Online (Sandbox Code Playgroud)
trainer = PPOTrainer(config=config, env='CartPole-v0',
logger_creator=custom_log_creator(os.path.expanduser("~/another_ray_results/subdir"), 'custom_dir'))
for i in range(ITER_NUM):
result = trainer.train()
Run Code Online (Sandbox Code Playgroud)
您将发现训练结果(即 TensorBoard 事件文件、参数、模型等)按照您指定的命名约定保存在“~/another_ray_results/subdir”下。
是否可以配置 Ray/RLlib 将日志文件的输出目录从 ~/ray_results 更改为另一个位置?
目前无法使用 RLib CLI 工具 ( rllib)进行配置。
如果您对 Python API 没问题,那么,如文档中所述,local_dir参数 oftune.run负责指定输出目录,默认为~/ray_results.
另外,不是登录到名为 DQN_ray_custom_env_2020-06-07_05-26-32djwxfdu1 之类的目录,而是可以自己设置该目录名称吗?
这由 的trial_name_creator参数控制tune.run。它必须是一个接受试验对象并将其格式化为字符串的函数,如下所示:
def trial_name_id(trial):
return f"{trial.trainable_name}_{trial.trial_id}"
tune.run(...trial_name_creator=trial_name_id)
Run Code Online (Sandbox Code Playgroud)