(model)
| 56 | |
| 57 | |
| 58 | def 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 |
no test coverage detected