|
|
|
@@ -21,7 +21,7 @@ from mindspore.ops import operations as P |
|
|
|
from mindspore.common.parameter import Parameter |
|
|
|
from mindspore.common.initializer import initializer |
|
|
|
from mindspore.train.model import Model |
|
|
|
from mindspore.nn.wrap.cell_wrapper import PipelineCell |
|
|
|
from mindspore.nn.wrap.cell_wrapper import PipelineCell, MicroBatchInterleaved |
|
|
|
|
|
|
|
|
|
|
|
class DatasetLenet(): |
|
|
|
@@ -263,3 +263,93 @@ def test_pipeline_split_shared_parameter_stage1_opt_shard(): |
|
|
|
optimizer = nn.Lamb(params, learning_rate=0.01) |
|
|
|
model = Model(net, optimizer=optimizer) |
|
|
|
model.train(2, dataset, dataset_sink_mode=False) |
|
|
|
|
|
|
|
|
|
|
|
def test_pipeline_split_with_micro_batch_interleaved_stage0(): |
|
|
|
""" |
|
|
|
Feature: test PipelineSplit with MicroBatchInterleaved in auto parallel. |
|
|
|
Description: net with MicroBatchInterleaved in semi auto parallel. |
|
|
|
Expectation: success. |
|
|
|
""" |
|
|
|
context.set_auto_parallel_context(device_num=8, global_rank=0, pipeline_stages=2) |
|
|
|
context.set_auto_parallel_context(parallel_mode="semi_auto_parallel") |
|
|
|
data = Tensor(np.ones([32, 64]), dtype=ms.float32) |
|
|
|
label = Tensor(np.ones([64, 64]), dtype=ms.float32) |
|
|
|
strategy1 = ((4, 1), (1, 1)) |
|
|
|
strategy2 = ((2, 1), (1, 1)) |
|
|
|
micro_batch_interleaved = 2 |
|
|
|
net = PipelineCell(MicroBatchInterleaved(PipelineSplit(strategy1, strategy2), micro_batch_interleaved), 4) |
|
|
|
params = net.network.network.cell.block[0].trainable_params() |
|
|
|
dataset = DatasetLenet(data, label, 3) |
|
|
|
optimizer = nn.Lamb(params, learning_rate=0.01) |
|
|
|
model = Model(net, optimizer=optimizer) |
|
|
|
model.train(2, dataset, dataset_sink_mode=False) |
|
|
|
for _, param in model._train_network.parameters_and_names(): |
|
|
|
assert param.name != "cell.block.1.param" |
|
|
|
assert param.name != "cell.block.1.param1" |
|
|
|
|
|
|
|
|
|
|
|
def test_pipeline_split_with_micro_batch_interleaved_stage1(): |
|
|
|
""" |
|
|
|
Feature: test PipelineSplit with MicroBatchInterleaved in auto parallel. |
|
|
|
Description: net with MicroBatchInterleaved in semi auto parallel. |
|
|
|
Expectation: success. |
|
|
|
""" |
|
|
|
context.set_auto_parallel_context(device_num=8, global_rank=4, pipeline_stages=2) |
|
|
|
context.set_auto_parallel_context(parallel_mode="semi_auto_parallel") |
|
|
|
data = Tensor(np.ones([32, 64]), dtype=ms.float32) |
|
|
|
label = Tensor(np.ones([64, 64]), dtype=ms.float32) |
|
|
|
strategy1 = ((4, 1), (1, 1)) |
|
|
|
strategy2 = ((2, 1), (1, 1)) |
|
|
|
micro_batch_interleaved = 2 |
|
|
|
net = PipelineCell(MicroBatchInterleaved(PipelineSplit(strategy1, strategy2), micro_batch_interleaved), 4) |
|
|
|
params = net.network.network.cell.block[1].trainable_params() |
|
|
|
dataset = DatasetLenet(data, label, 3) |
|
|
|
optimizer = nn.Lamb(params, learning_rate=0.01) |
|
|
|
model = Model(net, optimizer=optimizer) |
|
|
|
model.train(2, dataset, dataset_sink_mode=False) |
|
|
|
for _, param in model._train_network.parameters_and_names(): |
|
|
|
assert param.name != "cell.block.0.param" |
|
|
|
assert param.name != "cell.block.0.param1" |
|
|
|
|
|
|
|
|
|
|
|
def test_pipeline_split_shared_parameter_with_micro_batch_interleaved_stage0_opt_shard(): |
|
|
|
""" |
|
|
|
Feature: test PipelineSplitSharedParameter with MicroBatchInterleaved in auto parallel. |
|
|
|
Description: net with MicroBatchInterleaved in semi auto parallel. |
|
|
|
Expectation: success. |
|
|
|
""" |
|
|
|
context.set_auto_parallel_context(device_num=8, global_rank=0, pipeline_stages=2, enable_parallel_optimizer=True) |
|
|
|
context.set_auto_parallel_context(parallel_mode="semi_auto_parallel") |
|
|
|
data = Tensor(np.ones([32, 64]), dtype=ms.float32) |
|
|
|
label = Tensor(np.ones([64, 64]), dtype=ms.float32) |
|
|
|
strategy1 = ((4, 1), (1, 1)) |
|
|
|
strategy2 = ((2, 1), (1, 1)) |
|
|
|
micro_batch_interleaved = 2 |
|
|
|
net = PipelineCell(MicroBatchInterleaved(PipelineSplit2(strategy1, strategy2), micro_batch_interleaved), 4) |
|
|
|
params = net.network.network.cell.block[0].trainable_params() |
|
|
|
dataset = DatasetLenet(data, label, 3) |
|
|
|
optimizer = nn.Lamb(params, learning_rate=0.01) |
|
|
|
model = Model(net, optimizer=optimizer) |
|
|
|
model.train(2, dataset, dataset_sink_mode=False) |
|
|
|
|
|
|
|
|
|
|
|
def test_pipeline_split_shared_parameter_with_micro_batch_interleaved_stage1_opt_shard(): |
|
|
|
""" |
|
|
|
Feature: test PipelineSplitSharedParameter with MicroBatchInterleaved in auto parallel. |
|
|
|
Description: net with MicroBatchInterleaved in semi auto parallel. |
|
|
|
Expectation: success. |
|
|
|
""" |
|
|
|
context.set_auto_parallel_context(device_num=8, global_rank=4, pipeline_stages=2, enable_parallel_optimizer=True) |
|
|
|
context.set_auto_parallel_context(parallel_mode="semi_auto_parallel") |
|
|
|
data = Tensor(np.ones([32, 64]), dtype=ms.float32) |
|
|
|
label = Tensor(np.ones([64, 64]), dtype=ms.float32) |
|
|
|
strategy1 = ((4, 1), (1, 1)) |
|
|
|
strategy2 = ((2, 1), (1, 1)) |
|
|
|
micro_batch_interleaved = 2 |
|
|
|
net = PipelineCell(MicroBatchInterleaved(PipelineSplit2(strategy1, strategy2), micro_batch_interleaved), 4) |
|
|
|
params = net.network.network.cell.block[1].trainable_params() |
|
|
|
dataset = DatasetLenet(data, label, 3) |
|
|
|
optimizer = nn.Lamb(params, learning_rate=0.01) |
|
|
|
model = Model(net, optimizer=optimizer) |
|
|
|
model.train(2, dataset, dataset_sink_mode=False) |