Skip to content
21 changes: 12 additions & 9 deletions megatron/core/transformer/cuda_graphs.py
Original file line number Diff line number Diff line change
Expand Up @@ -820,13 +820,12 @@ def create_fwd_graph(self, args, kwargs, outputs=None, clone_inputs=True):

is_moe = isinstance(self.base_module, MoETransformerLayer)
if is_moe:
from megatron.core.transformer.moe.moe_utils import get_moe_layer_wise_logging_tracker
from megatron.core.transformer.moe.moe_logging import get_moe_metrics_tracker

tracker = get_moe_layer_wise_logging_tracker()
moe_metrics_tracker = get_moe_metrics_tracker()
cached_aux_losses = {}
for name in tracker:
if "values" in tracker[name]:
cached_aux_losses[name] = torch.clone(tracker[name]["values"])
for name, entry in moe_metrics_tracker.metrics.items():
cached_aux_losses[name] = entry.values.clone()

self.fwd_graph = torch.cuda.CUDAGraph()

Expand Down Expand Up @@ -1016,8 +1015,11 @@ def clone_ten(ten):
param.main_grad.copy_(main_grad_copy)

if is_moe:
for name in tracker:
tracker[name]["values"].copy_(cached_aux_losses[name])
for name, cached_values in cached_aux_losses.items():
assert (
name in moe_metrics_tracker.metrics
), "cached metrics must be found in the tracker."
moe_metrics_tracker.metrics[name].values.copy_(cached_values)

def create_bwd_graph(self):
"""Create a bwd cudagraph for this runner. Should be called inside
Expand Down Expand Up @@ -2226,14 +2228,15 @@ def _finish_capturing(self, start_time):
_set_capture_end()

from megatron.core.distributed.finalize_model_grads import reset_model_temporary_tensors
from megatron.core.transformer.moe.moe_utils import clear_aux_losses_tracker

torch.distributed.barrier()
for model_chunk in self.model:
model_chunk.zero_grad_buffer()
for optimizer in self.optimizers:
optimizer.zero_grad()
clear_aux_losses_tracker()
from megatron.core.transformer.moe.moe_logging import get_moe_metrics_tracker

get_moe_metrics_tracker().clear()
reset_model_temporary_tensors(self.config, self.model)

if FREEZE_GC:
Expand Down
Loading
Loading