MCPcopy Create free account
hub / github.com/deepspeedai/DeepSpeed / _configure_optimizer

Method _configure_optimizer

deepspeed/runtime/engine.py:1974–2025  ·  view source on GitHub ↗
(self, client_optimizer, model_parameters)

Source from the content-addressed store, hash-verified

1972
1973 # Configure optimizer
1974 def _configure_optimizer(self, client_optimizer, model_parameters):
1975 if client_optimizer is None:
1976 if self.has_moe_layers:
1977 model_parameters = configure_moe_param_groups(model_parameters)
1978 basic_optimizer = self._configure_basic_optimizer(model_parameters)
1979 log_dist(f"Using DeepSpeed Optimizer param name {self.optimizer_name()} as basic optimizer", ranks=[0])
1980 else:
1981 if isinstance(client_optimizer, tuple(self._supported_optims())):
1982 basic_optimizer = client_optimizer
1983 log_dist('Using client Optimizer as basic optimizer', ranks=[0])
1984 else:
1985 basic_optimizer = client_optimizer(model_parameters)
1986 log_dist('Using client callable to create basic optimizer', ranks=[0])
1987
1988 if (self.zero_use_cpu_optimizer() and not isinstance(basic_optimizer, deepspeed.ops.adam.DeepSpeedCPUAdam)
1989 and not isinstance(basic_optimizer, deepspeed.ops.lion.DeepSpeedCPULion)):
1990 if self.zero_force_ds_cpu_optimizer():
1991 msg = f'You are using ZeRO-Offload with a client provided optimizer ({type(basic_optimizer)}) which in most cases will yield poor performance. Please either use deepspeed.ops.adam.DeepSpeedCPUAdam or set an optimizer in your ds-config (https://www.deepspeed.ai/docs/config-json/#optimizer-parameters). If you really want to use a custom optimizer w. ZeRO-Offload and understand the performance impacts you can also set <"zero_force_ds_cpu_optimizer": false> in your configuration file.'
1992 raise ZeRORuntimeException(msg)
1993
1994 basic_optimizer.param_groups[:] = [pg for pg in basic_optimizer.param_groups if len(pg["params"]) != 0]
1995 log_dist("Removing param_group that has no 'params' in the basic Optimizer", ranks=[0])
1996
1997 self._check_for_duplicates(basic_optimizer)
1998
1999 self.basic_optimizer = basic_optimizer
2000 log_dist(f"DeepSpeed Basic Optimizer = {basic_optimizer.__class__.__name__}", ranks=[0])
2001
2002 optimizer_wrapper = self._do_optimizer_sanity_check(basic_optimizer)
2003
2004 if optimizer_wrapper == ZERO_OPTIMIZATION:
2005 self.optimizer = self._configure_zero_optimizer(basic_optimizer)
2006 elif optimizer_wrapper == AMP:
2007 amp_params = self.amp_params()
2008 log_dist(f"Initializing AMP with these params: {amp_params}", ranks=[0])
2009 model, self.optimizer = amp.initialize(self.module, basic_optimizer, **amp_params)
2010 self._set_client_model(model)
2011 self._broadcast_model()
2012 # TODO: maybe need to broadcast experts differently?
2013 elif optimizer_wrapper in [FP16, DDP_BFLOAT16]:
2014 lp_dtype = torch.float16 if optimizer_wrapper == FP16 else torch.bfloat16
2015 self.optimizer = self._configure_fp16_optimizer(basic_optimizer, lp_dtype)
2016 elif optimizer_wrapper == BFLOAT16:
2017 self.optimizer = self._configure_bf16_optimizer(basic_optimizer)
2018 else:
2019 self.optimizer = basic_optimizer
2020
2021 self._configure_autoep_folding_optimizer_gradient_reduction()
2022 log_dist("DeepSpeed Final Optimizer = {}".format(self.optimizer.__class__.__name__), ranks=[0])
2023
2024 self.compression_scheduler = self._configure_compression_scheduler()
2025 self.quantizer = self._configure_quantization()
2026
2027 def _configure_autoep_folding_optimizer_gradient_reduction(self):
2028 configure = getattr(self.optimizer, "configure_autoep_folding_tp_gradient_reduction", None)

Callers 1

__init__Method · 0.95

Calls 15

optimizer_nameMethod · 0.95
_supported_optimsMethod · 0.95
_check_for_duplicatesMethod · 0.95
amp_paramsMethod · 0.95
_set_client_modelMethod · 0.95
_broadcast_modelMethod · 0.95

Tested by

no test coverage detected