Keras 3 API 文档 / KerasTuner / 预言机 / @synchronized 装饰器

@synchronized 装饰器

[来源]

synchronized 函数

keras_tuner.synchronized(func, )

装饰器用于同步对 Oracle 函数的多线程调用。

在并行调优中,可能会有多个线程对 Oracle 方法(如 create_trial()update_trial()end_trial())进行并发 gRPC 调用。为了避免对数据的并发写入,使用 @synchronized 来确保调用同步,一次只允许运行一个调用。

对不同 Oracle 对象的并发调用不会互相阻塞。对同一个 Oracle 对象的相同或不同函数的并发调用会互相阻塞。

您可以装饰子类函数,该函数覆盖了基类中已装饰的函数,而无需担心会造成死锁。但是,装饰器只支持类内的函数,不能应用于独立函数。

您不需要装饰 Oracle.populate_space(),它只由 Oracle.create_trial() 调用,而 Oracle.create_trial() 已被装饰。

示例

class MyOracle(keras_tuner.Oracle):
    @keras_tuner.synchronized
    def create_trial(self, tuner_id):
        super().create_trial(tuner_id)
        ...

    @keras_tuner.synchronized
    def update_trial(self, trial_id, metrics, step=0):
        super().update_trial(trial_id, metrics, step)
        ...

    @keras_tuner.synchronized
    def end_trial(self, trial):
        super().end_trial(trial)
        ...