# Release Notes ## MindSpore 2.0.0 Release Notes ### 主要特性和增强 #### PyNative - [Stable] 全面支持动态shape,算子支持度详见[nn接口动态shape支持情况](https://www.mindspore.cn/docs/zh-CN/r2.0/note/dynamic_shape_nn.html)、[functional接口动态shape支持情况](https://www.mindspore.cn/docs/zh-CN/r2.0/note/dynamic_shape_func.html)和[算子动态shape支持情况](https://www.mindspore.cn/docs/zh-CN/r2.0/note/dynamic_shape_primitive.html)。 #### AutoParallel - [STABLE] 新建MindFormers独立仓,提供分布式并行套件功能,替代mindspore.nn.transformer模块。 - [DEMO] 分布式Gather算子支持BatchDim属性。 - [DEMO] 流水线并行支持指定输入数据任意维度作为Batch维。 ### API变更 #### 算子 - `mindspore.ops.AdaptiveAvgPool2D` 新增算子原语。 - `mindspore.ops.BatchToSpaceNDV2` 新增算子原语。 - `mindspore.ops.CeLU` 新增算子原语。 - `mindspore.ops.ExtractVolumePatches` 新增算子原语。 - `mindspore.ops.FFTWithSize` 新增算子原语。 - `mindspore.ops.FillDiagonal` 新增算子原语。 - `mindspore.ops.FractionalMaxPool3DWithFixedKsize` 新增算子原语。 - `mindspore.ops.Im2Col` 新增算子原语。 - `mindspore.ops.MaskedScatter` 新增算子原语。 - `mindspore.ops.MatrixBandPart` 新增算子原语。 - `mindspore.ops.MatrixInverse` 新增算子原语。 - `mindspore.ops.MaxPoolWithArgmaxV2` 新增算子原语。 - `mindspore.ops.Ormqr` 新增算子原语。 - `mindspore.ops.RandpermV2` 新增算子原语。 - `mindspore.ops.ResizeBicubic` 新增算子原语。 - `mindspore.ops.Triu` 新增算子原语。 - `mindspore.ops.Zeta` 新增算子原语。 #### 非兼容性接口变更 - 接口名称:mindspore.ops.MultitypeFuncGraph 变更内容:该接口参数doc_url在MindSpore 2.0.0.rc1版本作为测试特性,MindSpore 2.0.0版本优化后用户不需要额外配置此参数,故此参数在MindSpore 2.0.0版本删除。
原接口 | v2.0.0 接口 |
mindspore.ops.MultitypeFuncGraph(name, read_value=False, doc_url="") |
mindspore.ops.MultitypeFuncGraph(name, read_value=False) |
原接口 | v2.0.0-rc1接口 |
mindspore.set_context(mode=GRAPH_MODE) |
mindspore.set_context(mode=PYNATIVE_MODE) |
原接口 | v2.0.0-rc1接口 |
Model.train(dataset_sink_mode=True) |
Model.train(dataset_sink_mode=False) |
原接口 | v2.0.0-rc1接口 |
mindspore.export(net, *inputs, file_name, file_format="AIR", **kwargs) |
mindspore.export(net, *inputs, file_name, file_format, **kwargs) |
原接口 | v2.0.0-rc1接口 |
ops.norm(input_x, axis, p=2, keep_dims=False, epsilon=1e-12) >>> # 举例: >>> input = Tensor(np.array([[[1.0, 2.0], [3.0, 4.0]], ... [[5.0, 6.0], [7.0, 8.0]]]).astype(np.float32)) >>> output = ops.norm(input, [0, 1], p=2) |
ops.norm(A, ord=None, dim=None, keepdim=False, *, dtype=None) >>> # 举例: >>> input = Tensor(np.array([[[1.0, 2.0], [3.0, 4.0]], ... [[5.0, 6.0], [7.0, 8.0]]]).astype(np.float32)) >>> output = ops.norm(input, ord=2, dim=(0, 1)) |
原接口 | v2.0.0-rc1接口 |
Tensor.norm(axis, p=2, keep_dims=False, epsilon=1e-12) |
Tensor.norm(ord=None, dim=None, keepdim=False, *, dtype=None) |
原接口 | v2.0.0-rc1接口 |
ops.dropout(x, p=0.5, seed0=0, seed1=0) >>> # 举例: >>> input = Tensor(((20, 16), (50, 50)), ... mindspore.float32) >>> output, mask = dropout(x, p=0.5) |
ops.dropout(input, p=0.5, training=True, seed=None) >>> # 举例: >>> input = Tensor(((20, 16), (50, 50)), ... mindspore.float32) >>> output = ops.dropout(input, p=0.5,training=True) |
原接口 | v2.0.0-rc1接口 |
ops.dropout2d(x, p=0.5) >>> # 举例: >>> input = Tensor(np.ones([2, 1, 2, 3]), ... mindspore.float32) >>> output, mask = dropout2d(input, 0.5) |
ops.dropout2d(input, p=0.5, training=True) >>> # 举例: >>> input = Tensor(np.ones([2, 1, 2, 3]), ... mindspore.float32) >>> output = ops.dropout2d(input, 0.5, training=True) |
原接口 | v2.0.0-rc1接口 |
ops.dropout3d(x, p=0.5) >>> # 举例: >>> input = Tensor(np.ones([2, 1, 2, 3]), ... mindspore.float32) >>> output, mask = dropout3d(input, 0.5) |
ops.dropout3d(input, p=0.5, training=True) >>> # 举例: >>> input = Tensor(np.ones([2, 1, 2, 3]), ... mindspore.float32) >>> output = ops.dropout3d(input, 0.5, training=True) |
原接口 | v2.0.0-rc1接口 |
ops.std(input_x, axis=(), unbiased=True, keep_dims=False) |
ops.std(input, axis=None, ddof=0, keepdims=False) |
原接口 | v2.0.0-rc1接口 |
net_param = load_param_into_net() |
net_param, ckpt_param = load_param_into_net() |
原接口 | v2.0.0-rc1接口 |
BCELoss(weight=None, reduction='none') >>> # 举例: >>> weight = Tensor(np.array([[1.0, 2.0, 3.0], ... [4.0, 3.3, 2.2]]), ... mindspore.float32) >>> loss = nn.BCELoss(weight=weight, reduction='mean') >>> logits = Tensor(np.array([[0.1, 0.2, 0.3], ... [0.5, 0.7, 0.9]]), ... mindspore.float32) >>> labels = Tensor(np.array([[0, 1, 0], [0, 0, 1]]), ... mindspore.float32) >>> output = loss(logits, labels) >>> print(output) >>> 1.8952923 |
BCELoss(weight=None, reduction='mean') >>> # 举例: >>> weight = Tensor(np.array([[1.0, 2.0, 3.0], ... [4.0, 3.3, 2.2]]), ... mindspore.float32) >>> loss = nn.BCELoss(weight=weight) >>> logits = Tensor(np.array([[0.1, 0.2, 0.3], ... [0.5, 0.7, 0.9]]), ... mindspore.float32) >>> labels = Tensor(np.array([[0, 1, 0], [0, 0, 1]]), ... mindspore.float32) >>> output = loss(logits, labels) >>> print(output) >>> 1.8952923 |
原接口 | v2.0.0-rc1接口 |
ops.split(input_x, axis=0, output_num=1) >>> # 举例: >>> input = Tensor(np.array([[1, 1, 1, 1], [2, 2, 2, 2]]), ... mindspore.int32) >>> output = ops.split(input, axis=1, output_num=4) |
ops.split(tensor, split_size_or_sections, axis=0) >>> # 举例: >>> input = Tensor(np.array([[1, 1, 1, 1], [2, 2, 2, 2]]), ... mindspore.int32) >>> output = ops.split(input, split_size_or_sections=1, axis=1) |
原接口 | v2.0.0-rc1接口 |
Tensor.split(axis=0, output_num=1) |
Tensor.split(split_size_or_sections, axis=0) |
原接口 | v2.0.0-rc1接口 |
ops.pad(input_x, paddings) >>> # 举例: >>> input_x = Tensor(np.array([[-0.1, 0.3, 3.6], ... [0.4, 0.5, -3.2]]), ... mindspore.float32) >>> paddings = ((1, 2), (2, 1)) >>> output = ops.pad(input_x, paddings) |
ops.pad(input_x, padding, mode='constant', value=None) >>> # 举例: >>> input_x = Tensor(np.array([[-0.1, 0.3, 3.6], ... [0.4, 0.5, -3.2]]), ... mindspore.float32) >>> paddings = (2, 1, 1, 2) >>> output = ops.pad(input_x, paddings) |
原接口 | v2.0.0-rc1接口 |
ops.meshgrid(inputs, indexing='xy') >>> # 举例: >>> x = Tensor(np.array([1, 2, 3, 4]).astype(np.int32)) >>> y = Tensor(np.array([5, 6, 7]).astype(np.int32)) >>> z = Tensor(np.array([8, 9, 0, 1, 2]).astype(np.int32)) >>> output = ops.meshgrid((x, y, z), indexing='xy') |
ops.meshgrid(*inputs, indexing='xy') >>> # 举例: >>> x = Tensor(np.array([1, 2, 3, 4]).astype(np.int32)) >>> y = Tensor(np.array([5, 6, 7]).astype(np.int32)) >>> z = Tensor(np.array([8, 9, 0, 1, 2]).astype(np.int32)) >>> output = ops.meshgrid(x, y, z, indexing='xy') |
原接口 | v2.0.0-rc1接口 |
ops.max(x, axis=0, keep_dims=False) >>> # 举例: >>> input = Tensor(np.array([0.0, 0.4, 0.6, 0.7, 0.1]), ... mindspore.float32) >>> index, output = ops.max(input) >>> print(index, output) >>> 3 0.7 |
ops.max(input, axis=None, keepdims=False, *, initial=None, where=True, return_indices=False) >>> # 举例: >>> input = Tensor(np.array([0.0, 0.4, 0.6, 0.7, 0.1]), ... mindspore.float32) >>> output, index = ops.max(input, axis=0) >>> print(output, index) |
原接口 | v2.0.0-rc1接口 |
ops.min(x, axis=0, keep_dims=False) >>> # 举例: >>> input = Tensor(np.array([0.0, 0.4, 0.6, 0.7, 0.1]), ... mindspore.float32) >>> index, output = ops.min(input) >>> 0 0.0 |
ops.min(input, axis=None, keepdims=False, *, initial=None, where=True, return_indices=False) >>> # 举例: >>> input = Tensor(np.array([0.0, 0.4, 0.6, 0.7, 0.1]), ... mindspore.float32) >>> output, index = ops.min(input, keepdims=True) >>> 0.0 0 |
原接口 | v2.0.0-rc1接口 |
ops.random_gamma(shape, alpha, seed=0, seed2=0) |
ops.random_gamma(shape, alpha, seed=None) |
原接口 | v2.0.0-rc1接口 |
ops.standard_laplace(shape, seed=0, seed2=0) |
ops.standard_laplace(shape, seed=None) |
原接口 | v2.0.0-rc1接口 |
ops.standard_normal(shape, seed=0, seed2=0) |
ops.standard_normal(shape, seed=None) |
原接口 | v2.0.0-rc1接口 |
ops.bernoulli(x, p=0.5, seed=-1) |
ops.bernoulli(input, p=0.5, seed=None) |
原接口 | v2.0.0-rc1接口 |
mindspore.data_sink(fn, dataset, steps, sink_size=1, jit=False) |
mindspore.data_sink(fn, dataset, sink_size=1, jit_config=None, input_signature=None) |
原接口 | v2.0.0-rc1接口 |
conv2d(inputs, weight, pad_mode="valid", padding=0, stride=1, dilation=1, group=1) |
conv2d(input, weight, bias=None, stride=1, pad_mode="valid", padding=0, dilation=1, groups=1) |
原接口 | v2.0.0-rc1接口 |
mindspore.dataset.vision.Pad(padding=(1,2)) 代表图片的左/上填充 1像素,右/下填充 2像素 |
mindspore.dataset.vision.Pad(padding=(1,2,1,2)) 代表图片的左/上填充 1像素,右/下填充 2像素 |
原接口 | v2.0.0-rc1接口 |
>>> dataset = dataset.map(operations=[transforms], ... input_columns=["column_a"], ... output_columns=["column_b", "column_c"], ... column_order=["column_c", "column_b"]) |
>>> dataset = dataset.map(operations=[transforms], ... input_columns=["column_a"], ... output_columns=["column_b", "column_c"]) >>> dataset = dataset.project(["column_c", column_b"])") |
原接口 | v2.0.0-rc1接口 |
>>> dataset = dataset.batch(batch_size=4, ... input_columns=["column_a"], ... output_columns=["column_b", "column_c"], ... column_order=["column_c", "column_b"]) |
>>> dataset = dataset.batch(batch_size=4, input_columns=["column_a"] ... output_columns=["column_b", "column_c"]) >>> dataset = dataset.project(["column_c", column_b"])") |
原接口 | v2.0.0-rc1接口 |
>>> dataset = dataset.batch(batch_size=4, ... drop_remainder=True, pad_info=...) |
>>> dataset = dataset.padded_batch(batch_size=4, ... drop_remainder=True, pad_info=...) |