Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions examples/configs/dpo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,10 @@ policy:

clip_grad: ${policy.max_grad_norm}

# optimizer cpu offload
optimizer_cpu_offload: false
optimizer_offload_fraction: 0.0

scheduler:
start_weight_decay: ${policy.megatron_cfg.optimizer.weight_decay}
end_weight_decay: ${policy.megatron_cfg.optimizer.weight_decay}
Expand Down
4 changes: 4 additions & 0 deletions examples/configs/grpo_math_1B.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,10 @@ policy:

clip_grad: ${policy.max_grad_norm}

# optimizer cpu offload
optimizer_cpu_offload: false
optimizer_offload_fraction: 0.0

scheduler:
start_weight_decay: ${policy.megatron_cfg.optimizer.weight_decay}
end_weight_decay: ${policy.megatron_cfg.optimizer.weight_decay}
Expand Down
4 changes: 4 additions & 0 deletions examples/configs/rm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,10 @@ policy:

clip_grad: ${policy.max_grad_norm}

# optimizer cpu offload
optimizer_cpu_offload: false
optimizer_offload_fraction: 0.0

scheduler:
start_weight_decay: ${policy.megatron_cfg.optimizer.weight_decay}
end_weight_decay: ${policy.megatron_cfg.optimizer.weight_decay}
Expand Down
4 changes: 4 additions & 0 deletions examples/configs/sft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,10 @@ policy:

clip_grad: ${policy.max_grad_norm}

# optimizer cpu offload
optimizer_cpu_offload: false
optimizer_offload_fraction: 0.0

scheduler:
start_weight_decay: ${policy.megatron_cfg.optimizer.weight_decay}
end_weight_decay: ${policy.megatron_cfg.optimizer.weight_decay}
Expand Down
4 changes: 4 additions & 0 deletions examples/configs/sft_openmathinstruct2_megatron.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ policy:
use_precision_aware_optimizer: false #true ## TODO: precision aware optim not working with fp8. Is this expected?
weight_decay: 0.01

# optimizer cpu offload
optimizer_cpu_offload: false
optimizer_offload_fraction: 0.0

## recently introduced, our current mcore commit doesn't have this
#fp8_recipe: delayed

Expand Down
5 changes: 5 additions & 0 deletions nemo_rl/models/policy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,11 @@ class MegatronOptimizerConfig(TypedDict):
use_distributed_optimizer: bool
use_precision_aware_optimizer: bool
clip_grad: float
# knob to enable optimizer cpu offload
optimizer_cpu_offload: bool
# knob to set the fraction of parameters to keep on CPU
# currently if optimizer_cpu_offload is true, this knob must be 1.0
optimizer_offload_fraction: float


class MegatronSchedulerConfig(TypedDict):
Expand Down
25 changes: 23 additions & 2 deletions nemo_rl/models/policy/megatron_policy_worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -614,6 +614,19 @@ def __init__(
"Refer to https://github.com/NVIDIA-NeMo/RL/issues/1164 for latest updates with this issue."
)

optimizer_cpu_offload = self.cfg["megatron_cfg"]["optimizer"][
"optimizer_cpu_offload"
]
optimizer_offload_fraction = self.cfg["megatron_cfg"]["optimizer"][
"optimizer_offload_fraction"
]
if optimizer_cpu_offload:
# Currently, hybrid optimizer (partly on GPU and partly on CPU) is not supported because it conflicts with the way
# Nemo-rl handles the optimizer offload/onload between generation and training. So if using CPU optimizer the offload_fraction should be 1.0.
assert optimizer_offload_fraction == 1.0, (
"Currently for optimizer offloading, only optimizer_offload_fraction=1.0 is supported"
)

checkpoint_config = CheckpointConfig(
save_interval=100,
save=weights_path,
Expand Down Expand Up @@ -1753,7 +1766,11 @@ def prepare_for_training(self, *args, **kwargs):
self.model.train()

# Move optimizer state to CUDA if it exists
if hasattr(self, "optimizer") and self.optimizer is not None:
if (
hasattr(self, "optimizer")
and self.optimizer is not None
and (not self.cfg["megatron_cfg"]["optimizer"]["optimizer_cpu_offload"])
):
if isinstance(self.optimizer, ChainedOptimizer):
optimizer_state = self.optimizer.state
else:
Expand All @@ -1780,7 +1797,11 @@ def offload_before_refit(self):
self.model, "cpu", move_params=False, move_grads=True
) # get rid of grad buffers
torch.randn(1).cuda() # wake up torch allocator
if hasattr(self, "optimizer") and self.optimizer is not None:
if (
hasattr(self, "optimizer")
and self.optimizer is not None
and (not self.cfg["megatron_cfg"]["optimizer"]["optimizer_cpu_offload"])
):
# Iterate through the state dictionaries for each parameter group
if isinstance(self.optimizer, ChainedOptimizer):
optimizer_state = self.optimizer.state
Expand Down
2 changes: 2 additions & 0 deletions tests/unit/models/generation/test_vllm_generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,8 @@ def get_basic_megatron_test_config(
"use_distributed_optimizer": True,
"use_precision_aware_optimizer": True,
"clip_grad": 1.0,
"optimizer_cpu_offload": False,
"optimizer_offload_fraction": 0.0,
},
"scheduler": {
"start_weight_decay": 0.01,
Expand Down
2 changes: 2 additions & 0 deletions tests/unit/models/policy/test_megatron_worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ def create_megatron_test_config(
"use_distributed_optimizer": True,
"use_precision_aware_optimizer": True,
"clip_grad": 1.0,
"optimizer_cpu_offload": False,
"optimizer_offload_fraction": 0.0,
},
"scheduler": {
"start_weight_decay": 0.01,
Expand Down
3 changes: 3 additions & 0 deletions tools/refit_verifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,9 @@ def setup_configs(args, tokenizer):
"use_distributed_optimizer": True,
"use_precision_aware_optimizer": True,
"clip_grad": 1.0,
# Optimizer CPU offload settings
"optimizer_cpu_offload": False,
"optimizer_offload_fraction": 0.0,
},
"scheduler": {
"start_weight_decay": 0.01,
Expand Down
Loading