[docs]@dataclassclassConfigSaverCallback(Callback):""" A callback that writes an arbitrary JSON-serializable config dictionary (:data:`config`) to every checkpoint directory written during training. It will also set the config to save for other callbacks, including the :class:`WandBCallback`, :class:`CometCallback`, and others, if not already set. .. important:: The :data:`config` should be set *after* initializing the trainer and attaching all other callbacks. """fname:str="config.json"save_data_paths:Optional[bool]=Nonedata_paths_fname:Optional[str]=None_config:Optional[Dict[str,Any]]=None@propertydefconfig(self)->Optional[Dict[str,Any]]:""" The JSON config dictionary to record. """returnself._config@config.setterdefconfig(self,config:Dict[str,Any]):self._config=configforcallback_name,callbackinself.trainer.callbacks.items():if(isinstance(callback,(WandBCallback,CometCallback,BeakerCallback))andcallback.configisNone):log.info(f"Setting config for '{callback_name}' callback of type '{callback.__class__.__name__}'")callback.config=configdefpost_checkpoint_saved(self,path:PathOrStr):ifget_rank()!=0:returnifself.configisNone:log.warning(f"Config not set on {self.__class__.__name__}, doing nothing")else:self.trainer.write_file(self.fname,json.dumps(self.config),dir=path)ifself.save_data_pathsisnotFalse:ifisinstance(self.trainer.data_loader,NumpyDataLoaderBase):ds=self.trainer.data_loader.datasetall_paths="\n".join(str(p)forpinds.paths)self.trainer.write_file(self.data_paths_fnameorDEFAULT_DATA_PATHS_FNAME,all_paths,dir=path)elifself.save_data_paths:log.warning(f"Unable to save paths for data loader of type '{self.trainer.data_loader.__class__.__name__}' (not implemented)")