Tune概述
Tune调度集群中进行多次实验。 每个试验都运行一个用户定义的Python函数或类,并通过Tune的Variant Generator的配置变量或用户指定的搜索算法进行参数化。 试验由试验调度员安排和管理。
关于实验调度和搜索算法请参考官网。
导包和初始化Ray
import ray
import ray.tune as tune
# 启动Ray
ray.init()
实验配置
本节将介绍修改代码以运行Tune所需的主要步骤:使用Training API并执行Tune实验。如需看源码实例,点击。
Training API
可以使用基于功能的API( the function-based API)或Trainable API进行训练。
Python函数需要具有以下签名:
def trainable(config, reporter):
"""
Args:
config (dict):搜索算法或者 variant generation.
reporter (Reporter): Handle to report intermediate metrics to Tune.
"""
while True:
# ...
reporter(**kwargs)
reporter将允许您报告用于安排,搜索或提前停止的指标。
Tune将在Ray actor进程中的单独线程上运行此函数。 请注意,此API不是可检查的,因为该线程永远不会将控制权返回给其调用者。
注意:如果你有一个想要训练的lambda函数,你需要先注册函数:tune.register_trainable(“lambda_id”,lambda x:...)。 然后,您可以使用lambda_id代替my_trainable。
传递给Tune的Python类需要子类ray.tune.Trainable。除报告的指标外,Trainable和基于功能的API都将具有自动填充指标。
启动实验
Tune提供了一个generates并运行试验的run功能。
ray.tune.run(run_or_experiment, name=None, stop=None, config=None, resources_per_trial=None, num_samples=1,
local_dir=None, upload_dir=None, trial_name_creator=None, loggers=None, sync_function=None,
checkpoint_freq=0, checkpoint_at_end=False, export_formats=None, max_failures=3, restore=None,
search_alg=None, scheduler=None, with_server=False, server_port=4321, verbose=2, resume=False,
queue_trials=False, reuse_actors=False, trial_executor=None, raise_on_failed_trial=True)
执行训练。
参数:
run_or_experiment (function|class|str|Experiment) -如果是function | class | str,那么这就是要训练的算法或模型。 这可以指内置算法的名称(例如RLLib的DQN或PPO),用户定义的Trainable函数或类,或者在tune注册表中注册的Trainable函数或类的字符串标识符。 如果是Experiment,那么Tune将根据Experiment.spec执行训练。