问题描述
我正在使用Tune class-based Trainable API。查看代码示例:
from ray import tune
import numpy as np
np.random.seed(42)
# first run
tune.run(tune.Trainable,...)
# second run,expecting same result
np.random.seed(42)
tune.run(tune.Trainable,...)
问题在于tune.run
的结果仍然不同,可能的原因是每个射线演员仍然具有不同的种子。
问题:如何使ray.tune.run
具有可复制性?
解决方法
(此答案侧重于类API和ray版本0.8.7,尽管随机种子逻辑对于功能性API基本相同)
不确定性结果有两个主要来源。
1。搜索算法
每个search algorithm都支持随机种子,尽管其接口可能有所不同。这将初始化超参数空间采样。
例如,如果您使用的是AxSearch
,则它看起来像这样:
from ax.service.ax_client import AxClient
from ray.tune.suggest.ax import AxSearch
client = AxClient(...,random_seed=42)
client.create_experiment(...)
algo = AxSearch(client)
2。可训练的API
这是在工作进程之间分配的,需要在tune.Trainable
类内进行播种。根据您实现的tune.Trainable.train
逻辑,您需要在numpy
内通过将{{1 }} tf
的参数。
以下代码基于处理相同问题的RLLib PR5197:
查看示例:
tune.Trainable.setup