Files
2026-07-13 13:18:33 +08:00

64 lines
2.2 KiB
Python

# Copyright (c) DeepSpeed Team.
# SPDX-License-Identifier: Apache-2.0
# DeepSpeed Team
import types
import deepspeed
from deepspeed.runtime.engine import DeepSpeedEngine
from deepspeed.runtime.config import get_gradient_clipping
from deepspeed.runtime.constants import GRADIENT_CLIPPING_DEFAULT
from unit.common import DistributedTest
from unit.simple_model import SimpleModel
import pytest
class TestGradientClippingConfig:
def test_default_is_one(self):
assert get_gradient_clipping({}) == GRADIENT_CLIPPING_DEFAULT == 1.0
@pytest.mark.parametrize("gradient_clipping", [0.5, 0.0])
def test_explicit_value_is_used(self, gradient_clipping):
assert get_gradient_clipping({"gradient_clipping": gradient_clipping}) == gradient_clipping
@pytest.mark.parametrize("gradient_clipping", [0.5, 0.0])
def test_engine_getter_returns_config_value(self, gradient_clipping):
engine = types.SimpleNamespace(_config=types.SimpleNamespace(gradient_clipping=gradient_clipping))
assert DeepSpeedEngine.gradient_clipping(engine) == gradient_clipping
class TestGradientClippingEndToEnd(DistributedTest):
world_size = 1
def _config(self, gradient_clipping=None):
config = {
"train_batch_size": 1,
"optimizer": {
"type": "Adam",
"params": {
"lr": 1e-3,
"torch_adam": True
}
},
}
if gradient_clipping is not None:
config["gradient_clipping"] = gradient_clipping
return config
def _init(self, gradient_clipping=None):
model = SimpleModel(hidden_dim=8)
engine, _, _, _ = deepspeed.initialize(config=self._config(gradient_clipping),
model=model,
model_parameters=model.parameters())
return engine
def test_init_without_gradient_clipping_defaults_to_one(self):
engine = self._init()
assert engine.gradient_clipping() == 1.0
def test_explicit_zero_disables_clipping(self):
engine = self._init(gradient_clipping=0.0)
assert engine.gradient_clipping() == 0.0