Ray----Tune(2):Tune的用户指南

本文档详述了Ray Tune的使用,包括实验配置、训练特性、资源管理和结果处理。介绍了Training API,如基于函数和类的API,以及如何启动实验和自定义试验名称。还涵盖了Tune的搜索空间、GPU使用、训练检测点和故障恢复功能。此外,讨论了处理大型数据集、记录与可视化结果的方法,以及Tune的客户端API和CLI工具。
摘要由CSDN通过智能技术生成

Tune概述

本篇主要介绍Tune的使用向导,首先是Tune的运行框架(如下图),然后具体介绍实验配置信息(Training API、启动和自定义的trial)、Trailing特征(Tune的搜索空间、多次采样、GPU的使用、Trial的检测点和实验的恢复)、大数据的处理、输出结果的自动填充、日志和结果的可视化(自定义日志和自定义同步和上传命令)、Tune客户机API和Tune命令行。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GN1p39fS-1572334107360)(https://ray.readthedocs.io/en/releases-0.7.3/_images/tune-api.svg)]
Tune调度集群中进行多次实验。 每个trial都运行一个用户定义的Python函数或类,并通过Tune的Variant Generator的配置变量或用户指定的搜索算法进行参数化。 trial由实验调度员安排和管理。
关于实验调度搜索算法请参考官网。

导包和初始化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)

上边的trainable(config, reporter)函数是一个基于函数的API,这个函数名字可以任意命令,其中参数config主要是用来训练时参数的传递,参数reporter主要是把训练标准传递给tune进行优化,报告用于调度,搜索或提前停止的指标。

Tune将在Ray actor进程中的单独线程上运行此函数。 请注意,此API不是可检查的,因为该线程永远不会将控制权返回给其调用者。
注意:如果你有一个想要训练的lambda函数,你需要先注册函数:tune.register_trainable(“lambda_id”,lambda x:...)。 然后,您可以使用lambda_id代替my_trainable。更多请参考例子tune_mnist_keras 中的train_mnist函数或者hyperopt_example.py中的easy_objective函数。

传递给Tune的Python类需要子类ray.tune.Trainable,Trainable接口链接。除报告的指标外,Trainable和基于函数的API都具有自动填充指标。

基于类的calss-based API

class MyClass(Trainable):
    def _setup(self):
        self.saver = tf.train.Saver()
        self.sess = ...
        self.iteration = 0
 
    def _train(self):
        self.sess.run(...)
        self.iteration += 1
 
    def _save(self, checkpoint_dir):
        return self.saver.save(
            self.sess, checkpoint_dir + "/save",
            global_step=self.iteration)
 
    def _restore(self, path):
        return self.saver.restore(self.sess, path)

Training的类MyClass(Trainable)是基于类的Training API,类名可以任意的取,其中参数Trainable是ray.tune封装好的类,其中有函数_setup()_train()_save(checkpoint_dir)_restore(path)是封装好的接口,在用的时候只需实现即可,Trainable还封装了其他函数如_log_result(result),_stop(),_export_model(export_formats, export_dir)等方法,更多信息看tune的API
其中
_setup()是初始化函数,在调用类时直接初始化,一般用作数据初始化等。

对一个可训练对象调用_train()将执行一个训练的逻辑迭代。根据经验,一次训练(trial)调用执行时间应该足够长,以避免开销(即超过几秒),但要也足够短,以便定期报告进度(即最多几分钟)。

调用_save()应该将可训练对象的训练状态保存到磁盘,而_restore(path)应该将可训练对象恢复到给定的状态。

通常,当子类化Trainable时,只需要在这里实现_setup()_train_save_restore

注意 ,如果您不需要检查点/恢复功能,那么您也可以只向配置提供一个my_train(config, reporter)函数,而不是实现这个类。该函数将自动转换为该接口(没有检查点功能)。

启动实验

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执行训练。
		name (str) – 实验名称。
		stop (dict) – 停止条件。键可以是' train() '返回结果中的任何字段,以先到达的字段为准。
			默认为空dict。
		config (dic
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值