def setup(self, kwargs): """Complete setup for wandb.init(). This includes parsing all arguments, applying them with settings and enabling logging. """ self.kwargs = kwargs self._wl = wandb_setup._setup() # Make sure we have a logger setup (might be an early logger) _set_logger(self._wl._get_logger()) # Start with settings from wandb library singleton settings = self._wl.settings().duplicate() settings_param = kwargs.pop("settings", None) if settings_param: settings._apply_settings(settings_param) self._reporter = reporting.setup_reporter( settings=settings.duplicate().freeze()) sm_config = sagemaker.parse_sm_config() if sm_config: sm_api_key = sm_config.get("wandb_api_key", None) sm_run, sm_env = sagemaker.parse_sm_resources() if sm_env: if sm_api_key: sm_env["WANDB_API_KEY"] = sm_api_key settings._apply_environ(sm_env) for k, v in six.iteritems(sm_run): kwargs.setdefault(k, v) # Remove parameters that are not part of settings init_config = kwargs.pop("config", None) or dict() config_include_keys = kwargs.pop("config_include_keys", None) config_exclude_keys = kwargs.pop("config_exclude_keys", None) # Add deprecation message once we can better track it and document alternatives # if config_include_keys or config_exclude_keys: # wandb.termwarn( # "config_include_keys and config_exclude_keys are deprecated:" # " use config=wandb.helper.parse_config(config_object, include=('key',))" # " or config=wandb.helper.parse_config(config_object, exclude=('key',))" # ) init_config = parse_config(init_config, include=config_include_keys, exclude=config_exclude_keys) # merge config with sweep or sm (or config file) self.config = sm_config or self._wl._config or dict() for k, v in init_config.items(): self.config.setdefault(k, v) # Temporarily unsupported parameters unsupported = ( "allow_val_change", "force", ) for key in unsupported: val = kwargs.pop(key, None) if val: self._reporter.warning( "currently unsupported wandb.init() arg: %s", key) monitor_gym = kwargs.pop("monitor_gym", None) if monitor_gym and len(wandb.patched["gym"]) == 0: wandb.gym.monitor() tensorboard = kwargs.pop("tensorboard", None) sync_tensorboard = kwargs.pop("sync_tensorboard", None) if tensorboard or sync_tensorboard and len( wandb.patched["tensorboard"]) == 0: wandb.tensorboard.patch() magic = kwargs.get("magic") if magic not in (None, False): magic_install(kwargs) # prevent setting project, entity if in sweep # TODO(jhr): these should be locked elements in the future or at least # moved to apply_init() if settings.sweep_id: for key in ("project", "entity"): val = kwargs.pop(key, None) if val: print("Ignored wandb.init() arg %s when running a sweep" % key) settings.apply_init(kwargs) login_key = wandb_login._login(_disable_warning=True, _settings=settings) if not login_key: settings.mode = "offline" # TODO(jhr): should this be moved? probably. d = dict( _start_time=time.time(), _start_datetime=datetime.datetime.now(), ) settings.update(d) if settings._jupyter: self._jupyter_setup(settings) self._log_setup(settings) self.settings = settings.freeze()
def setup(self, kwargs): """ Complete setup for wandb.init(). This includes parsing all arguments, applying them with settings and enabling logging. """ self.kwargs = kwargs self._wl = wandb_setup._setup() # Make sure we have a logger setup (might be an early logger) _set_logger(self._wl._get_logger()) # Start with settings from wandb library singleton settings = self._wl._clone_settings() settings_param = kwargs.pop("settings", None) if settings_param: settings._apply_settings(settings_param) self._reporter = reporting.setup_reporter( settings=settings.duplicate().freeze() ) sm_config = sagemaker.parse_sm_config() if sm_config: sm_api_key = sm_config.get("wandb_api_key", None) sm_run, sm_env = sagemaker.parse_sm_resources() if sm_env: if sm_api_key: sm_env["WANDB_API_KEY"] = sm_api_key settings._apply_environ(sm_env) wandb.setup(settings=settings) for k, v in six.iteritems(sm_run): kwargs.setdefault(k, v) # Remove parameters that are not part of settings init_config = kwargs.pop("config", None) or dict() config_include_keys = kwargs.pop("config_include_keys", None) config_exclude_keys = kwargs.pop("config_exclude_keys", None) # Add deprecation message once we can better track it and document alternatives # if config_include_keys or config_exclude_keys: # wandb.termwarn( # "config_include_keys and config_exclude_keys are deprecated:" # " use config=wandb.helper.parse_config(config_object, include=('key',))" # " or config=wandb.helper.parse_config(config_object, exclude=('key',))" # ) init_config = parse_config( init_config, include=config_include_keys, exclude=config_exclude_keys ) # merge config with sweep or sm (or config file) self.config = sm_config or self._wl._config or dict() for k, v in init_config.items(): self.config.setdefault(k, v) monitor_gym = kwargs.pop("monitor_gym", None) if monitor_gym and len(wandb.patched["gym"]) == 0: wandb.gym.monitor() tensorboard = kwargs.pop("tensorboard", None) sync_tensorboard = kwargs.pop("sync_tensorboard", None) if tensorboard or sync_tensorboard and len(wandb.patched["tensorboard"]) == 0: wandb.tensorboard.patch() magic = kwargs.get("magic") if magic not in (None, False): magic_install(kwargs) # handle login related parameters as these are applied to global state anonymous = kwargs.pop("anonymous", None) force = kwargs.pop("force", None) # TODO: move above parameters into apply_init_login settings._apply_init_login(kwargs) if not settings._offline and not settings._noop: wandb_login._login(anonymous=anonymous, force=force, _disable_warning=True) # apply updated global state after login was handled settings._apply_settings(wandb.setup()._settings) settings._apply_init(kwargs) if not settings._offline and not settings._noop: user_settings = self._wl._load_user_settings() settings._apply_user(user_settings) # TODO(jhr): should this be moved? probably. d = dict(_start_time=time.time(), _start_datetime=datetime.datetime.now(),) settings.update(d) if settings._jupyter: self._jupyter_setup(settings) self._log_setup(settings) self.settings = settings.freeze()
def setup(self, kwargs) -> None: # noqa: C901 """Completes setup for `wandb.init()`. This includes parsing all arguments, applying them with settings and enabling logging. """ self.kwargs = kwargs self._wl = wandb_setup._setup() # Make sure we have a logger setup (might be an early logger) _set_logger(self._wl._get_logger()) # Start with settings from wandb library singleton settings: Settings = self._wl.settings.copy() settings_param = kwargs.pop("settings", None) if settings_param is not None: if isinstance(settings_param, Settings): # todo: check the logic here. this _only_ comes up in tests? # update settings with settings_param using whatever # source each parameter has there settings._apply_settings(settings_param, _logger=logger) elif isinstance(settings_param, dict): # if it is a mapping, update the settings with it # explicitly using Source.INIT settings.update(settings_param, source=Source.INIT) self._reporter = reporting.setup_reporter(settings=settings) sagemaker_config: Dict = (dict() if settings.sagemaker_disable else sagemaker.parse_sm_config()) if sagemaker_config: sagemaker_api_key = sagemaker_config.get("wandb_api_key", None) sagemaker_run, sagemaker_env = sagemaker.parse_sm_resources() if sagemaker_env: if sagemaker_api_key: sagemaker_env["WANDB_API_KEY"] = sagemaker_api_key settings._apply_env_vars(sagemaker_env) wandb.setup(settings=settings) settings.update(sagemaker_run, source=Source.SETUP) self._use_sagemaker = True self._set_init_telemetry_attrs(kwargs) # Remove parameters that are not part of settings init_config = kwargs.pop("config", None) or dict() config_include_keys = kwargs.pop("config_include_keys", None) config_exclude_keys = kwargs.pop("config_exclude_keys", None) # todo: deprecate config_include_keys and config_exclude_keys # if config_include_keys or config_exclude_keys: # wandb.termwarn( # "config_include_keys and config_exclude_keys are deprecated:" # " use config=wandb.helper.parse_config(config_object, include=('key',))" # " or config=wandb.helper.parse_config(config_object, exclude=('key',))" # ) init_config = parse_config(init_config, include=config_include_keys, exclude=config_exclude_keys) # merge config with sweep or sagemaker (or config file) self.sweep_config = self._wl._sweep_config or dict() self.config = dict() for config_data in sagemaker_config, self._wl._config, init_config: if not config_data: continue for k, v in config_data.items(): self.config.setdefault(k, v) monitor_gym = kwargs.pop("monitor_gym", None) if monitor_gym and len(wandb.patched["gym"]) == 0: wandb.gym.monitor() tensorboard = kwargs.pop("tensorboard", None) sync_tensorboard = kwargs.pop("sync_tensorboard", None) if tensorboard or sync_tensorboard and len( wandb.patched["tensorboard"]) == 0: wandb.tensorboard.patch() magic = kwargs.get("magic") if magic not in (None, False): magic_install(kwargs) # handle login related parameters as these are applied to global state init_settings = { key: kwargs[key] for key in ["anonymous", "force", "mode", "resume"] if kwargs.get(key, None) is not None } if init_settings: settings.update(init_settings, source=Source.INIT) if not settings._offline and not settings._noop: wandb_login._login( anonymous=kwargs.pop("anonymous", None), force=kwargs.pop("force", None), _disable_warning=True, _silent=settings.quiet or settings.silent, ) # apply updated global state after login was handled settings._apply_settings(wandb.setup().settings) # get status of code saving before applying user settings save_code_pre_user_settings = settings.save_code settings._apply_init(kwargs) if not settings._offline and not settings._noop: user_settings = self._wl._load_user_settings() settings._apply_user(user_settings) # ensure that user settings don't set saving to true # if user explicitly set these to false if save_code_pre_user_settings is False: settings.update({"save_code": False}, source=Source.INIT) # TODO(jhr): should this be moved? probably. time_stamp: float = time.time() settings.update( { "_start_time": time_stamp, "_start_datetime": datetime.datetime.fromtimestamp(time_stamp), }, source=Source.INIT, ) if not settings._noop: self._log_setup(settings) if settings._jupyter: self._jupyter_setup(settings) self.settings = settings