模式:使用 supervisor actor 来管理 actor 树
Contents
模式:使用 supervisor actor 来管理 actor 树#
Actor 监督是一种模式,其中监督 Actor 管理一组工作 Actor。 监督者将任务委托给下属并处理他们的失败。 这种模式简化了驱动程序,因为它只管理几个监督者,而不直接处理工作 Actor 的失败。 此外,多个监督者可以并行执行以并行处理更多工作。
actor 树#
Note
如果 supervisor 死亡(或 driver 死亡),那么根据 actor 引用计数,工作者 actor 将自动终止。
Actor 可以嵌套多层,形成一棵树。
用例#
您想要进行数据并行训练,并并行训练具有不同超参数的同一模型。 对于每个超参数,您可以启动一个 supervisor actor 来进行编排,它将创建工作者 actor 来对每个数据分片进行实际训练。
Note
对于数据并行训练和超参数调整,建议使用:ref:Ray Train (DataParallelTrainer and Ray Tune’s Tuner)
,它在底层应用此模式。
代码#
import ray
@ray.remote(num_cpus=1)
class Trainer:
def __init__(self, hyperparameter, data):
self.hyperparameter = hyperparameter
self.data = data
# Train the model on the given training data shard.
def fit(self):
return self.data * self.hyperparameter
@ray.remote(num_cpus=1)
class Supervisor:
def __init__(self, hyperparameter, data):
self.trainers = [Trainer.remote(hyperparameter, d) for d in data]
def fit(self):
# Train with different data shard in parallel.
return ray.get([trainer.fit.remote() for trainer in self.trainers])
data = [1, 2, 3]
supervisor1 = Supervisor.remote(1, data)
supervisor2 = Supervisor.remote(2, data)
# Train with different hyperparameters in parallel.
model1 = supervisor1.fit.remote()
model2 = supervisor2.fit.remote()
assert ray.get(model1) == [1, 2, 3]
assert ray.get(model2) == [2, 4, 6]