chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# DeepSpeed Team
|
||||
import pytest
|
||||
import deepspeed.comm as dist
|
||||
from unit.common import DistributedTest
|
||||
from unit.simple_model import random_dataloader
|
||||
|
||||
import deepspeed
|
||||
import torch
|
||||
from deepspeed.runtime.zero.offload_config import DeepSpeedZeroOffloadOptimizerConfig
|
||||
|
||||
import torch.nn as nn
|
||||
|
||||
|
||||
class NNModel(nn.Module):
|
||||
|
||||
def __init__(self, h_dim=1024, n_layers=2):
|
||||
super(NNModel, self).__init__()
|
||||
self.layers = nn.ModuleList([nn.Linear(h_dim, h_dim) for i in range(n_layers)])
|
||||
self.cross_entropy_loss = nn.CrossEntropyLoss()
|
||||
|
||||
def forward(self, x, y):
|
||||
for layer in self.layers:
|
||||
x = layer(x)
|
||||
return self.cross_entropy_loss(x, y)
|
||||
|
||||
|
||||
def test_zero_partial_offload_config():
|
||||
config = DeepSpeedZeroOffloadOptimizerConfig(**{"ratio": 0.3})
|
||||
assert config.ratio == 0.3
|
||||
|
||||
|
||||
#Large sweep along hidden dim, num_layers of different sizes
|
||||
@pytest.mark.parametrize("h_dim", [1024])
|
||||
@pytest.mark.parametrize("n_layers", [4, 8])
|
||||
class TestZeroPartialOffloadConfigSweep(DistributedTest):
|
||||
world_size = 4
|
||||
|
||||
def test(self, h_dim: int, n_layers: int) -> None:
|
||||
|
||||
config_dict = {
|
||||
"train_batch_size": 256,
|
||||
"steps_per_print": 1,
|
||||
"gradient_clipping": 1.0,
|
||||
"optimizer": {
|
||||
"type": "Adam",
|
||||
"params": {
|
||||
"lr": 0.00015,
|
||||
}
|
||||
},
|
||||
"fp16": {
|
||||
"enabled": True,
|
||||
"initial_scale_power": 15
|
||||
},
|
||||
"zero_optimization": {
|
||||
"stage": 3,
|
||||
"sub_group_size": 8,
|
||||
"reduce_bucket_size": 20,
|
||||
"offload_optimizer": {
|
||||
"device": "cpu",
|
||||
"pin_memory": True,
|
||||
"ratio": 0.3
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
model = NNModel(h_dim, n_layers)
|
||||
model, _, _, _ = deepspeed.initialize(model=model, model_parameters=model.parameters(), config=config_dict)
|
||||
data_loader = random_dataloader(model=model,
|
||||
total_samples=20,
|
||||
hidden_dim=h_dim,
|
||||
device=model.device,
|
||||
dtype=torch.float16)
|
||||
dist.barrier()
|
||||
|
||||
for n, batch in enumerate(data_loader):
|
||||
loss = model(batch[0], batch[1])
|
||||
model.backward(loss)
|
||||
model.step()
|
||||
Reference in New Issue
Block a user