更改 Ray RLlib Training 的 Logdir 而不是 ~/ray_results

Posted

技术标签:

【中文标题】更改 Ray RLlib Training 的 Logdir 而不是 ~/ray_results【英文标题】:Change Logdir of Ray RLlib Training instead of ~/ray_results 【发布时间】:2020-09-26 04:33:59 【问题描述】:

我正在使用 Ray & RLlib 在 Ubuntu 系统上训练 RL 代理。 Tensorboard 用于通过将其指向 ~/ray_results 来监控训练进度,其中存储了所有运行的所有日志文件。未使用 Ray Tune。

例如,在开始新的 Ray/RLlib 训练运行时,将在

处创建一个新目录
~/ray_results/DQN_ray_custom_env_2020-06-07_05-26-32djwxfdu1

为了可视化训练进度,我们需要启动 Tensorboard 使用

tensorboard --logdir=~/ray_results

问题:是否可以配置 Ray/RLlib 将日志文件的输出目录从 ~/ray_results 更改为另一个位置?

另外,不用登录到类似DQN_ray_custom_env_2020-06-07_05-26-32djwxfdu1的目录,这个目录名可以自己设置吗?


尝试失败:尝试设置

os.environ['TUNE_RESULT_DIR'] = '~/another_dir`

在运行ray.init() 之前,但结果日志文件仍在写入~/ray_results

【问题讨论】:

如果你设置 upload_dir 来调整应该可以工作:docs.ray.io/en/master/tune/tutorials/… @CGFoX 我没有使用 Tune,只使用 Ray 和 RLlib...您的建议是否仍然适用? 我还没有找到在没有tune 的情况下配置目录的方法,但我会在完成后更新您。顺便说一句,使用tune 你必须设置local_dir 而不是upload_dir 【参考方案1】:

是否可以配置 Ray/RLlib 将日志文件的输出目录从 ~/ray_results 更改到另一个位置?

目前无法使用 RLib CLI 工具 (rllib) 进行配置。

如果你对Python API没问题,那么,如documentation中所述,tune.run的参数local_dir负责指定输出目录,默认为~/ray_results

另外,不是登录到一个名为 DQN_ray_custom_env_2020-06-07_05-26-32djwxfdu1 之类的目录,这个目录名称可以自己设置吗?

这由tune.runtrial_name_creator 参数控制。它必须是一个接受 Trial 对象并将其格式化为字符串的函数,如下所示:

def trial_name_id(trial):
    return f"trial.trainable_name_trial.trial_id"

tune.run(...trial_name_creator=trial_name_id)

【讨论】:

【参考方案2】:

不使用 Tune,您可以使用 rllib 的“Trainer”更改 logdir。如果您想指定保存日志的位置,“Trainer”类接受一个可选的“logger_creator”(参见here)。

一个具体的例子:

    定义您的自定义记录器创建器(您可以简单地修改默认的):
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
    将此 logger_creator 传递给培训师,然后开始培训:
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()

您将使用您指定的命名约定在“~/another_ray_results/subdir”下找到训练结果(即 TensorBoard 事件文件、参数、模型...)。

【讨论】:

是否有理由使用tempfile.mkdtemp 而不是os.makedirs?对我来说,如果我们像这样手动指定日志目录,似乎不需要。

以上是关于更改 Ray RLlib Training 的 Logdir 而不是 ~/ray_results的主要内容,如果未能解决你的问题,请参考以下文章

强化学习rllib简明教程 ray

如何评估在 rllib (Ray) 中自定义环境中训练的演员?

前端设计框架Lynda - Bootstrap 4 Essential Training (Jan 2018 Update)

CS224W(task12)GAT & GNN training tips

rllib 使用自定义注册环境

在经过培训的环境中,如何在特定状态下评估策略?