9

我正在使用 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

4

2 回答 2

5

是否可以配置 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)
于 2020-08-13T11:26:45.170 回答
3

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

一个具体的例子:

  1. 定义您的自定义记录器创建器(您可以简单地修改默认的):
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
  1. 将此 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 事件文件、参数、模型...)。

于 2021-02-11T18:13:19.993 回答