更改 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.run
的trial_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) 中自定义环境中训练的演员?
前端设计框架Lynda - Bootstrap 4 Essential Training (Jan 2018 Update)