chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# DeepSpeed Team
|
||||
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
|
||||
import deepspeed
|
||||
from deepspeed.utils.zero_to_fp32 import get_fp32_state_dict_from_zero_checkpoint
|
||||
from unit.common import DistributedTest
|
||||
|
||||
|
||||
class ModelWithSharedWeights(nn.Module):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.layer0 = nn.Linear(100, 100)
|
||||
self.layer1 = nn.Linear(200, 200)
|
||||
self.layer2 = nn.Linear(300, 300)
|
||||
# tie layer 1 and layer 2
|
||||
self.layer1.weight = self.layer2.weight
|
||||
|
||||
|
||||
class TestCheckpointSharedWeights(DistributedTest):
|
||||
world_size = 2
|
||||
|
||||
def test_checkpoint_shared_weights(self, tmp_path):
|
||||
config = {
|
||||
"train_micro_batch_size_per_gpu": 2,
|
||||
"zero_allow_untested_optimizer": True,
|
||||
"zero_optimization": {
|
||||
"stage": 2
|
||||
},
|
||||
}
|
||||
model = ModelWithSharedWeights()
|
||||
optimizer = torch.optim.Adam(model.parameters())
|
||||
|
||||
deepspeed_engine, _, _, _ = deepspeed.initialize(
|
||||
config=config,
|
||||
model=model,
|
||||
optimizer=optimizer,
|
||||
)
|
||||
filename = tmp_path / "checkpoint.pt"
|
||||
deepspeed_engine.save_checkpoint(filename, tag="checkpoint")
|
||||
|
||||
model = ModelWithSharedWeights()
|
||||
state_dict = get_fp32_state_dict_from_zero_checkpoint(filename, tag="checkpoint")
|
||||
model.load_state_dict(state_dict, strict=True)
|
||||
Reference in New Issue
Block a user