mindscience.distributed.modules.RowParallelLinear

class mindscience.distributed.modules.RowParallelLinear(in_features, out_features, bias=True, input_is_parallel=False, use_sequence_parallel=False, weight_init=None, bias_init=None, param_init_dtype=ms.float32, compute_dtype=ms.bfloat16)[源代码]

行并行线性层,将输入特征维度在TP通信组中进行分片。

参数:
  • in_features (int) - TP通信组内所有卡的总输入特征数量。

  • out_features (int) - 输出特征数量。

  • bias (bool, 可选) - 是否创建偏置参数(不沿输入维度分片)。默认值:True

  • input_is_parallel (bool, 可选) - 是否期望输入已在TP通信组中切分。默认值:False

  • use_sequence_parallel (bool, 可选) - 是否对输出使用reduce scatter而不是all reduce。默认值:False

  • weight_init (Union[Initializer, str], 可选) - 权重初始化方法。默认值:None

  • bias_init (Union[Initializer, str], 可选) - 偏置初始化方法。默认值:None

  • param_init_dtype (mstype.dtype, 可选) - 参数初始化数据类型。默认值:ms.float32

  • compute_dtype (mstype.dtype, 可选) - 计算数据类型。默认值:ms.bfloat16

输入:
  • x (Tensor) - 形状为 (seq_len, in_features // TP) 或 (seq_len, in_features) 的输入张量,具体取决于 input_is_parallel 是否为 True

输出:
  • output (Tensor) - 形状为 (seq_len // TP, out_features) 或 (seq_len, out_features) 的输出张量,具体取决于 use_sequence_parallel 是否为 True

样例:

>>> import mindspore as ms
>>> from mindspore.communication import init
>>> from mindscience.distributed import initialize_parallel
>>> from mindscience.distributed.modules import RowParallelLinear
>>> init()
>>> initialize_parallel(tensor_parallel_size=2)
>>> linear = RowParallelLinear(in_features=1024, out_features=512, bias=True)
>>> input_tensor = ms.mint.randn(32, 1024)
>>> output = linear(input_tensor)
>>> print(output.shape)
(32, 512)