算子级并行使用约束

查看源文件

操作名

约束

Layout配置约束

mindspore.ops.Abs

不支持配置Layout

mindspore.ops.ACos

不支持配置Layout

mindspore.ops.Acosh

不支持配置Layout

mindspore.ops.Add

支持配置Layout,输入的Layout 需要相同或能广播,不支持配置输出的Layout

mindspore.ops.AddN

不支持配置Layout

mindspore.ops.ApproximateEqual

不支持配置Layout

mindspore.ops.ArgMaxWithValue

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

不支持配置Layout

mindspore.ops.ArgMinWithValue

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

不支持配置Layout

mindspore.ops.Asin

不支持配置Layout

mindspore.ops.Asinh

不支持配置Layout

mindspore.ops.Assign

不支持配置Layout

mindspore.ops.AssignAdd

不支持配置Layout

mindspore.ops.AssignSub

不支持配置Layout

mindspore.ops.Atan

不支持配置Layout

mindspore.ops.Atan2

不支持配置Layout

mindspore.ops.Atanh

不支持配置Layout

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模式下,不支持双递归算法。

不支持配置Layout

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模式下,不支持双递归算法。

不支持配置Layout

mindspore.ops.BatchMatMul

不支持配置Layout

mindspore.ops.BatchNorm

不支持GPU

不支持配置Layout

mindspore.ops.BesselI0e

不支持配置Layout

mindspore.ops.BesselI1e

不支持配置Layout

mindspore.ops.BiasAdd

支持配置Layout,输入参数bias的Layout需要和input_x的最后一维度相同,不支持配置输出的Layout

mindspore.ops.BitwiseAnd

不支持配置Layout

mindspore.ops.BitwiseOr

不支持配置Layout

mindspore.ops.BitwiseXor

不支持配置Layout

mindspore.ops.BoundingBoxEncode

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

不支持配置Layout

mindspore.ops.BroadcastTo

不支持配置Layout

mindspore.ops.Cast

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

不支持配置Layout

mindspore.ops.Cdist

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

不支持配置Layout

mindspore.ops.Ceil

不支持配置Layout

mindspore.ops.Concat

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

不支持配置Layout

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且小于等于切片大小;

不支持配置Layout

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模式下,不支持双递归算法。

不支持配置Layout

mindspore.ops.Cos

不支持配置Layout

mindspore.ops.Cosh

不支持配置Layout

mindspore.ops.CropAndResize

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

不支持配置Layout

mindspore.ops.CumProd

不支持axis维切分

不支持配置Layout

mindspore.ops.CumSum

不支持axis维切分

不支持配置Layout

mindspore.ops.Div

支持配置Layout,输入的Layout 需要相同或能广播,不支持配置输出的Layout

mindspore.ops.DivNoNan

不支持配置Layout

mindspore.ops.Dropout

不支持配置Layout

mindspore.ops.Elu

不支持配置Layout

mindspore.ops.EmbeddingLookup

同Gather

不支持配置Layout

mindspore.ops.Equal

不支持配置Layout

mindspore.ops.Erf

不支持配置Layout

mindspore.ops.Erfc

不支持配置Layout

mindspore.ops.Erfinv

不支持配置Layout

mindspore.ops.Exp

不支持配置Layout

mindspore.ops.ExpandDims

不支持配置Layout

mindspore.ops.Expm1

不支持配置Layout

mindspore.ops.Floor

不支持配置Layout

mindspore.ops.FloorDiv

不支持配置Layout

mindspore.ops.FloorMod

不支持配置Layout

mindspore.ops.Gamma

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

不支持配置Layout

mindspore.ops.Gather

1. batch_dims > 0时:
1)input_params的axis维度不支持切分;
2)不支持非均匀切分;
2. batch_dims = 0时:
1)均匀切分时:
a)如果input_params的axis维度不切分,则其他维度可以任意切分;
b)input_params的axis维度切分时:input_params只支持1维和2维,input_indices不支持标量,不支持input_indices和input_params同时进行切分;axis=0且参数在轴(axis)所在维度切分时,支持配置输出切分策略,合法的输出切分策略为(indices_strategy, param_strategy[1:]) 或 ((indices_strategy[0]*param_strategy[0], indices_strategy[1:]), param_strategy[1:])
2)非均匀切分时:
a)axis仅支持为0;
b)非均匀切分仅表示对input_params的第零维非均匀切分;
c)对input_params第零维的切分份数要等于对input_indices最后一维的切分份数;
d)input_params的每个维度都能切分,但input_indices只能切分最后一维,且不支持重复计算;
e)input_indices需满足:后一个切片的Tensor值需大于前一个分片的Tensor值。

不支持配置Layout

mindspore.ops.GatherD

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

不支持配置Layout

mindspore.ops.GatherNd

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

不支持配置Layout

mindspore.ops.GeLU

支持配置输入的Layout,不支持配置输出的Layout

mindspore.ops.Greater

不支持配置Layout

mindspore.ops.GreaterEqual

不支持配置Layout

mindspore.ops.HShrink

不支持配置Layout

mindspore.ops.HSigmoid

不支持配置Layout

mindspore.ops.InplaceAdd

不支持对xinput_v的第一维切分

不支持配置Layout

mindspore.ops.InplaceSub

同InplaceAdd

不支持配置Layout

mindspore.ops.InplaceUpdate

同InplaceAdd

不支持配置Layout

mindspore.ops.Inv

不支持配置Layout

mindspore.ops.IOU

支持对anchor_boxesgt_boxes的第一维切分

不支持配置Layout

mindspore.ops.IsFinite

不支持配置Layout

mindspore.ops.KLDivLoss

不支持配置Layout

mindspore.ops.LayerNorm

第二个输入gamma以及第三个输入beta的切分策略需要等于input_x_strategy[begin_params_axis:],input_x_strategy是第一个输入的切分策略

支持配置Layout。第二个输入gamma以及第三个输入beta的Layout配置需要等于input_x_layout_tuple[begin_params_axis:]。 第二个输入gamma以及第三个输入beta的Layout配置需要等于input_x_layout_tuple是第一个输入的layout配置

mindspore.ops.L2Loss

不支持配置Layout

mindspore.ops.L2Normalize

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

不支持配置Layout

mindspore.ops.Lerp

不支持配置Layout

mindspore.ops.Less

不支持配置Layout

mindspore.ops.LessEqual

不支持配置Layout

mindspore.ops.LinSpace

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

不支持配置Layout

mindspore.ops.LogicalAnd

不支持配置Layout

mindspore.ops.LogicalNot

不支持配置Layout

mindspore.ops.LogicalOr

不支持配置Layout

mindspore.ops.Log

不支持配置Layout

mindspore.ops.Log1p

不支持配置Layout

mindspore.ops.LogSoftmax

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

不支持配置Layout

mindspore.ops.MaskedFill

不支持配置Layout

mindspore.ops.MatMul

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

支持配置Layout。
1. 当transpose_b=True时,输入的Layout配置需是 (layout(A, B), layout(C, B)) 的形式,其中A/B/C可以是设备别名或者是设备别名元组
2. 当transpose_b=False时,输入的layout配置需是 (layout(A, B), layout(B, C)) 的形式,其中A/B/C可以是设备别名或者是设备别名元组;
3. 支持配置输出Layout,合法的输出Layout为 (layout(A, C),) 或 (layout((A, B), C),),这里A/B/C均为设备别名;如若A是别名元组(A1, A2),则合法的输出Layout为 (layout((A1, A2), C),) 或 (layout((A1, A2, B), C),) 。

mindspore.ops.Maximum

不支持配置Layout

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模式下,不支持双递归算法。

不支持配置Layout

mindspore.ops.MaxPool3D

同AvgPool3D

不支持配置Layout

mindspore.ops.Minimum

不支持配置Layout

mindspore.ops.Mish

不支持配置Layout

mindspore.ops.Mod

不支持配置Layout

mindspore.ops.Mul

支持配置Layout,输入的Layout 需要相同或能广播,不支持配置输出的Layout

mindspore.ops.MulNoNan

不支持配置Layout

mindspore.ops.Neg

不支持配置Layout

mindspore.ops.NotEqual

不支持配置Layout

mindspore.ops.OneHot

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

不支持配置Layout

mindspore.ops.OnesLike

不支持配置Layout

mindspore.ops.Pow

不支持配置Layout

mindspore.ops.PReLU

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

不支持配置Layout

mindspore.ops.RandomChoiceWithMask

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

不支持配置Layout

mindspore.ops.RealDiv

不支持配置Layout

mindspore.ops.Reciprocal

不支持配置Layout

mindspore.ops.ReduceMax

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

不支持配置Layout

mindspore.ops.ReduceMin

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

不支持配置Layout

mindspore.ops.ReduceSum

不支持配置Layout

mindspore.ops.ReduceMean

不支持配置Layout

mindspore.ops.ReLU

支持配置输入的Layout,不支持配置输出的Layout

mindspore.ops.ReLU6

不支持配置Layout

mindspore.ops.Reshape

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

不支持配置Layout

mindspore.ops.ResizeNearestNeighbor

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

不支持配置Layout

mindspore.ops.Rint

不支持配置Layout

mindspore.ops.ROIAlign

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

不支持配置Layout

mindspore.ops.Round

不支持配置Layout

mindspore.ops.Rsqrt

不支持配置Layout

mindspore.ops.ScatterAdd

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

不支持配置Layout

mindspore.ops.ScatterDiv

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

不支持配置Layout

mindspore.ops.ScatterMax

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

不支持配置Layout

mindspore.ops.ScatterMin

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

不支持配置Layout

mindspore.ops.ScatterMul

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

不支持配置Layout

mindspore.ops.ScatterNdAdd

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

不支持配置Layout

mindspore.ops.ScatterNdSub

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

不支持配置Layout

mindspore.ops.ScatterNdUpdate

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

不支持配置Layout

mindspore.ops.ScatterSub

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

不支持配置Layout

mindspore.ops.ScatterUpdate

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

不支持配置Layout

mindspore.ops.TensorScatterAdd

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

不支持配置Layout

mindspore.ops.TensorScatterDiv

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

不支持配置Layout

mindspore.ops.TensorScatterMax

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

不支持配置Layout

mindspore.ops.TensorScatterMax

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

不支持配置Layout

mindspore.ops.TensorScatterMul

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

不支持配置Layout

mindspore.ops.TensorScatterAdd

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

不支持配置Layout

mindspore.ops.TensorScatterUpdate

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

不支持配置Layout

mindspore.ops.Select

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

不支持配置Layout

mindspore.ops.SeLU

不支持配置Layout

mindspore.ops.Sigmoid

支持配置输入的Layout,不支持配置输出的Layout

mindspore.ops.SigmoidCrossEntropyWithLogits

不支持配置Layout

mindspore.ops.Sign

不支持配置Layout

mindspore.ops.Sin

不支持配置Layout

mindspore.ops.Sinh

不支持配置Layout

mindspore.ops.Softmax

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

支持配置输入的Layout,不支持配置输出的Layout,并且不能在轴(axis)对应的维度配置Layout

mindspore.ops.SoftmaxCrossEntropyWithLogits

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

不支持配置Layout

mindspore.ops.Softplus

不支持配置Layout

mindspore.ops.Softsign

不支持配置Layout

mindspore.ops.SoftShrink

不支持配置Layout

mindspore.ops.SparseGatherV2

同Gather

不支持配置Layout

mindspore.ops.Split

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

不支持配置Layout

mindspore.ops.Sqrt

不支持配置Layout

mindspore.ops.Square

不支持配置Layout

mindspore.ops.SquaredDifference

不支持配置Layout

mindspore.ops.Squeeze

不支持配置Layout

mindspore.ops.Stack

不支持配置Layout

mindspore.ops.StridedSlice

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

不支持配置Layout

mindspore.ops.Slice

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

不支持配置Layout

mindspore.ops.Sub

支持配置Layout,输入的Layout 需要相同或能广播,不支持配置输出的Layout

mindspore.ops.Tan

不支持配置Layout

mindspore.ops.Tanh

不支持配置Layout

mindspore.ops.Tile

仅支持对multiples配置切分策略

不支持配置Layout

mindspore.ops.TopK

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

不支持配置Layout

mindspore.ops.Transpose

不支持配置Layout

mindspore.ops.TruncateDiv

支持配置Layout,并且device matrix和tensor map的transpose都是被允许的

mindspore.ops.TruncateMod

不支持配置Layout

mindspore.ops.Unique

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

不支持配置Layout

mindspore.ops.UnsortedSegmentSum

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

不支持配置Layout

mindspore.ops.UnsortedSegmentMin

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

不支持配置Layout

mindspore.ops.UnsortedSegmentMax

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

不支持配置Layout

mindspore.ops.Xdivy

不支持配置Layout

mindspore.ops.Xlogy

不支持配置Layout

mindspore.ops.ZerosLike

不支持配置Layout

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