算子级并行使用约束

查看源文件

操作名

约束

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. alpha和beta对应的策略必须为全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

不支持对x和input_v的第一维切分

不支持配置Layout

mindspore.ops.InplaceSub

同InplaceAdd

不支持配置Layout

mindspore.ops.InplaceUpdate

同InplaceAdd

不支持配置Layout

mindspore.ops.Inv

无

不支持配置Layout

mindspore.ops.IOU

支持对anchor_boxes和gt_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:],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

不需要为start和end配置策略,只需要传入一个长度为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,并且device matrix和tensor map的transpose都是被允许的

mindspore.ops.TruncateDiv

无

不支持配置Layout

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份。这种情况下会发生重复计算。