算子级并行使用约束

查看源文件

操作名

约束

mindspore.ops.Abs

mindspore.ops.ACos

mindspore.ops.Acosh

mindspore.ops.Add

mindspore.ops.AddN

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.AvgPool3D

1. 数据格式只支持‘NCDHW’;
2. 如果涉及相邻节点数据交换,只支持Ascend;
3. W维不支持切分;
4. 输出的D/H维的shape必须能被输入的D/H维的切分策略整除;
5. valid模式下:如果切分D/H:
1)当kernel_size <= stride时,输入切片大小需能被stride整除;
2)不支持kernel_size > stride;
6. same/pad模式下:如果切分D/H:
1)kernel_size >= stride时,(包含pad的输入总长度 - kernel_size)需能被stride整除;kernel_size < stride时,pad需等于0且分片能被stride整除;
2)(输出总长度*stride - 输入总长度)需能被切分策略整除;
3)相邻卡间发送接收的数据长度需大于等于0且小于等于切片大小;
7. 在auto_parallel模式下,不支持双递归算法。

mindspore.ops.BatchMatMul

不支持transpose_a=True

mindspore.ops.BatchNorm

不支持GPU

mindspore.ops.BesselI0e

mindspore.ops.BesselI1e

mindspore.ops.BiasAdd

mindspore.ops.BitwiseAnd

mindspore.ops.BitwiseOr

mindspore.ops.BitwiseXor

mindspore.ops.BoundingBoxEncode

1. 支持对输入(anchor_box)和输入(groundtruth_box)的第一维进行切分;
2. 输入(anchor_box)和输入(groundtruth_box)的切分策略必须一致

mindspore.ops.BroadcastTo

mindspore.ops.Cast

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

mindspore.ops.Cdist

1. 当两输入都含有Batch维时,这一维的切分策略必须相等;
2.M维度不支持切分

mindspore.ops.Ceil

mindspore.ops.Concat

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

mindspore.ops.Conv2D

1. 数据格式只支持‘NCHW’;
2. 如果涉及相邻节点数据交换,只支持Ascend;
3. 当group的值不为1时,不支持切分C-in/C-out;
4. weight的后两维不支持切分;
5. 输出的H/W维的shape必须能被输入的H/W维的切分策略整除;
6. valid模式下:如果切分H/W:
1)当kernel_size <= stride时其中(kernel_size=dilation (kernel_size - 1) + 1,下同),输入切片大小需能被stride整除;
2)不支持kernel_size > stride;
7. same/pad模式下:如果切分H/W:
1)kernel_size >= stride时,(包含pad的输入总长度 - kernel_size)需能被stride整除;kernel_size < stride时,pad需等于0且分片能被stride整除;
2)( 输出总长度
stride - 输入总长度)需能被切分策略整除;
3)相邻卡间发送接收的数据长度需大于等于0且小于等于切片大小;

mindspore.ops.Conv3D

1. 数据格式只支持‘NCDHW’;
2. 如果涉及相邻节点数据交换,只支持Ascend;
3. 当group的值不为1时,不支持切分C-in/C-out;
4. W维不支持切分,weight的后三维不支持切分;
5. 输出的D/H维的shape必须能被输入的D/H维的切分策略整除;
6. valid模式下:如果切分D/H:
1)当kernel_size <= stride时(kernel_size=dilation (kernel_size - 1) + 1,下同),输入切片大小需能被stride整除;
2)不支持kernel_size > stride;
7. same/pad模式下:如果切分D/H:
1)kernel_size >= stride时,(包含pad的输入总长度 - kernel_size)需能被stride整除;kernel_size < stride时,pad需等于0且分片能被stride整除;
2)( 输出总长度
stride - 输入总长度)需能被切分策略整除;
3)相邻卡间发送接收的数据长度需大于等于0且小于等于切片大小;
8. 在auto_parallel模式下,不支持双递归算法。

mindspore.ops.Cos

mindspore.ops.Cosh

mindspore.ops.CropAndResize

1. 不支持对输入(x)的H/W维和输入(boxes)的第二维进行切分;
2. 输入(boxes)和输入(box_index)第一维的切分策略必须一致

mindspore.ops.CumProd

不支持axis维切分

mindspore.ops.CumSum

不支持axis维切分

mindspore.ops.Div

mindspore.ops.DivNoNan

mindspore.ops.Dropout

mindspore.ops.Elu

mindspore.ops.EmbeddingLookup

同Gather

mindspore.ops.Equal

mindspore.ops.Erf

mindspore.ops.Erfc

mindspore.ops.Erfinv

mindspore.ops.Exp

mindspore.ops.ExpandDims

mindspore.ops.Expm1

mindspore.ops.Floor

mindspore.ops.FloorDiv

mindspore.ops.FloorMod

mindspore.ops.Gamma

1. shape为tuple,但可以对shape进行切分,如shape=(8, 16),对应的策略可以为(2, 4);
2. alphabeta对应的策略必须为全1;
3. 当shape切分策略不为全1时,结果和单卡不一致

mindspore.ops.Gather

1. 均匀切分时:
1)仅支持一维和二维的input_params,并且input_params的切片的最后一维要32字节对齐(出于性能考虑);
2)不支持标量input_indices;
3)参数在轴(axis)所在维度切分时,不支持重复计算;
4)不支持input_indices和input_params同时进行切分;
5)axis=0且参数在轴(axis)所在维度切分时,支持配置输出切分策略,合法的输出切分策略为(indices_strategy, param_strategy[1:]) 或 ((indices_strategy[0]*param_strategy[0], indices_strategy[1:]), param_strategy[1:])
2. 非均匀切分时:
1)axis仅支持为0;
2)非均匀切分仅表示对input_params的第零维非均匀切分,并且input_params的切片的最后一维要32字节对齐;
3)对input_params第零维的切分份数要等于对input_indices最后一维的切分份数;
4)input_params的每个维度都能切分,但input_indices只能切分最后一维,且不支持重复计算;
5)input_indices需满足:后一个切片的Tensor值需大于前一个分片的Tensor值。

mindspore.ops.GatherD

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

mindspore.ops.GatherNd

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

mindspore.ops.GeLU

mindspore.ops.Greater

mindspore.ops.GreaterEqual

mindspore.ops.HShrink

mindspore.ops.HSigmoid

mindspore.ops.InplaceAdd

不支持对xinput_v的第一维切分

mindspore.ops.InplaceSub

同InplaceAdd

mindspore.ops.InplaceUpdate

同InplaceAdd

mindspore.ops.Inv

mindspore.ops.IOU

支持对anchor_boxesgt_boxes的第一维切分

mindspore.ops.IsFinite

mindspore.ops.KLDivLoss

mindspore.ops.L2Loss

mindspore.ops.L2Normalize

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

mindspore.ops.Lerp

mindspore.ops.Less

mindspore.ops.LessEqual

mindspore.ops.LinSpace

不需要为startend配置策略,只需要传入一个长度为1的策略,其数值能整除num

mindspore.ops.LogicalAnd

mindspore.ops.LogicalNot

mindspore.ops.LogicalOr

mindspore.ops.Log

mindspore.ops.Log1p

mindspore.ops.LogSoftmax

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

mindspore.ops.MaskedFill

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.MaxPool3D

同AvgPool3D

mindspore.ops.Minimum

mindspore.ops.Mish

mindspore.ops.Mod

mindspore.ops.Mul

mindspore.ops.MulNoNan

mindspore.ops.Neg

mindspore.ops.NotEqual

mindspore.ops.OneHot

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

mindspore.ops.OnesLike

mindspore.ops.Pow

mindspore.ops.PReLU

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

mindspore.ops.RandomChoiceWithMask

不支持切分,仅支持全1策略

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.Reshape

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

mindspore.ops.ResizeBilinear

在GPU平台下,不支持H/W维切分;在Ascend平台下,不支持H维切分,且W维的输出shape要能被切分数整除。

mindspore.ops.ResizeNearestNeighbor

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

mindspore.ops.Rint

mindspore.ops.ROIAlign

不支持对输入(features)的H/W维和输入(rois)的第二维进行切分

mindspore.ops.Round

mindspore.ops.Rsqrt

mindspore.ops.ScatterAdd

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

mindspore.ops.ScatterDiv

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

mindspore.ops.ScatterMax

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

mindspore.ops.ScatterMin

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

mindspore.ops.ScatterMul

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

mindspore.ops.ScatterNdAdd

第二个输入不能切分,第三个输入的前n-1维(n为第二个输入的维度)不能切分,第三个输入的剩下k个维度(除去前n-1维度)的切分与第一个输入的最后k个切分一致;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.ScatterNdSub

第二个输入不能切分,第三个输入的前n-1维(n为第二个输入的维度)不能切分,第三个输入的剩下k个维度(除去前n-1维度)的切分与第一个输入的最后k个切分一致;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.ScatterNdUpdate

第一个输入前m维度不能切(m为第二个输入indices的最后一维的值indices[-1])第二个输入不能切分,第三个输入的前n-1维(n为第二个输入的维度)不能切分,第三个输入的剩下k个维度(除去前n-1维度)的切分与第一个输入的最后k个切分一致;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.ScatterSub

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

mindspore.ops.ScatterUpdate

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

mindspore.ops.TensorScatterAdd

第二个输入不能切分,第三个输入的前n-1维(n为第二个输入的维度)不能切分,第三个输入的剩下k个维度(除去前n-1维度)的切分与第一个输入的最后k个切分一致;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.TensorScatterDiv

第二个输入不能切分,第三个输入的前n-1维(n为第二个输入的维度)不能切分,第三个输入的剩下k个维度(除去前n-1维度)的切分与第一个输入的最后k个切分一致;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.TensorScatterMax

第一个输入前m维度不能切(m为第二个输入indices的最后一维的值indices[-1])第二个输入不能切分,第三个输入的前n-1维(n为第二个输入的维度)不能切分,第三个输入的剩下k个维度(除去前n-1维度)的切分与第一个输入的最后k个切分一致;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.TensorScatterMax

第一个输入前m维度不能切(m为第二个输入indices的最后一维的值indices[-1])第二个输入不能切分,第三个输入的前n-1维(n为第二个输入的维度)不能切分,第三个输入的剩下k个维度(除去前n-1维度)的切分与第一个输入的最后k个切分一致;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.TensorScatterMul

第二个输入不能切分,第三个输入的前n-1维(n为第二个输入的维度)不能切分,第三个输入的剩下k个维度(除去前n-1维度)的切分与第一个输入的最后k个切分一致;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.TensorScatterAdd

第二个输入不能切分,第三个输入的前n-1维(n为第二个输入的维度)不能切分,第三个输入的剩下k个维度(除去前n-1维度)的切分与第一个输入的最后k个切分一致;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.TensorScatterUpdate

第一个输入前m维度不能切(m为第二个输入indices的最后一维的值indices[-1])第二个输入不能切分,第三个输入的前n-1维(n为第二个输入的维度)不能切分,第三个输入的剩下k个维度(除去前n-1维度)的切分与第一个输入的最后k个切分一致;在auto_parallel模式下,不支持双递归算法。

mindspore.ops.Select

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

mindspore.ops.SeLU

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.SoftShrink

mindspore.ops.SparseGatherV2

同Gather

mindspore.ops.Split

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

mindspore.ops.Sqrt

mindspore.ops.Square

mindspore.ops.SquaredDifference

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.TruncateDiv

mindspore.ops.TruncateMod

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。否则容易造成数值溢出,导致通信API上溢错误,从而引发Run Task Error

mindspore.ops.UnsortedSegmentMax

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

mindspore.ops.Xdivy

mindspore.ops.Xlogy

mindspore.ops.ZerosLike

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