scheduler.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import math
  2. def get_cosine_schedule_with_warmup_lr_lambda(
  3. current_step: int,
  4. *,
  5. num_warmup_steps: int | float,
  6. num_training_steps: int,
  7. num_cycles: float = 0.5,
  8. final_lr_ratio: float = 0.0,
  9. ):
  10. if 0 < num_warmup_steps < 1: # float mode
  11. num_warmup_steps = int(num_warmup_steps * num_training_steps)
  12. if current_step < num_warmup_steps:
  13. return float(current_step) / float(max(1, num_warmup_steps))
  14. progress = float(current_step - num_warmup_steps) / float(
  15. max(1, num_training_steps - num_warmup_steps)
  16. )
  17. return max(
  18. final_lr_ratio,
  19. 0.5 * (1.0 + math.cos(math.pi * float(num_cycles) * 2.0 * progress)),
  20. )
  21. def get_constant_schedule_with_warmup_lr_lambda(
  22. current_step: int,
  23. *,
  24. num_warmup_steps: int | float,
  25. num_training_steps: int | None = None,
  26. ):
  27. if 0 < num_warmup_steps < 1: # float mode
  28. num_warmup_steps = int(num_warmup_steps * num_training_steps)
  29. if current_step < num_warmup_steps:
  30. return float(current_step) / float(max(1, num_warmup_steps))
  31. return 1.0