Skip to content
20 changes: 11 additions & 9 deletions megatron/core/transformer/cuda_graphs.py
Original file line number Diff line number Diff line change
Expand Up @@ -859,13 +859,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 @@ -1047,8 +1046,11 @@ def clone_ten(ten):
buf.copy_(buf_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 @@ -2334,13 +2336,13 @@ def _reset_after_capture(self):
Reset the model and optimizer state after capturing CUDA Graphs.
"""
from megatron.core.distributed.finalize_model_grads import reset_model_temporary_tensors
from megatron.core.transformer.moe.moe_utils import clear_aux_losses_tracker
from megatron.core.transformer.moe.moe_logging import get_moe_metrics_tracker

for model_chunk in self.model:
model_chunk.zero_grad_buffer()
for optimizer in self.optimizers:
optimizer.zero_grad()
clear_aux_losses_tracker()
get_moe_metrics_tracker().clear()
reset_model_temporary_tensors(self.config, self.model)

def _finish_capturing(self, start_time):
Expand Down
Loading
Loading