in grok/training.py [0:0]
def _scheduler_lr(self, step: int) -> float:
"""
Used by pytorch_lighting
:returns: the learning_rate for this training step
"""
max_lr = self.hparams.max_lr # type: ignore
min_lr = self.hparams.max_lr / 10 # type: ignore
warmup_steps = self.hparams.warmup_steps # type: ignore
if not self.hparams.anneal_lr:
if step <= warmup_steps:
lr = (float(step) / max(warmup_steps, 1)) * max_lr
else:
lr = max_lr
else:
if step <= warmup_steps:
lr = (float(step) / max(warmup_steps, 1)) * max_lr
elif step <= self.hparams.anneal_lr_steps + warmup_steps:
effective_step = step - warmup_steps
t = effective_step / self.hparams.anneal_lr_steps
cos = (1 + np.cos(np.pi * t)) / 2
lr = min_lr + (max_lr - min_lr) * cos
# lr = max_lr - ((effective_step / max_effective_step) * (max_lr - min_lr))
else:
lr = min_lr
return lr