synchronized
函數keras_tuner.synchronized(func, )
用於同步多線程呼叫 Oracle
函數的裝飾器。
在平行調整中,可能會有來自多個線程到 Oracle
方法(如 create_trial()
、update_trial()
和 end_trial()
)的並行 gRPC 呼叫。為避免並行寫入數據,請使用 @synchronized
來確保呼叫是同步的,這只允許一次執行一個呼叫。
對不同 Oracle
對象的並行呼叫不會互相阻塞。對相同 Oracle
對象的相同或不同函數的並行呼叫將互相阻塞。
您可以裝飾覆蓋基類中已裝飾函數的子類函數,而無需擔心產生死結。但是,裝飾器僅支援類別中的方法,不能應用於獨立函數。
您不需要裝飾 Oracle.populate_space()
,它只由已裝飾的 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)
...