Ray Tune 中的回调函数与指标指南#
如何在 Ray Tune 中使用回调函数?#
Ray Tune 支持在训练过程中的不同时间点调用的回调函数。回调函数可以作为参数传递给 RunConfig
,由 Tuner
接收,您提供的方法将自动被调用。
这个简单的回调函数每次收到结果时只打印一个指标
from ray import tune
from ray.tune import Callback
class MyCallback(Callback):
def on_trial_result(self, iteration, trials, trial, result, **info):
print(f"Got result: {result['metric']}")
def train_fn(config):
for i in range(10):
tune.report({"metric": i})
tuner = tune.Tuner(
train_fn,
run_config=tune.RunConfig(callbacks=[MyCallback()]))
tuner.fit()
有关更多详细信息和可用钩子,请参阅 Ray Tune 回调函数 API 文档。
如何在 Tune 中记录指标?#
您可以在函数和类训练 API 中记录任意值和指标
def trainable(config):
for i in range(num_epochs):
...
tune.report({"acc": accuracy, "metric_foo": random_metric_1, "bar": metric_2})
class Trainable(tune.Trainable):
def step(self):
...
# don't call report here!
return dict(acc=accuracy, metric_foo=random_metric_1, bar=metric_2)
提示
请注意,tune.report()
不适用于传输大量数据,例如模型或数据集。这样做可能会带来巨大的开销,并显着减慢您的 Tune 运行。
哪些 Tune 指标会自动填充?#
Tune 具有自动填充指标的概念。在训练期间,Tune 除了记录用户提供的值之外,还会自动记录以下指标。所有这些指标都可以用作停止条件,或作为参数传递给试验调度器/搜索算法。
config
:超参数配置date
:结果处理时的字符串格式日期和时间done
:如果试验已完成则为 True,否则为 Falseepisodes_total
:总回合数(适用于 RLlib 可训练对象)experiment_id
:唯一实验 IDexperiment_tag
:唯一实验标签(包含参数值)hostname
:工作器的主机名iterations_since_restore
:从检查点恢复工作器后,tune.report
被调用的次数node_ip
:工作器的主机 IPpid
:工作器进程的进程 ID (PID)time_since_restore
:自检查点恢复以来的秒数。time_this_iter_s
:当前训练迭代的运行时长(以秒为单位)(即对可训练函数或类 API 中的_train()
进行一次调用)。time_total_s
:总运行时长(以秒为单位)。timestamp
:结果处理时的时间戳timesteps_since_restore
:自检查点恢复以来的时间步数timesteps_total
:总时间步数training_iteration
:tune.report()
被调用的次数trial_id
:唯一试验 ID
所有这些指标都可以在 Trial.last_result
字典中看到。