MCPcopy Create free account
hub / github.com/zai-org/CodeGeeX / get_megatron_optimizer

Function get_megatron_optimizer

codegeex/megatron/optimizer/__init__.py:58–129  ·  view source on GitHub ↗
(model)

Source from the content-addressed store, hash-verified

56
57
58def get_megatron_optimizer(model):
59 args = get_args()
60
61 if args.cpu_optimizer:
62 raise NotImplementedError("need to add cpu adam")
63
64 param_groups = _get_params_for_weight_decay_optimization(model)
65
66 if args.optimizer == "adam":
67 optimizer = Adam(
68 param_groups,
69 lr=args.lr,
70 weight_decay=args.weight_decay,
71 betas=(args.adam_beta1, args.adam_beta2),
72 eps=args.adam_eps,
73 )
74 elif args.optimizer == "sgd":
75 optimizer = SGD(
76 param_groups,
77 lr=args.lr,
78 weight_decay=args.weight_decay,
79 momentum=args.sgd_momentum,
80 )
81 else:
82 raise Exception("{} optimizer is not supported.".format(args.optimizer))
83
84 if args.deepspeed:
85 return optimizer
86
87 # Determine whether the params have main-grad field.
88 params_have_main_grad = False
89 if args.DDP_impl == "local":
90 params_have_main_grad = True
91
92 if args.fp16 or args.bf16:
93
94 # Grad scaler:
95 # if loss-scale is provided, instantiate the constant scaler.
96 # if we are using fp16 and loss-scale is not present, use a
97 # dynamic scaler.
98 # otherwise we are running in bf16 with no loss-scale so
99 # leave it as None.
100 grad_scaler = None
101 # Constant loss scale.
102 if args.loss_scale:
103 grad_scaler = ConstantGradScaler(args.loss_scale)
104 # Dynamic loss scale.
105 else:
106 if args.fp16:
107 grad_scaler = DynamicGradScaler(
108 initial_scale=args.initial_loss_scale,
109 min_scale=args.min_loss_scale,
110 growth_factor=2.0,
111 backoff_factor=0.5,
112 growth_interval=args.loss_scale_window,
113 hysteresis=args.hysteresis,
114 )
115

Callers 1

Calls 6

get_argsFunction · 0.90
ConstantGradScalerClass · 0.85
DynamicGradScalerClass · 0.85
FP32OptimizerClass · 0.85

Tested by

no test coverage detected