mindspore.sync_pipeline_shared_parameters

查看源文件
mindspore.sync_pipeline_shared_parameters(net)[源代码]

在流水线并行场景下,部分参数可能会被不同的stage之间共享。例如 embedding tableVocabEmbeddingLMHead 两层共享,这两层通常会被切分到不同的stage上。 在流水线并行推理时,有必要 embedding table 变更后在stage之间进行权重同步。

说明

网络需要先编译,再执行stage之间权重同步。

参数:
  • net (nn.Cell) - 推理网络。

样例:

>>> import numpy as np
>>> import mindspore as ms
>>> from mindspore import nn, ops, Parameter, Tensor
>>> class VocabEmbedding(nn.Cell):
...     def __init__(self, vocab_size, embedding_size):
...         super().__init__()
...         self.embedding_table = Parameter(Tensor(np.ones([vocab_size, embedding_size]), ms.float32),
...                                          name='embedding')
...         self.gather = ops.Gather()
...
...     def construct(self, x):
...         output = self.gather(self.embedding_table, x, 0)
...         output = output.squeeze(1)
...         return output, self.embedding_table.value()
...
>>> class LMHead(nn.Cell):
...     def __init__(self):
...         super().__init__()
...         self.matmul = ops.MatMul(transpose_b=True)
...
...     def construct(self, state, embed):
...         return self.matmul(state, embed)
...
>>> class Network(nn.Cell):
...     @lazy_inline
...     def __init__(self):
...         super().__init__()
...         self.word_embedding = VocabEmbedding(vocab_size=4, embedding_size=4)
...         self.head = LMHead()
...
...     def construct(self, x):
...         x, embed = self.word_embedding(x)
...         x = self.head(x, embed)
...         return x
>>>
>>> net = Network()
>>> net.word_embedding.pipeline_stage = 0
>>> net.head.pipeline_stage = 1
>>> x = Tensor(np.ones((8, 4))
>>> net.compile()
>>> ms.sync_pipeline_shared_parameters(net)
>>> print(net.word_embedding.embedding_table.asnumpy())
>>> [[1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]]