Skip to content

Commit a88745a

Browse files
rootBr1an67
authored andcommitted
fix: validate max_steps > warmup_steps to prevent division by zero in LR scheduler
1 parent 3779510 commit a88745a

5 files changed

Lines changed: 10 additions & 0 deletions

File tree

litgpt/finetune/adapter.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,8 @@ def generate_example(fabric: L.Fabric, model: GPT, tokenizer: Tokenizer, eval: E
443443

444444
def get_lr_scheduler(optimizer, warmup_steps: int, max_steps: int):
445445
# linear warmup followed by cosine annealing
446+
if max_steps <= warmup_steps:
447+
raise ValueError(f"max_steps ({max_steps}) must be greater than warmup_steps ({warmup_steps})")
446448
scheduler1 = torch.optim.lr_scheduler.LambdaLR(optimizer, lambda step: step / warmup_steps)
447449
scheduler2 = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=(max_steps - warmup_steps))
448450
return torch.optim.lr_scheduler.SequentialLR(optimizer, [scheduler1, scheduler2], milestones=[warmup_steps])

litgpt/finetune/adapter_v2.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,8 @@ def generate_example(fabric: L.Fabric, model: GPT, tokenizer: Tokenizer, eval: E
466466

467467
def get_lr_scheduler(optimizer, warmup_steps: int, max_steps: int):
468468
# linear warmup followed by cosine annealing
469+
if max_steps <= warmup_steps:
470+
raise ValueError(f"max_steps ({max_steps}) must be greater than warmup_steps ({warmup_steps})")
469471
scheduler1 = torch.optim.lr_scheduler.LambdaLR(optimizer, lambda step: step / warmup_steps)
470472
scheduler2 = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=(max_steps - warmup_steps))
471473
return torch.optim.lr_scheduler.SequentialLR(optimizer, [scheduler1, scheduler2], milestones=[warmup_steps])

litgpt/finetune/full.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,8 @@ def generate_example(fabric: L.Fabric, model: GPT, tokenizer: Tokenizer, eval: E
414414

415415
def get_lr_scheduler(optimizer, warmup_steps: int, max_steps: int):
416416
# linear warmup followed by cosine annealing
417+
if max_steps <= warmup_steps:
418+
raise ValueError(f"max_steps ({max_steps}) must be greater than warmup_steps ({warmup_steps})")
417419
scheduler1 = torch.optim.lr_scheduler.LambdaLR(optimizer, lambda step: step / warmup_steps)
418420
scheduler2 = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=(max_steps - warmup_steps))
419421
return torch.optim.lr_scheduler.SequentialLR(optimizer, [scheduler1, scheduler2], milestones=[warmup_steps])

litgpt/finetune/lora.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,8 @@ def generate_example(fabric: L.Fabric, model: GPT, tokenizer: Tokenizer, eval: E
489489

490490
def get_lr_scheduler(optimizer, warmup_steps: int, max_steps: int):
491491
# linear warmup followed by cosine annealing
492+
if max_steps <= warmup_steps:
493+
raise ValueError(f"max_steps ({max_steps}) must be greater than warmup_steps ({warmup_steps})")
492494
scheduler1 = torch.optim.lr_scheduler.LambdaLR(optimizer, lambda step: step / warmup_steps)
493495
scheduler2 = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=(max_steps - warmup_steps))
494496
return torch.optim.lr_scheduler.SequentialLR(optimizer, [scheduler1, scheduler2], milestones=[warmup_steps])

litgpt/finetune/lora_legacy.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,8 @@ def generate_example(fabric: L.Fabric, model: GPT, tokenizer: Tokenizer, eval: E
474474

475475
def get_lr_scheduler(optimizer, warmup_steps: int, max_steps: int):
476476
# linear warmup followed by cosine annealing
477+
if max_steps <= warmup_steps:
478+
raise ValueError(f"max_steps ({max_steps}) must be greater than warmup_steps ({warmup_steps})")
477479
scheduler1 = torch.optim.lr_scheduler.LambdaLR(optimizer, lambda step: step / warmup_steps)
478480
scheduler2 = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=(max_steps - warmup_steps))
479481
return torch.optim.lr_scheduler.SequentialLR(optimizer, [scheduler1, scheduler2], milestones=[warmup_steps])

0 commit comments

Comments
 (0)