KerasTuner:超參數調校 / API 文件 / 神諭 / @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)
        ...