MindSpore分布式算子支持

查看源文件

分布式算子

操作名

约束

mindspore.ops.Abs

mindspore.ops.ACos

mindspore.ops.Acosh

mindspore.ops.Add

mindspore.ops.ApproximateEqual

mindspore.ops.ArgMaxWithValue

输入在轴(axis)的维度进行切分时,分布式结果可能会和单机不一致

mindspore.ops.ArgMinWithValue

输入在轴(axis)的维度进行切分时,分布式结果可能会和单机不一致

mindspore.ops.Asin

mindspore.ops.Asinh

mindspore.ops.Assign

mindspore.ops.AssignAdd

mindspore.ops.AssignSub

mindspore.ops.Atan

mindspore.ops.Atan2

mindspore.ops.Atanh

mindspore.ops.AvgPool

1. 数据格式只支持‘NCHW’;
2. 输出的H/W维的shape必须能被输入的H/W维的切分策略整除;
3. 如果切分H/W:
1) 当kernel_size <= stride时,输入切片大小需能被stride整除;
2) 不支持kernel_size > stride;
4. 在auto_parallel模式下,不支持双递归算法。

mindspore.ops.BatchMatMul

不支持transpose_a=True

mindspore.ops.BatchNorm

不支持GPU

mindspore.ops.BesselI0e

mindspore.ops.BesselI1e

mindspore.ops.BiasAdd

mindspore.ops.BroadcastTo

mindspore.ops.Cast

Auto Parallel和Semi Auto Parallel模式下,配置策略不生效

mindspore.ops.Ceil

mindspore.ops.Concat

输入(input_x)在轴(axis)所对应的维度不能切分,切分后,在数学逻辑上和单机不等价

mindspore.ops.Conv2D

1. 数据格式只支持‘NCHW’;
2. 如果涉及相邻节点数据交换:
1) 只支持Ascend;
2) 只支持切分N/C-in/C-out/W维度;
3. 当group或dilation的值不为1时,只支持对N维进行切分;
4. weight的后两维不支持切分;
5. 输出的H/W维的shape必须能被输入的H/W维的切分策略整除;
6. pad模式下:不支持切分H/W维;
7. valid模式下:如果切分H/W:
1) 当kernel_size <= stride时,输入切片大小需能被stride整除;
2) 不支持kernel_size > stride;
8. same模式下:如果切分H/W:
1) 当kernel_size <= stride时,输入切片大小需能被stride整除;
2) 当kernel_size > stride时:
a) 不支持切分H维;
b) W维的原始长度需能被stride整除;
c) W维的输入切片大小需大于(kernel_size - stride + 1)/ 2;
d) 不支持 kernel_size - stride = 1;

mindspore.ops.Conv2DBackpropInput

1. 数据格式只支持‘NCHW’;
2. 如果涉及相邻节点数据交换:
1) 只支持Ascend;
2) 只支持切分N/C-in/C-out/W维度;
3. 当group或dilation的值不为1时,只支持对N维进行切分;
4. weight的后两维不支持切分;
5. 输出的H/W维的shape必须能被输入的H/W维的切分策略整除;
6. pad模式下:不支持切分H/W维;
7. valid模式下:不支持切分H/W维;
8. same模式下:
1) 不支持切分H维;
2) 如果切分W维:
a) W维的原始输入大小乘以stride需等于W维的原始输出shape;
b) 如果kernel_size > stride,相邻卡间需发送及接收数据,且W维发送接收的数据长度需小于切片大小;

mindspore.ops.Cos

mindspore.ops.Cosh

mindspore.ops.Div

mindspore.ops.DivNoNan

mindspore.ops.Dropout

mindspore.ops.DropoutDoMask

需和DropoutGenMask联合使用

mindspore.ops.DropoutGenMask

需和DropoutDoMask联合使用,不支持配置切分策略

mindspore.ops.Elu

mindspore.ops.EmbeddingLookup

同Gather

mindspore.ops.Equal

mindspore.ops.Erf

mindspore.ops.Erfc

mindspore.ops.Exp

mindspore.ops.ExpandDims

mindspore.ops.Expm1

mindspore.ops.Floor

mindspore.ops.FloorDiv

mindspore.ops.FloorMod

mindspore.ops.Gather

仅支持1维和2维的input_params,并且input_params的最后一维要32字节对齐(出于性能考虑);不支持标量input_indices;参数在轴(axis)所在维度切分时,不支持重复计算;不支持input_indices和input_params同时进行切分

mindspore.ops.GatherD

dim所对应的维度不能切分;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.GatherNd

第一个输入不能切分,第二个输入的最后一维不能切分;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.GeLU

mindspore.ops.Greater

mindspore.ops.GreaterEqual

mindspore.ops.Inv

mindspore.ops.L2Normalize

输入(input_x)在轴(axis)对应的维度不能切,切分后,在数学逻辑上和单机不等价

mindspore.ops.Less

mindspore.ops.LessEqual

mindspore.ops.LogicalAnd

mindspore.ops.LogicalNot

mindspore.ops.LogicalOr

mindspore.ops.Log

mindspore.ops.Log1p

mindspore.ops.LogSoftmax

输入(logits)在轴(axis)对应的维度不可切分,切分后,在数学逻辑上和单机不等价

mindspore.ops.MatMul

1. 不支持transpose_a=True
2. 当transpose_b=True时,输入的切分策略需是 ((A, B), (C, B)) 的形式
3. 当transpose_b=False时,输入的切分策略需是 ((A, B), (B, C)) 的形式;
4. 支持设置输出切分策略,合法的输出切分策略为 ((A, C),) 或 ((A * B, C),) 。

mindspore.ops.Maximum

mindspore.ops.MaxPool

1. 数据格式只支持‘NCHW’;
2. 输出的H/W维的shape必须能被输入的H/W维的切分策略整除;
3. 如果切分H/W:
1) 当kernel_size <= stride时,输入切片大小需能被stride整除;
2) 不支持kernel_size > stride;
4. 在auto_parallel模式下,不支持双递归算法。

mindspore.ops.Minimum

mindspore.ops.Mod

mindspore.ops.Mul

mindspore.ops.Neg

mindspore.ops.NotEqual

mindspore.ops.OneHot

仅支持输入(indices)是1维的Tensor,切分策略要配置输出的切分策略,以及第1和第2个输入的切分策略

mindspore.ops.OnesLike

mindspore.ops.Pow

mindspore.ops.PReLU

weight的shape在非[1]的情况下,输入(input_x)的Channel维要和weight的切分方式一致

mindspore.ops.RealDiv

mindspore.ops.Reciprocal

mindspore.ops.ReduceMax

输入在轴(axis)的维度进行切分时,分布式结果可能会和单机不一致

mindspore.ops.ReduceMin

输入在轴(axis)的维度进行切分时,分布式结果可能会和单机不一致

mindspore.ops.ReduceSum

mindspore.ops.ReduceMean

mindspore.ops.ReLU

mindspore.ops.ReLU6

mindspore.ops.ReLUV2

mindspore.ops.Reshape

不支持配置切分策略,并且,在自动并行模式下,当reshape算子后接有多个算子,不允许对这些算子配置不同的切分策略

mindspore.ops.ResizeNearestNeighbor

align_corners=True时只支持切分第一维和第二维

mindspore.ops.Round

mindspore.ops.Rsqrt

mindspore.ops.ScatterUpdate

第一个输入的第一维不能切分,第二个输入不能切分,第三个输入的前n维(n为第二个输入的维度)不能切分;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.Select

在auto_parallel模式下,不支持双递归算法。

mindspore.ops.Sigmoid

mindspore.ops.SigmoidCrossEntropyWithLogits

mindspore.ops.Sign

mindspore.ops.Sin

mindspore.ops.Sinh

mindspore.ops.Softmax

输入(logits)在轴(axis)对应的维度不可切分,切分后,在数学逻辑上和单机不等价

mindspore.ops.SoftmaxCrossEntropyWithLogits

输入(logits、labels)的最后一维不能切分;有两个输出,正向的loss只支持取[0]

mindspore.ops.Softplus

mindspore.ops.Softsign

mindspore.ops.SparseGatherV2

同Gather

mindspore.ops.Split

轴(axis)所对应的维度不能切分,切分后,在数学逻辑上和单机不等价

mindspore.ops.Sqrt

mindspore.ops.Square

mindspore.ops.Squeeze

mindspore.ops.Stack

mindspore.ops.StridedSlice

仅支持值为全0的mask;需要切分的维度必须全部提取;输入在strides不为1对应的维度不支持切分

mindspore.ops.Slice

需要切分的维度必须全部提取

mindspore.ops.Sub

mindspore.ops.Tan

mindspore.ops.Tanh

mindspore.ops.Tile

仅支持对multiples配置切分策略

mindspore.ops.TopK

最后一维不支持切分,切分后,在数学逻辑上和单机不等价

mindspore.ops.Transpose

mindspore.ops.Unique

只支持重复计算的策略(1,)

mindspore.ops.UnsortedSegmentSum

输入input_x和segment_ids的切分配置必须在segment_ids的维度上保持一致

mindspore.ops.UnsortedSegmentMin

输入input_x和segment_ids的切分配置必须在segment_ids的维度上保持一致。注意:在segment id为空时,输出向量的对应位置会填充为输入类型的最大值。需要用户进行掩码处理,将最大值转换成0。否则容易造成数值溢出,导致通信算子上溢错误,从而引发Run Task Error

mindspore.ops.UnsortedSegmentMax

输入input_x和segment_ids的切分配置必须在segment_ids的维度上保持一致。注意:在segment id为空时,输出向量的对应位置会填充为输入类型的最小值。需要用户进行掩码处理,将最小值转换成0。否则容易造成数值溢出,导致通信算子上溢错误,从而引发Run Task Error

mindspore.ops.ZerosLike

重复计算是指,机器没有用满,比如:集群有8张卡跑分布式训练,切分策略只对输入切成了4份。这种情况下会发生重复计算。