如何使ray.tune.run具有可复制性?

问题描述

我正在使用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