Skip to content
Open
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
23 changes: 14 additions & 9 deletions deepspeed/runtime/engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -2814,6 +2814,19 @@ def zero_grad(self):
for param_name, param in self.module.named_parameters():
param.grad = None

def _eigenvalue_summary_events(self):
if not (self.eigenvalue_enabled() and not self.gas_boundary_ctr % self.eigenvalue_gas_boundary_resolution()):
return []

events = []
for i, ev_value in enumerate(self.block_eigenvalue.values()):
events.append((
f"Train/Eigenvalues/ModelBlockParam_{i}",
ev_value[0],
self.global_samples,
))
return events

def clip_fp32_gradients(self):
clip_grad_norm_(parameters=self.module.parameters(), max_norm=self.gradient_clipping(), mpu=self.mpu)

Expand Down Expand Up @@ -2963,15 +2976,7 @@ def step(self, lr_kwargs=None):
self.global_samples,
))

if (self.eigenvalue_enabled()
and not self.gas_boundary_ctr % self.eigenvalue_gas_boundary_resolution()):
ev_values = self.block_eigenvalue.values()
for i in range(len(ev_values)):
self.summary_events.append((
f"Train/Eigenvalues/ModelBlockParam_{i}",
self.ev_values[i][0],
self.global_samples,
))
self.summary_events.extend(self._eigenvalue_summary_events())
self.monitor.write_events(self.summary_events)

# Check flops profiling
Expand Down
31 changes: 31 additions & 0 deletions tests/unit/runtime/test_engine.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0
Comment on lines +1 to +2
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Add the required DeepSpeed Team header

In this new test file, the workspace AGENTS.md requires new files to include the license header # SPDX-License-Identifier: Apache-2.0 followed by # DeepSpeed Team; this header omits # DeepSpeed Team and adds a different first line, so it violates the repo's required new-file header.

Useful? React with 👍 / 👎.


from deepspeed.runtime.engine import DeepSpeedEngine


def test_eigenvalue_summary_events_use_block_eigenvalue_values():
engine = object.__new__(DeepSpeedEngine)
engine.block_eigenvalue = {
"block_a": (0.25, 0),
"block_b": (0.5, 1),
}
engine.gas_boundary_ctr = 4
engine.global_samples = 128
engine.eigenvalue_enabled = lambda: True
engine.eigenvalue_gas_boundary_resolution = lambda: 2

assert engine._eigenvalue_summary_events() == [
("Train/Eigenvalues/ModelBlockParam_0", 0.25, 128),
("Train/Eigenvalues/ModelBlockParam_1", 0.5, 128),
]


def test_eigenvalue_summary_events_skip_non_boundary_steps():
engine = object.__new__(DeepSpeedEngine)
engine.block_eigenvalue = {"block_a": (0.25, 0)}
engine.gas_boundary_ctr = 3
engine.eigenvalue_enabled = lambda: True
engine.eigenvalue_gas_boundary_resolution = lambda: 2

assert engine._eigenvalue_summary_events() == []
Loading