diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5981374dc60..cbe548af006 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,2 @@ # Paddle API Docs -docs/api/paddle @jzhang533 @sunzhongkai588 @mattheliu @Echo-Nie +docs/api/paddle @jzhang533 @sunzhongkai588 @mattheliu @Echo-Nie @zhwesky2010 diff --git a/docs/api/paddle/Overview_cn.rst b/docs/api/paddle/Overview_cn.rst index 5a28ebe994a..8fe8d97d9dc 100755 --- a/docs/api/paddle/Overview_cn.rst +++ b/docs/api/paddle/Overview_cn.rst @@ -517,6 +517,7 @@ tensor 元素操作相关(如:转置,reshape 等) " :ref:`paddle.crop ` ", "根据偏移量(offsets)和形状(shape),裁剪输入(x)Tensor" " :ref:`paddle.expand ` ", "根据 shape 指定的形状扩展 x ,扩展后, x 的形状和 shape 指定的形状一致" " :ref:`paddle.expand_as ` ", "根据 y 的形状扩展 x ,扩展后, x 的形状和 y 的形状相同" + " :ref:`paddle.expand_copy ` ", "根据 shape 指定的形状扩展 x ,扩展后返回一个新的 Tensor" " :ref:`paddle.flatten ` ", "根据给定的 start_axis 和 stop_axis 将连续的维度展平" " :ref:`paddle.flip ` ", "沿指定轴反转 n 维 tensor" " :ref:`paddle.ravel ` ", "返回一个连续的展平的 tensor" diff --git a/docs/api/paddle/bernoulli__cn.rst b/docs/api/paddle/bernoulli__cn.rst index 99370f9f26b..550b32b0113 100644 --- a/docs/api/paddle/bernoulli__cn.rst +++ b/docs/api/paddle/bernoulli__cn.rst @@ -10,3 +10,7 @@ Inplace 版本的 :ref:`cn_api_paddle_bernoulli` API,对输入 x 采用 Inplac 更多关于 inplace 操作的介绍请参考 `3.1.3 原位(Inplace)操作和非原位操作的区别`_ 了解详情。 .. _3.1.3 原位(Inplace)操作和非原位操作的区别: https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/beginner/tensor_cn.html#id3 + +.. note:: + + 参数名 ``input`` 可替代 ``x``,如 ``bernoulli_(input=tensor_x)`` 等价于 ``bernoulli_(x=tensor_x)``。 diff --git a/docs/api/paddle/clip_cn.rst b/docs/api/paddle/clip_cn.rst index 31dc1a55b20..117c31c126f 100644 --- a/docs/api/paddle/clip_cn.rst +++ b/docs/api/paddle/clip_cn.rst @@ -16,6 +16,8 @@ clip .. note:: 别名支持: 参数名 ``input`` 可替代 ``x``,如 ``clip(input=tensor_x, min=0.3, max=0.7)`` 等价于 ``clip(x=tensor_x, min=0.3, max=0.7)``。 + 相关 API: 按最小值裁剪可使用 :ref:`cn_api_paddle_clamp_min`,按最大值裁剪可使用 :ref:`cn_api_paddle_clamp_max`。 + 参数 :::::::::::: diff --git a/docs/api/paddle/compat/Overview_cn.rst b/docs/api/paddle/compat/Overview_cn.rst index b084c0395b1..7c464c02c7b 100644 --- a/docs/api/paddle/compat/Overview_cn.rst +++ b/docs/api/paddle/compat/Overview_cn.rst @@ -29,11 +29,12 @@ PyTorch 兼容的 nn 模块 :::::::::::::::::::::::::::::: .. csv-table:: - :header: "类名称", "类功能" + :header: "函数/类名称", "函数/类功能" :widths: 10, 30 " :ref:`Linear ` ", "PyTorch 对齐的 ``paddle.nn.Linear`` 兼容版本" " :ref:`Unfold ` ", "允许 Tensor 输入的 ``paddle.nn.Unfold`` 兼容版本" + " :ref:`_pair ` ", "将输入转换为包含 2 个元素的元组" .. _about_compat_nn_functional: diff --git a/docs/api/paddle/cross_cn.rst b/docs/api/paddle/cross_cn.rst index 0356d90752c..de5374873ad 100644 --- a/docs/api/paddle/cross_cn.rst +++ b/docs/api/paddle/cross_cn.rst @@ -3,7 +3,7 @@ cross ------------------------------- -.. py:function:: paddle.cross(x, y, axis=9, name=None) +.. py:function:: paddle.cross(x, y, axis=9, name=None, *, out=None) 计算 Tensor ``x`` 和 ``y`` 在 ``axis`` 维度上的向量积(叉积)。 @@ -17,6 +17,10 @@ cross - **axis** (int,可选) - 沿着此维进行向量积操作。别名 ``dim``。默认值是 9,意思是选取第一个长度为 3 的 ``axis`` 。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 +关键字参数 +::::::::: + - **out** (Tensor,可选) - 输出 Tensor,若不为 ``None``,计算结果将保存在该 Tensor 中,默认值为 ``None``。 + 返回 ::::::::: 计算后的 Tensor,数据类型与输入 ``x`` 相同。 diff --git a/docs/api/paddle/device/Overview_cn.rst b/docs/api/paddle/device/Overview_cn.rst index afd8cb102a5..2a24b563df9 100644 --- a/docs/api/paddle/device/Overview_cn.rst +++ b/docs/api/paddle/device/Overview_cn.rst @@ -42,6 +42,7 @@ paddle.device 目录下包含 cuda 目录和 xpu 目录, cuda 目录中存放 " :ref:`reset_max_memory_reserved ` ", "重置给定设备上由内存分配器管理的内存峰值统计" " :ref:`reset_peak_memory_stats ` ", "重置峰值内存统计" " :ref:`set_device ` ", "指定 OP 运行的全局设备" + " :ref:`set_default_device ` ", "设置默认设备" " :ref:`get_device ` ", "获得 OP 运行的全局设备" " :ref:`is_available ` ", "检查设备是否可用" " :ref:`get_rng_state ` ", "获取随机数生成器状态" diff --git a/docs/api/paddle/hstack_cn.rst b/docs/api/paddle/hstack_cn.rst index e6a3b03e539..ab962836851 100644 --- a/docs/api/paddle/hstack_cn.rst +++ b/docs/api/paddle/hstack_cn.rst @@ -3,16 +3,20 @@ hstack ------------------------------- -.. py:function:: paddle.hstack(x, name=None) +.. py:function:: paddle.hstack(x, name=None, *, out=None) 沿水平轴堆叠输入 ``x`` 中的所有张量。所有张量必须具有相同的数据类型。 参数 :::::::::::: - - **x** (list[Tensor]|tuple[Tensor]) - 输入 ``x`` 可以是张量的 list 或 tuple, ``x`` 中张量的数据类型必须相同。支持的数据类型: ``float16`` 、 ``float32`` 、 ``float64`` 、 ``int32`` 、 ``int64`` 或 ``bfloat16`` 。 + - **x** (list[Tensor]|tuple[Tensor]) - 输入 ``x`` 可以是张量的 list 或 tuple, ``x`` 中张量的数据类型必须相同。支持的数据类型: ``float16`` 、 ``float32`` 、 ``float64`` 、 ``int32`` 、 ``int64`` 或 ``bfloat16`` 。别名 ``tensors``。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 +关键字参数 +:::::::::::: + - **out** (Tensor,可选) - 输出 Tensor,若不为 ``None``,计算结果将保存在该 Tensor 中,默认值为 ``None``。 + 返回 :::::::::::: Tensor,与输入数据类型相同的堆叠张量。 diff --git a/docs/api/paddle/imag_cn.rst b/docs/api/paddle/imag_cn.rst index d7872722371..5f15f51a4b5 100644 --- a/docs/api/paddle/imag_cn.rst +++ b/docs/api/paddle/imag_cn.rst @@ -10,7 +10,7 @@ imag 参数 :::::::::::: - - **x** (Tensor) - 输入的 Tensor,其数据类型可以为 complex64 或 complex128。 + - **x** (Tensor) - 输入的 Tensor,其数据类型可以为 complex64 或 complex128。别名 ``input``。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 返回 diff --git a/docs/api/paddle/linalg/cholesky_cn.rst b/docs/api/paddle/linalg/cholesky_cn.rst index 454b79136d3..6c937b43dbb 100644 --- a/docs/api/paddle/linalg/cholesky_cn.rst +++ b/docs/api/paddle/linalg/cholesky_cn.rst @@ -3,7 +3,7 @@ cholesky ------------------------------- -.. py:function:: paddle.linalg.cholesky(x, upper=False, name=None) +.. py:function:: paddle.linalg.cholesky(x, upper=False, name=None, *, out=None) @@ -15,10 +15,15 @@ cholesky 参数 :::::::::::: - - **x** (Tensor)- 输入变量为多维 Tensor,它的维度应该为 ``[*, M, M]``,其中*为零或更大的批次尺寸,并且最里面的两个维度上的矩阵都应为对称的正定矩阵,支持数据类型为 float32、float64。 + - **x** (Tensor)- 输入变量为多维 Tensor,它的维度应该为 ``[*, M, M]``,其中*为零或更大的批次尺寸,并且最里面的两个维度上的矩阵都应为对称的正定矩阵,支持数据类型为 float32、float64。别名 ``input``。 - **upper** (bool)- 指示是否返回上三角矩阵或下三角矩阵。默认值:False。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 +关键字参数 +:::::::::::: + + - **out** (Tensor,可选) - 输出 Tensor,若不为 ``None``,计算结果将保存在该 Tensor 中,默认值为 ``None``。 + 返回 :::::::::::: Tensor,与 ``x`` 具有相同形状和数据类型。它代表了 Cholesky 分解生成的三角矩阵。 diff --git a/docs/api/paddle/linalg/det_cn.rst b/docs/api/paddle/linalg/det_cn.rst index 1a7597e1c1a..33593575951 100644 --- a/docs/api/paddle/linalg/det_cn.rst +++ b/docs/api/paddle/linalg/det_cn.rst @@ -3,13 +3,20 @@ det ------------------------------- -.. py:function:: paddle.linalg.det(x) +.. py:function:: paddle.linalg.det(x, name=None, *, out=None) + 计算批量矩阵的行列式值。 参数 :::::::::::: - - **x** (Tensor):输入一个或批量矩阵。``x`` 的形状应为 ``[*, M, M]``,其中 ``*`` 为零或更大的批次维度,数据类型支持 float32、float64。 + - **x** (Tensor):输入一个或批量矩阵。``x`` 的形状应为 ``[*, M, M]``,其中 ``*`` 为零或更大的批次维度,数据类型支持 float32、float64。别名 ``input``。 + - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 + +关键字参数 +:::::::::::: + + - **out** (Tensor,可选) - 输出 Tensor,若不为 ``None``,计算结果将保存在该 Tensor 中,默认值为 ``None``。 返回 :::::::::::: diff --git a/docs/api/paddle/linalg/eigh_cn.rst b/docs/api/paddle/linalg/eigh_cn.rst index 1b21026bc43..a97c5931240 100644 --- a/docs/api/paddle/linalg/eigh_cn.rst +++ b/docs/api/paddle/linalg/eigh_cn.rst @@ -3,16 +3,20 @@ eigh ------------------------------- -.. py:function:: paddle.linalg.eigh(x, UPLO='L', name=None) +.. py:function:: paddle.linalg.eigh(x, UPLO='L', name=None, *, out=None) 计算厄米特矩阵或者实数对称矩阵的特征值和特征向量。 参数 :::::::::::: - - **x** (Tensor):输入一个或一批厄米特矩阵或者实数对称矩阵。``x`` 的形状应为 ``[*, M, M]``,其中 ``*`` 为零或更大的批次维度,数据类型支持 float32、float64、complex64、complex128。 + - **x** (Tensor):输入一个或一批厄米特矩阵或者实数对称矩阵。``x`` 的形状应为 ``[*, M, M]``,其中 ``*`` 为零或更大的批次维度,数据类型支持 float32、float64、complex64、complex128。别名 ``input``。 - **UPLO** (str,可选):表示计算上三角或者下三角矩阵,默认值为 'L',表示计算下三角矩阵的特征值和特征向量,'U'表示计算上三角矩阵的特征值和特征向量。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 +关键字参数 +:::::::::::: + - **out** (Tensor|tuple,可选) - 输出 Tensor,若不为 ``None``,计算结果将保存在该 Tensor 中,默认值为 ``None``。 + 返回 :::::::::::: diff --git a/docs/api/paddle/linalg/inv_cn.rst b/docs/api/paddle/linalg/inv_cn.rst index 964e2ef5045..020db048ce6 100644 --- a/docs/api/paddle/linalg/inv_cn.rst +++ b/docs/api/paddle/linalg/inv_cn.rst @@ -10,7 +10,7 @@ inv 参数 ::::::::: - - **x** (Tensor) – 输入 Tensor,最后两维的大小必须相等。如果输入 Tensor 的维数大于 2,则被视为 2-D 矩阵的批次(batch)。支持的数据类型:float32,float64。 + - **x** (Tensor) – 输入 Tensor,最后两维的大小必须相等。如果输入 Tensor 的维数大于 2,则被视为 2-D 矩阵的批次(batch)。支持的数据类型:float32,float64。别名 ``input``。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 返回 diff --git a/docs/api/paddle/linalg/pinv_cn.rst b/docs/api/paddle/linalg/pinv_cn.rst index a4d3ea4eda9..03939d08c2b 100644 --- a/docs/api/paddle/linalg/pinv_cn.rst +++ b/docs/api/paddle/linalg/pinv_cn.rst @@ -12,7 +12,7 @@ pinv 参数 ::::::::: - - **x** (Tensor):输入变量,类型为 Tensor,数据类型为 float32、float64、complex64、complex12,形状为(M, N)或(B, M, N)。 + - **x** (Tensor):输入变量,类型为 Tensor,数据类型为 float32、float64、complex64、complex12,形状为(M, N)或(B, M, N)。别名 ``input``。 - **rcond** (float64,可选):奇异值(特征值)被截断的阈值,奇异值(特征值)小于 rcond * 最大奇异值时会被置为 0,默认值为 1e-15。 - **hermitian** (bool,可选):是否为 ``hermitian`` 矩阵或者实对称矩阵,默认值为 False。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 diff --git a/docs/api/paddle/linalg/qr_cn.rst b/docs/api/paddle/linalg/qr_cn.rst index 3aab06aad47..dfcb5055c77 100644 --- a/docs/api/paddle/linalg/qr_cn.rst +++ b/docs/api/paddle/linalg/qr_cn.rst @@ -3,7 +3,7 @@ qr ------------------------------- -.. py:function:: paddle.linalg.qr(x, mode="reduced", name=None) +.. py:function:: paddle.linalg.qr(x, mode="reduced", name=None, *, some=None, out=None) 计算一个或一批矩阵的正交三角分解,也称 QR 分解(暂不支持反向)。 @@ -23,6 +23,11 @@ qr - **mode** (str,可选):控制正交三角分解的行为,默认是 ``reduced``,假设 ``x`` 形状应为 ``[*, M, N]`` 和 ``K = min(M, N)``:如果 ``mode = "reduced"``,则 :math:`Q` 形状为 ``[*, M, K]`` 和 :math:`R` 形状为 ``[*, K, N]``;如果 ``mode = "complete"``,则 :math:`Q` 形状为 ``[*, M, M]`` 和 :math:`R` 形状为 ``[*, M, N]``;如果 ``mode = "r"``,则不返回 :math:`Q`,只返回 :math:`R` 且形状为 ``[*, K, N]`` 。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 +关键字参数 +:::::::::::: + - **some** (bool,可选) - 控制正交三角分解的行为。当 ``some=True`` 时等价于 ``mode="reduced"``,当 ``some=False`` 时等价于 ``mode="complete"``。默认值为 None,此时使用 ``mode`` 参数控制行为。 + - **out** (tuple[Tensor, Tensor],可选) - 指定输出的 Q 和 R 矩阵的元组。如果提供了 ``out``,结果将写入该元组中。当 ``mode="r"`` 时不可用。默认值为 None。 + 返回 :::::::::::: diff --git a/docs/api/paddle/logical_and__cn.rst b/docs/api/paddle/logical_and__cn.rst index 6f37de9b9b2..107bac1a1c2 100644 --- a/docs/api/paddle/logical_and__cn.rst +++ b/docs/api/paddle/logical_and__cn.rst @@ -9,3 +9,7 @@ Inplace 版本的 :ref:`cn_api_paddle_logical_and` API,对输入 x 采用 Inpl 更多关于 inplace 操作的介绍请参考 `3.1.3 原位(Inplace)操作和非原位操作的区别`_ 了解详情。 .. _3.1.3 原位(Inplace)操作和非原位操作的区别: https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/beginner/tensor_cn.html#id3 + +.. note:: + + 别名支持:参数名 ``other`` 可替代 ``y``,如 ``logical_and_(other=tensor_y)`` 等价于 ``logical_and_(y=tensor_y)``。 diff --git a/docs/api/paddle/nn/ELU_cn.rst b/docs/api/paddle/nn/ELU_cn.rst index 1c08ca8aa27..42bf5afc947 100644 --- a/docs/api/paddle/nn/ELU_cn.rst +++ b/docs/api/paddle/nn/ELU_cn.rst @@ -2,7 +2,7 @@ ELU ------------------------------- -.. py:class:: paddle.nn.ELU(alpha=1.0, name=None) +.. py:class:: paddle.nn.ELU(alpha=1.0, inplace=False, name=None) ELU 激活层(ELU Activation Operator) @@ -23,6 +23,7 @@ ELU 激活层(ELU Activation Operator) 参数 :::::::::: - **alpha** (float,可选) - ELU 的 alpha 值,默认值为 1.0。 + - **inplace** (bool,可选) - 是否使用 inplace 操作,默认值为 False。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 形状 diff --git a/docs/api/paddle/nn/Flatten_cn.rst b/docs/api/paddle/nn/Flatten_cn.rst index af961c40c65..c591ef7059c 100644 --- a/docs/api/paddle/nn/Flatten_cn.rst +++ b/docs/api/paddle/nn/Flatten_cn.rst @@ -13,8 +13,8 @@ Flatten 参数 :::::::::::: - - **start_axis** (int,可选) - 展开的起始维度,默认值为 1。 - - **stop_axis** (int,可选) - 展开的结束维度,默认值为-1。 + - **start_axis** (int,可选) - 展开的起始维度,默认值为 1。别名 ``start_dim``。 + - **stop_axis** (int,可选) - 展开的结束维度,默认值为-1。别名 ``end_dim``。 返回 :::::::::::: diff --git a/docs/api/paddle/nn/InstanceNorm3D_cn.rst b/docs/api/paddle/nn/InstanceNorm3D_cn.rst index ef6331707cc..5c6c0cf3502 100644 --- a/docs/api/paddle/nn/InstanceNorm3D_cn.rst +++ b/docs/api/paddle/nn/InstanceNorm3D_cn.rst @@ -7,6 +7,9 @@ InstanceNorm3D 构建 ``InstanceNorm3D`` 类的一个可调用对象,具体用法参照 ``代码示例``。可以处理 5D 的 Tensor,实现了实例归一化层(Instance Normalization Layer)的功能。更多详情请参考:Instance Normalization: The Missing Ingredient for Fast Stylization 。 +.. note:: + ``InstanceNorm3d`` 可作为 ``InstanceNorm3D`` 的别名使用。 + 数据布局:NCDHW [batch, in_channels, D, in_height, in_width] ``input`` 是 mini-batch 的输入。 diff --git a/docs/api/paddle/nn/Layer_cn.rst b/docs/api/paddle/nn/Layer_cn.rst index 155ad744084..61f2c7b22c2 100644 --- a/docs/api/paddle/nn/Layer_cn.rst +++ b/docs/api/paddle/nn/Layer_cn.rst @@ -526,3 +526,20 @@ bfloat16(excluded_layers=None) **代码示例** COPY-FROM: paddle.nn.Layer.bfloat16 + +to_empty(*, device=None, recurse=True) +''''''''' + +将 parameters 和 buffers 按照指定的 device 重新分配为空 Tensor,不保留原值。 + +**参数** + + - **device** (PlaceLike|None,可选) - 指定的设备位置。默认为 None(不改变设备)。 + - **recurse** (bool,可选) - 是否递归应用到子层。默认值:True。 + +**返回** +Layer (返回网络层), self (返回自身) + +**代码示例** + +COPY-FROM: paddle.nn.Layer.to_empty diff --git a/docs/api/paddle/nn/LogSoftmax_cn.rst b/docs/api/paddle/nn/LogSoftmax_cn.rst index d8780786f78..f70cf3529b8 100644 --- a/docs/api/paddle/nn/LogSoftmax_cn.rst +++ b/docs/api/paddle/nn/LogSoftmax_cn.rst @@ -15,7 +15,7 @@ LogSoftmax 激活层,计算公式如下: 参数 ::::::::: - - **axis** (int,可选) - 指定对输入 Tensor 进行运算的轴。``axis`` 的有效范围是[-D, D),D 是输入 Tensor 的维度,``axis`` 为负值时与 :math:`axis + D` 等价。默认值为-1。 + - **axis** (int,可选) - 指定对输入 Tensor 进行运算的轴。``axis`` 的有效范围是[-D, D),D 是输入 Tensor 的维度,``axis`` 为负值时与 :math:`axis + D` 等价。默认值为-1。别名 ``dim``。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 形状 diff --git a/docs/api/paddle/nn/Overview_cn.rst b/docs/api/paddle/nn/Overview_cn.rst index 0a8b3ece03a..ece3000b583 100644 --- a/docs/api/paddle/nn/Overview_cn.rst +++ b/docs/api/paddle/nn/Overview_cn.rst @@ -449,6 +449,8 @@ Normalization 方法 " :ref:`paddle.nn.functional.weight_norm ` ", "对传入的 layer 中的权重参数进行归一化" " :ref:`paddle.nn.functional.spectral_norm ` ", "对传入的 layer 中的权重参数进行谱归一化" " :ref:`paddle.nn.functional.group_norm ` ", "Group Normalization 函数" + " :ref:`paddle.nn.functional.instance_norm ` ", "Instance Normalization 函数" + " :ref:`paddle.nn.functional.rms_norm ` ", "RMS Normalization 函数" .. _linear_functional: diff --git a/docs/api/paddle/nn/functional/batch_norm_cn.rst b/docs/api/paddle/nn/functional/batch_norm_cn.rst index 1b3f7bea238..08020971efd 100644 --- a/docs/api/paddle/nn/functional/batch_norm_cn.rst +++ b/docs/api/paddle/nn/functional/batch_norm_cn.rst @@ -9,17 +9,22 @@ batch_norm 详情见 :ref:`cn_api_paddle_nn_BatchNorm1D` 。 +.. note:: + 此 API 有两种调用方式: + 1. ``paddle.nn.functional.batch_norm(x, running_mean, running_var, weight=None, bias=None, training=False, momentum=0.9, epsilon=1e-05, data_format='NCHW', use_global_stats=None, name=None)`` (Paddle 风格) + 2. ``paddle.nn.functional.batch_norm(input, running_mean, running_var, weight=None, bias=None, training=False, momentum=0.1, eps=1e-05)`` (PyTorch 风格) + 参数 :::::::::::: - - **x** (int) - 输入,数据类型为 float32, float64。 + - **x** (Tensor) - 输入,数据类型为 float32, float64。别名 ``input``。 - **running_mean** (Tensor) - 均值的 Tensor。 - **running_var** (Tensor) - 方差的 Tensor。 - **weight** (Tensor,可选) - 权重的 Tensor,默认为 None。 - **bias** (Tensor,可选) - 偏置的 Tensor,默认为 None。 - **training** (bool,可选) – 当该值为 True 时,表示为训练模式(train mode),即使用批数据计算并在训练期间跟踪全局均值和方差。为 False 时,表示使用推理模式(inference mode),即使用训练期间计算出的全局均值及方差计算。默认值为 False。 - - **momentum** (float,可选) - 此值用于计算 ``moving_mean`` 和 ``moving_var``。默认值:0.9。更新公式如上所示。 - - **epsilon** (float,可选) - 为了数值稳定加在分母上的值。默认值:1e-05。 + - **momentum** (float,可选) - 此值用于计算 ``moving_mean`` 和 ``moving_var``。默认值:0.9。在 PyTorch 风格签名中,momentum 值会自动转换(momentum = 1.0 - momentum)。 + - **epsilon** (float,可选) - 为了数值稳定加在分母上的值。默认值:1e-05。别名 ``eps``。 - **data_format** (str,可选) - 指定输入数据格式。数据格式可以为 ``"NC"``、``"NCL"``、``"NCHW"`` 或者 ``"NCDHW"``,其中 N 是批大小,C 是通道数,D 是特征深度,H 是特征高度,W 是特征宽度,L 是特征长度。默认值为 ``"NCHW"``。 - **use_global_stats** (bool|None,可选) - 指示是否使用全局均值和方差。若设置为 False,则使用一个 mini-batch 的统计数据。若设置为 True 时,将使用全局统计数据。若设置为 None,则会在测试阶段使用全局统计数据,在训练阶段使用一个 mini-batch 的统计数据。默认值为 None。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 diff --git a/docs/api/paddle/nn/functional/elu_cn.rst b/docs/api/paddle/nn/functional/elu_cn.rst index 81118671f3f..44edb963bb5 100644 --- a/docs/api/paddle/nn/functional/elu_cn.rst +++ b/docs/api/paddle/nn/functional/elu_cn.rst @@ -3,7 +3,7 @@ elu ------------------------------- -.. py:function:: paddle.nn.functional.elu(x, alpha=1.0, name=None) +.. py:function:: paddle.nn.functional.elu(x, alpha=1.0, inplace=False, name=None) elu 激活层(ELU Activation Operator) @@ -23,8 +23,9 @@ elu 激活层(ELU Activation Operator) 参数 :::::::::: - - **x** (Tensor) - 输入的 ``Tensor``,数据类型为:float32、float64。 + - **x** (Tensor) - 输入的 ``Tensor``,数据类型为:float32、float64。别名 ``input``。 - **alpha** (float,可选) - elu 的 alpha 值,默认值为 1.0。 + - **inplace** (bool, 可选) - 是否使用 inplace 操作。默认值:False。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 返回 diff --git a/docs/api/paddle/nn/functional/gumbel_softmax_cn.rst b/docs/api/paddle/nn/functional/gumbel_softmax_cn.rst index e62cb84c81e..b99191bd9f5 100644 --- a/docs/api/paddle/nn/functional/gumbel_softmax_cn.rst +++ b/docs/api/paddle/nn/functional/gumbel_softmax_cn.rst @@ -27,10 +27,10 @@ gumbel_softmax 参数 :::::::::: - - **x** (Tensor) - 一个 N-D Tensor,前 N-1 维用于独立分布 batch 的索引,最后一维表示每个类别的概率,dtype 类型为 float16,float,double。 - - **temperature** (float,可选) - 大于 0 的标量。默认值:1.0。 + - **x** (Tensor) - 一个 N-D Tensor,前 N-1 维用于独立分布 batch 的索引,最后一维表示每个类别的概率,dtype 类型为 float16,float,double。别名 ``logits``。 + - **temperature** (float,可选) - 大于 0 的标量。默认值:1.0。别名 ``tau``。 - **hard** (bool,可选) - 如果是 True,返回离散的 one-hot 向量。如果是 False,返回软样本。默认值:False。 - - **axis** (int,可选) - 按照维度 axis 计算 softmax。默认值:-1。 + - **axis** (int,可选) - 按照维度 axis 计算 softmax。默认值:-1。别名 ``dim``。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 返回 diff --git a/docs/api/paddle/nn/functional/instance_norm_cn.rst b/docs/api/paddle/nn/functional/instance_norm_cn.rst index bf0c9570b2c..173d97012db 100644 --- a/docs/api/paddle/nn/functional/instance_norm_cn.rst +++ b/docs/api/paddle/nn/functional/instance_norm_cn.rst @@ -10,7 +10,7 @@ instance_norm 参数 :::::::::::: - - **x** (Tensor) - 输入,数据类型为 float32, float64。 + - **x** (Tensor) - 输入,数据类型为 float32, float64。别名 ``input``。 - **running_mean** (Tensor,可选) - 均值的 Tensor。过时(已被删除,无法使用) - **running_var** (Tensor,可选) - 方差的 Tensor。过时(已被删除,无法使用) - **weight** (Tensor,可选) - 权重的 Tensor。默认值:None. 如果 weight 为 None 则 weight 被初始化为全 1 的 Tensor. @@ -23,7 +23,7 @@ instance_norm 返回 :::::::::::: -无 + Tensor,经 instance normalization 归一化后的 Tensor。 代码示例 diff --git a/docs/api/paddle/nn/functional/kl_div_cn.rst b/docs/api/paddle/nn/functional/kl_div_cn.rst index 5ac2bc19425..e8f59fd67e7 100644 --- a/docs/api/paddle/nn/functional/kl_div_cn.rst +++ b/docs/api/paddle/nn/functional/kl_div_cn.rst @@ -33,8 +33,8 @@ kL 发散损失计算如下: 参数 ::::::::: - **input** (Tensor) - KL 散度损失算子的输入 Tensor。维度为[N, \*]的多维 Tensor,其中 N 是批大小,\*表示任何数量的附加维度,数据类型为 float32 或 float64。 - - **label** (Tensor) - KL 散度损失算子的 Tensor。与输入 ``input`` 的维度和数据类型一致的多维 Tensor。 - - **reduction** (str,可选) - 要应用于输出的 reduction 类型,可用类型为‘none’ | ‘batchmean’ | ‘mean’ | ‘sum’,‘none’表示无 reduction,‘batchmean’ 表示输出的总和除以批大小,‘mean’ 表示所有输出的平均值,‘sum’表示输出的总和。 + - **label** (Tensor) - KL 散度损失算子的 Tensor。与输入 ``input`` 的维度和数据类型一致的多维 Tensor。别名 ``target``。 + - **reduction** (str,可选) - 要应用于输出的 reduction 类型,可用类型为’none’ | ‘batchmean’ | ‘mean’ | ‘sum’,’none’表示无 reduction,’batchmean’ 表示输出的总和除以批大小,’mean’ 表示所有输出的平均值,’sum’表示输出的总和。 - **log_target** (bool,可选) - 表示输入的 ``label`` 变量是否属于 log 空间。默认值为 False,表示不属于。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 diff --git a/docs/api/paddle/nn/functional/nll_loss_cn.rst b/docs/api/paddle/nn/functional/nll_loss_cn.rst index 67c84f0d4c9..8f4f0980ab3 100644 --- a/docs/api/paddle/nn/functional/nll_loss_cn.rst +++ b/docs/api/paddle/nn/functional/nll_loss_cn.rst @@ -9,7 +9,7 @@ nll_loss 参数 ::::::::: - **input** (Tensor) - 输入 ``Tensor``,其形状为 :math:`[N, C]`,其中 ``C`` 为类别数。但是对于多维度的情形下,它的形状为 :math:`[N, C, d_1, d_2, ..., d_K]`。数据类型为 float32 或 float64。 - - **label** (Tensor) - 输入 x 对应的标签值。其形状为 :math:`[N,]` 或者 :math:`[N, d_1, d_2, ..., d_K]`,数据类型为 int64。 + - **label** (Tensor) - 输入 x 对应的标签值。其形状为 :math:`[N,]` 或者 :math:`[N, d_1, d_2, ..., d_K]`,数据类型为 int64。别名 ``target``。 - **weight** (Tensor,可选) - 手动指定每个类别的权重。其默认为 ``None``。如果提供该参数的话,长度必须为 ``num_classes``。数据类型为 float32 或 float64。 - **ignore_index** (int,可选) - 指定一个忽略的标签值,此标签值不参与计算。默认值为-100。数据类型为 int64。 - **reduction** (str,可选) - 指定应用于输出结果的计算方式,可选值有:``none``、``mean``、``sum``。默认为 ``mean``,计算 ``mini-batch`` loss 均值。设置为 ``sum`` 时,计算 ``mini-batch`` loss 的总和。设置为 ``none`` 时,则返回 loss Tensor。数据类型为 string。 diff --git a/docs/api/paddle/nn/functional/prelu_cn.rst b/docs/api/paddle/nn/functional/prelu_cn.rst index 8a5f421c96a..384281cd6f9 100644 --- a/docs/api/paddle/nn/functional/prelu_cn.rst +++ b/docs/api/paddle/nn/functional/prelu_cn.rst @@ -15,7 +15,7 @@ prelu 激活层(PRelu Activation Operator)。计算公式如下: 参数 :::::::::: - - **x** (Tensor) - 输入的 ``Tensor``,数据类型为:float32、float64。 + - **x** (Tensor) - 输入的 ``Tensor``,数据类型为:float32、float64。别名 ``input``。 - **weight** (Tensor) - 可训练参数,数据类型同``x`` 一致,形状支持:[]、[1] 或者 [in],其中 ``in`` 为输入的通道数。 - **data_format** (str,可选) – 指定输入的数据格式,输出的数据格式将与输入保持一致,可以是 "NC", "NCL", "NCHW", "NCDHW", "NLC", "NHWC" 或者 "NDHWC"。默认值:"NCHW"。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 diff --git a/docs/api/paddle/nn/functional/relu6_cn.rst b/docs/api/paddle/nn/functional/relu6_cn.rst index 95c702d6f07..f22af7715e8 100644 --- a/docs/api/paddle/nn/functional/relu6_cn.rst +++ b/docs/api/paddle/nn/functional/relu6_cn.rst @@ -3,7 +3,7 @@ relu6 ------------------------------- -.. py:function:: paddle.nn.functional.relu6(x, name=None) +.. py:function:: paddle.nn.functional.relu6(x, inplace=False, name=None) relu6 激活层 @@ -15,7 +15,8 @@ relu6 激活层 参数 :::::::::: - - **x** (Tensor) - 输入的 ``Tensor``,数据类型为:float32、float64。 + - **x** (Tensor) - 输入的 ``Tensor``,数据类型为:float32、float64。别名 ``input``。 + - **inplace** (bool,可选) - 是否使用 inplace 操作,默认值为 False。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 返回 diff --git a/docs/api/paddle/nn/functional/rms_norm_cn.rst b/docs/api/paddle/nn/functional/rms_norm_cn.rst index e6b094395b1..abffe36f33b 100644 --- a/docs/api/paddle/nn/functional/rms_norm_cn.rst +++ b/docs/api/paddle/nn/functional/rms_norm_cn.rst @@ -3,7 +3,7 @@ rms_norm ------------------------------- -.. py:function:: paddle.nn.functional.rms_norm(x, normalized_shape, weight=None, epsilon=1e-05, name=None) +.. py:function:: paddle.nn.functional.rms_norm(input, normalized_shape, weight=None, eps=None, name=None) 推荐使用 nn.LayerNorm。 @@ -13,16 +13,16 @@ rms_norm 参数 :::::::::::: - - **x** (int) - 输入,数据类型为 bfloat16 、 float16 、 float32 或 float64。 + - **input** (Tensor) - 输入,数据类型为 bfloat16、float16、float32 或 float64。 - **normalized_shape** (list|tuple) - 期望的输入是 :math:`[*, normalized_shape[0], normalized_shape[1], ..., normalized_shape[-1]]`,如果是一个整数,会作用在最后一个维度。 - **weight** (Tensor,可选) - 权重的 Tensor,默认为 None。 - - **eps** (float,可选) - 为了数值稳定加在分母上的值。默认值:1e-05。 + - **eps** (float,可选) - 为了数值稳定加在分母上的值。若为 None,则根据计算数据类型自动使用机器精度。默认值:None。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 返回 :::::::::::: -无 + Tensor,数据类型和形状同 ``input`` 一致。 代码示例 :::::::::::: diff --git a/docs/api/paddle/nn/utils/weight_norm_cn.rst b/docs/api/paddle/nn/utils/weight_norm_cn.rst index 4c75e2abbd2..3569cefbdd2 100644 --- a/docs/api/paddle/nn/utils/weight_norm_cn.rst +++ b/docs/api/paddle/nn/utils/weight_norm_cn.rst @@ -15,7 +15,7 @@ weight_norm 参数 :::::::::::: - - **layer** (paddle.nn.Layer) - 要添加权重归一化的层。 + - **layer** (paddle.nn.Layer) - 要添加权重归一化的层。别名 ``module``。 - **name** (str,可选) - 权重参数的名字。默认值为 ``weight``。 - **dim** (int|None,可选) - 进行归一化操作的切片所在维度,是小于权重 Tensor rank 的非负数。比如卷积的权重 shape 是 [cout,cin,kh,kw] , rank 是 4,则 dim 可以选 0,1,2,3;fc 的权重 shape 是 [cout,cin] ,rank 是 2,dim 可以选 0,1。如果为 None 就对所有维度上的元素做归一化。默认:0。 diff --git a/docs/api/paddle/real_cn.rst b/docs/api/paddle/real_cn.rst index d90252e3a3c..5c22ad48175 100644 --- a/docs/api/paddle/real_cn.rst +++ b/docs/api/paddle/real_cn.rst @@ -10,7 +10,7 @@ real 参数 :::::::::::: - - **x** (Tensor) - 输入 Tensor,其数据类型可以为 complex64 或 complex128。 + - **x** (Tensor) - 输入 Tensor,其数据类型可以为 complex64 或 complex128。别名 ``input``。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 返回 diff --git a/docs/api/paddle/set_grad_enabled_cn.rst b/docs/api/paddle/set_grad_enabled_cn.rst index fb845df776b..397e8095e44 100644 --- a/docs/api/paddle/set_grad_enabled_cn.rst +++ b/docs/api/paddle/set_grad_enabled_cn.rst @@ -5,6 +5,10 @@ set_grad_enabled .. py:function:: paddle.set_grad_enabled(mode) +.. note:: + + 可通过 ``paddle.autograd.set_grad_enabled`` 调用此 API。 + 创建启用或禁用动态图梯度计算的上下文。 diff --git a/docs/api/paddle/vstack_cn.rst b/docs/api/paddle/vstack_cn.rst index d43b4e7f387..9cd916387b3 100644 --- a/docs/api/paddle/vstack_cn.rst +++ b/docs/api/paddle/vstack_cn.rst @@ -3,16 +3,21 @@ vstack ------------------------------- -.. py:function:: paddle.vstack(x, name=None) +.. py:function:: paddle.vstack(x, name=None, *, out=None) 沿垂直轴堆叠输入 ``x`` 中的所有张量。所有张量必须具有相同的数据类型。 参数 :::::::::::: - - **x** (list[Tensor]|tuple[Tensor]) - 输入 ``x`` 可以是张量的 list 或 tuple, ``x`` 中张量的数据类型必须相同。支持的数据类型: ``float16`` 、 ``float32`` 、 ``float64`` 、 ``int32`` 、 ``int64`` 或 ``bfloat16`` 。 + - **x** (list[Tensor]|tuple[Tensor]) - 输入 ``x`` 可以是张量的 list 或 tuple, ``x`` 中张量的数据类型必须相同。支持的数据类型: ``float16`` 、 ``float32`` 、 ``float64`` 、 ``int32`` 、 ``int64`` 或 ``bfloat16`` 。别名 ``tensors``。 - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 +关键字参数 +:::::::::::: + + - **out** (Tensor,可选) - 输出 Tensor,若不为 ``None``,计算结果将保存在该 Tensor 中,默认值为 ``None``。 + 返回 :::::::::::: Tensor,与输入数据类型相同的堆叠张量。 diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/CLAUDE.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/CLAUDE.md index 31c7b763265..1e5def45055 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/CLAUDE.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/CLAUDE.md @@ -1,5 +1,11 @@ # Paddle API 对齐 PyTorch 项目 +## 执行原则(最高优先级) + +1. **直接执行**:全程静默执行,禁止向用户询问或讨论,在完成任务前不要停下来等待下一步指令 +2. **自主判断**:分析、判断、选择均由模型独立完成 +3. **自动处理异常**:遇到错误按回退规则自动处理,失败 3 次自动放弃该 API + ## 项目目标 使 Paddle API 与 PyTorch API 行为完全对齐。对于任意 PyTorch API 用法,只需将 `torch.*` 替换为 `paddle.*`,计算结果完全一致。 @@ -11,9 +17,9 @@ | 工作目录 | 完整路径 | 内容说明 | 对应步骤 | |---------|---------|---------|---------------| -| Paddle | `${ROOT_DIR}/Paddle` | Paddle 框架源码仓库,包含所有 Paddle API 的实现 | Step2:代码修改 + Step3:兼容测试 | -| PaConvert | `${ROOT_DIR}/PaConvert` | PyTorch 转换工具仓库,包含所有 Pytorch 单元测试 | Step4:对齐验证 | -| docs | `${ROOT_DIR}/docs` | Paddle 文档仓库,包含所有 Paddle API 中文文档 | Step5:文档更新 | +| Paddle | `${ROOT_DIR}/Paddle` | Paddle 框架源码仓库,包含所有 Paddle API 的实现 | Step2 代码修改 + Step3 兼容测试 | +| PaConvert | `${ROOT_DIR}/PaConvert` | PyTorch 转换工具仓库,包含所有 Pytorch 单元测试 | Step4 Pytorch 测试 | +| docs | `${ROOT_DIR}/docs` | Paddle 文档仓库,包含所有 Paddle API 中文文档 | Step5 更新文档 | ## 常用文件位置 @@ -97,34 +103,32 @@ void AtanKernel(const Context& dev_ctx, const DenseTensor& x, DenseTensor* out) ## 工作流程 ### 流程概览 -| Step | 名称 | 对应 Skill | 核心任务 | +| Step | 名称 | 调用对应 Skill | 核心任务 | |------|------|-----------|----------| -| Step1 | 方案决策 | `/api-change-decider` | 分析差异,选择修改方案 | -| Step2 | 代码修改 | `/python-decorator` `/cpp-sink` `/modify-origin-api` `/add-new-api` `/add-new-compat-api` | 按方案修改 Paddle 代码 | -| Step3 | 兼容测试 | `/add-compatibility-test` | 添加兼容性单测并运行 | -| Step4 | 对齐验证 | `/pytorch-alignment-validator` | 编写 PyTorch 单测验证对齐 | -| Step5 | 文档更新 | `/api-docs-updater` | 更新中文文档和差异文档 | +| Step1 | 选择方案 | `/select-solution` | 分析差异,选择修改方案 | +| Step2 | 代码修改 | `/python-decorator` `/cpp-sink` `/modify-origin-api` `/add-new-api` `/add-new-compat-api` | 按方案修改 Paddle 代码 | +| Step3 | 兼容测试 | `/compatibility-test` | 添加兼容性单测并运行 | +| Step4 | Pytorch 测试 | `/pytorch-test` | 编写 PyTorch 单测验证对齐 | +| Step5 | 更新文档 | `/update-docs` | 更新中文文档和差异文档 | ### 流程重要约束 1. **批量处理**:每个 Step 对**所有 API** 完成后才进入下一步 2. **正向推进**:必须按 Step1 → Step2 → Step3 → Step4 → Step5 顺序执行,禁止跳过 -3. **异常回退**:Step3/Step4 失败时回退到对应步骤重新执行 -4. **放弃规则**:回退 3 次以上仍失败,标记为"未对齐"并放弃,需完整回退所有修改 - -### Step 通过标准 -- Step3:单测可运行通过 -- Step4:API 可配置为 `ChangePrefixMatcher` - +3. **异常回退**:Step3/Step4 无法通过时回退到对应步骤重新执行,必须满足以下通过标准: + - Step3:单测可运行通过 + - Step4:API 可配置为 `ChangePrefixMatcher` +4. **放弃规则**:若某个 API 回退 3 次以上仍失败,标记为"未对齐"并放弃该 API,需完整回退该 API 的所有修改,避免"修改了但没改对"的中间状态 ## 注意事项 -1. 严格按标准工作流程执行,杜绝自行臆断和跳过步骤 -2. 每次修改代码后必须重新编译:在 `${ROOT_DIR}/Paddle/build` 目录下执行编译,否则修改不会生效 +1. 禁止修改 build 目录下任意文件,因为其是基于源码产生,篡改没有意义,你应该考虑源码本身是否正确,以及是否重新编译 +2. 每次修改 Paddle 代码后必须重新编译,否则修改不会生效: ```bash cd ${ROOT_DIR}/Paddle/build - cmake .. && make -j$(nproc) + cmake .. && make -j$(nproc) > compile.log 2>&1 ``` - - 无需重装,直接生效(勿执行 setup/install 等安装操作) + - 无需重装,编译完成直接生效(勿执行 setup/install 等安装操作) - 勿删除 build 目录(否则增量编译失效,编译时间极长) +3. 不要在 API 文档字符串中强调"PyTorch 风格"、"PyTorch 签名"、"PyTorch 适配"等 Pytorch 相关内容 ## 忽略参数规则 分析差异时,以下参数直接忽略: diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/SKILL.md index 680050a34a9..0eb50b9565b 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/SKILL.md @@ -1,6 +1,6 @@ --- name: add-new-api -description: 负责《Paddle API 对齐 PyTorch 项目》中 Step2:API 代码修改,实施『新增 API』方案。通过新增 Paddle API(新增 API 别名、新增 Python 层 API、新增 C++算子),覆盖 Pytorch API 调用路径,实现与 PyTorch API 行为对齐。 +description: 负责《Paddle API 对齐 PyTorch 项目》中 Step2 代码修改,实施『新增 API』方案。通过新增 Paddle API(新增 API 别名、新增 Python 层 API、新增 C++算子),覆盖 Pytorch API 调用路径,实现与 PyTorch API 行为对齐。 context: fork disable-model-invocation: false --- diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/references/new_cpp_op.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/references/new_cpp_op.md index ff3e569c698..1a6f0ca3db5 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/references/new_cpp_op.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/references/new_cpp_op.md @@ -393,7 +393,7 @@ class TestTraceOp(OpTest): ```bash cd ${ROOT_DIR}/Paddle/build -cmake .. && make -j$(nproc) +cmake .. && make -j$(nproc) > compile.log 2>&1 python test_xxx_op.py ``` diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/references/new_python_api.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/references/new_python_api.md index 837b3833207..4c623eed8bc 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/references/new_python_api.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-api/references/new_python_api.md @@ -160,7 +160,7 @@ class TestHardtanhAPI(unittest.TestCase): ```bash cd ${ROOT_DIR}/Paddle/build -cmake .. && make -j$(nproc) +cmake .. && make -j$(nproc) > compile.log 2>&1 python test_xxx.py ``` diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-compat-api/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-compat-api/SKILL.md index c6de8f8613f..5cce5cb051a 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-compat-api/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-new-compat-api/SKILL.md @@ -1,6 +1,6 @@ --- name: add-new-compat-api -description: 负责《Paddle API 对齐 PyTorch 项目》中 Step2:API 代码修改,实施『新增 compat 类型 API』方案。在 `paddle.compat` 命名空间下新增 API,实现与 PyTorch API 行为对齐。 +description: 负责《Paddle API 对齐 PyTorch 项目》中 Step2 代码修改,实施『新增 compat 类型 API』方案。在 `paddle.compat` 命名空间下新增 API,实现与 PyTorch API 行为对齐。 context: fork disable-model-invocation: false --- diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md index 3d76ccafbfe..18e8015360b 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-compatibility/SKILL.md @@ -140,21 +140,20 @@ x = paddle.to_tensor([1.0, -2.0, 3.0]) print(paddle.abs(x)) ``` - # 三、整体工作流程 ## 流程概览 ``` -输入 API 列表 → Step1:所有 API 方案决策 → Step2:所有 API 代码修改 → Step3:所有 API 兼容测试 → Step4:所有 API 对齐验证 → Step5:所有 API 文档更新 → 全部完成(流程全自动推进,不用询问) +输入 API 列表 → Step1:所有 API 选择方案 → Step2:所有 API 代码修改 → Step3:所有 API 兼容测试 → Step4:所有 API Pytorch 测试 → Step5:所有 API 更新文档 → 全部完成 ``` 具体如下: -### Step 1:方案决策(调用 `/api-change-decider` skill) +### Step 1:选择方案(调用 `/select-solution` skill) Step 1.1: 获取差异信息 Step 1.2: 提取差异信息 - Step 1.3: 方案决策 + Step 1.3: 选择方案 ### Step 2:代码修改 -根据 Step1 的方案决策结果,**按方案分组**,依次调用对应 skill,同一方案的所有 API 在一个 skill 调用中批量处理。 +根据 Step1 的方案选择结果,**按方案分组**,依次调用对应 skill,同一方案的所有 API 在一个 skill 调用中批量处理。 **各方案步骤**: #### 方案 1:Python 装饰器(调用 `/python-decorator` skill) @@ -172,48 +171,36 @@ print(paddle.abs(x)) #### 方案 4:新增 API(调用 `/add-new-api` skill) #### 方案 5:新增 compat 类型 API(调用 `/add-new-compat-api` skill) -### Step 3:兼容测试(调用 `/add-compatibility-test` skill) +### Step 3:兼容测试(调用 `/compatibility-test` skill) Step 3.1: 编写测试用例 Step 3.2: 编译并运行单测(每次修改代码均需执行编译) -### Step 4:对齐验证(调用 `/pytorch-alignment-validator` skill) +### Step 4:Pytorch 测试(调用 `/pytorch-test` skill) Step 4.1: 标记已完成的 API Step 4.2: 增加测试用例 Step 4.3: 编译并运行单测(每次修改代码均需执行编译) -### Step 5:文档更新(调用 `/api-docs-updater` skill) +### Step 5:更新文档(调用 `/update-docs` skill) ## 流程重要约束 -1. 接收用户输入的待对齐 API 列表(如 `torch.argmax`, `torch.log2`, `torch.logsumexp`) -2. **批量处理模式**:依次执行,每个 Step 结束后才进入下一个 Step - - Step1:对**所有 API**进行方案决策 - - Step2:对**所有 API**进行代码修改 - - Step3:对**所有 API**进行兼容测试 - - Step4:对**所有 API**进行对齐验证 - - Step5:对**所有 API**进行文档更新 -3. **流程正向推进原则** - - 正常情况下必须遵循 Step1 → Step2 → Step3 → Step4 → Step5 的顺序 - - 每个步骤完成后,才能进入下一步骤,禁止跳过任何步骤 -4. **异常回退原则** - - 当 Step3 或 Step4 无法通过时,则需要执行回退(Step3 的通过标准是单测可运行通过,Step4 的通过标准是 API 可配置为 ChangePrefixMatcher): - * 若判断为方案选择错误 → 回退到 Step1 重新决策 - * 若判断为代码实现有误 → 回退到 Step2 调整实现方式 - - 回退后需从该步骤重新按流程向前推进,例如回退到 Step2,则重新执行 Step2 → Step3 → Step4 → Step5 -5. **允许放弃部分 API**(合理分配精力,最大化成功率): - - 当某个 API 异常回退 3 次以上仍无法通过,则放弃该 API,在最终对齐结果统计表中标记该 API 为"未对齐",并简要说明放弃原因 - - 必须完整回退该 API 的所有修改,确保项目处于干净状态,不得保留任何 API"修改了但没改对"的中间状态 -6. 所有 API 都完成 5 个步骤(除被放弃外)后,任务结束 +1. 批量处理:每个 Step 对**所有 API**完成后才进入下一步 +2. 正向推进:必须按 Step1 → Step2 → Step3 → Step4 → Step5 顺序执行,禁止跳过 +3. 异常回退: + - Step3/Step4 无法通过时自动回退(Step3 通过标准:单测可运行通过;Step4 通过标准:API 可配置为 ChangePrefixMatcher) + - 选择方案错误 → 回退到 Step1;代码实现有误 → 回退到 Step2 + - 回退后从该步骤重新向前推进 +4. 放弃规则:某个 API 回退 3 次以上仍失败,标记为"未对齐"并完整回退所有修改 ## 工作示例 假设待对齐 API 为 `torch.argmax`: ``` -1. Step1: 方案决策 → 得到『方案 2:C++下沉』 +1. Step1: 选择方案 → 得到『方案 2:C++下沉』 2. Step2: 代码修改 → 修改 Paddle 目录文件,将 paddle.argmax 下沉到 C++ 3. Step3: 兼容测试 → 在 Paddle 目录添加兼容性单测,编译并运行验证 -4. Step4: 对齐验证 → 修改 PaConvert 目录文件,编写 Pytorch 单元测试,对比测试,验证对齐 -5. Step5: 文档更新 → 修改 docs 目录文件,更新 paddle.argmax 文档 +4. Step4: Pytorch 测试 → 修改 PaConvert 目录文件,编写 Pytorch 单元测试,对比测试,验证对齐 +5. Step5: 更新文档 → 修改 docs 目录文件,更新 paddle.argmax 文档 ``` # 四、各 Skill 说明 @@ -238,15 +225,15 @@ print(paddle.abs(x)) | Skill | 对应步骤 | |-------|--------| -| `/api-change-decider` | Step1:方案决策 | -| `/python-decorator` | Step2:方案 1 Python 装饰器 | -| `/cpp-sink` | Step2:方案 2 C++下沉 | -| `/modify-origin-api` | Step2:方案 3 修改原有 API | -| `/add-new-api` | Step2:方案 4 新增 API | -| `/add-new-compat-api` | Step2:方案 5 新增 compat API | -| `/add-compatibility-test` | Step3:兼容测试 | -| `/pytorch-alignment-validator` | Step4:对齐验证 | -| `/api-docs-updater` | Step5:文档更新 | +| `/select-solution` | Step1 选择方案 | +| `/python-decorator` | Step2 方案 1 Python 装饰器 | +| `/cpp-sink` | Step2 方案 2 C++下沉 | +| `/modify-origin-api` | Step2 方案 3 修改原有 API | +| `/add-new-api` | Step2 方案 4 新增 API | +| `/add-new-compat-api` | Step2 方案 5 新增 compat API | +| `/compatibility-test` | Step3 兼容测试 | +| `/pytorch-test` | Step4 Pytorch 测试 | +| `/update-docs` | Step5 更新文档 | # 五、自进化机制 @@ -289,14 +276,4 @@ mod = remainder ### Q2:Inplace API 如何实现? -内部所有操作都必须使用 inplace 方法(`scale_`、`add_` 等),不能用 `*`、`+` 等非 inplace 操作。 - -**错误**: -```python -mv_result = mv_result * alpha # 创建新 tensor -``` - -**正确**: -```python -mv_result.scale_(alpha) # inplace 修改 -``` +与输入 input 相关的所有操作都必须使用 inplace 方法(`scale_`、`add_` 等),不能用 `*`、`+` 等非 inplace 操作。可以参考 addcdiv_的实现。 diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-compatibility-test/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/compatibility-test/SKILL.md similarity index 96% rename from docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-compatibility-test/SKILL.md rename to docs/dev_guides/coding_agent/api_compatibility/.claude/skills/compatibility-test/SKILL.md index abe3ac01bc3..a512d890410 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/add-compatibility-test/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/compatibility-test/SKILL.md @@ -1,6 +1,6 @@ --- -name: add-compatibility-test -description: 负责《Paddle API 对齐 PyTorch 项目》中 Step3:兼容性测试,为已修改的 Paddle API 添加兼容性单测并执行验证,确保 API 的 Paddle 用法与 PyTorch 用法均能正常工作。 +name: compatibility-test +description: 负责《Paddle API 对齐 PyTorch 项目》中 Step3 兼容测试,为已修改的 Paddle API 添加兼容性单测并执行验证,确保 API 的 Paddle 用法与 PyTorch 用法均能正常工作。 disable-model-invocation: false --- @@ -131,7 +131,7 @@ if paddle.device.is_compiled_with_cuda(): ```bash cd ${ROOT_DIR}/Paddle/build -cmake .. && make -j$(nproc) +cmake .. && make -j$(nproc) > compile.log 2>&1 python test_xxx.py ``` @@ -197,7 +197,7 @@ self.dtype = np.float32 - 回退后再进入本步骤(Step3),则只需执行:编译并运行,其他步骤无需执行 3. **若判断为方案选择错误**(如当前方案不适用、底层不支持等): - - 回退到总步骤 Step1(方案决策)重新决策 + - 回退到总步骤 Step1(选择方案)重新选择 - 回退后再进入本步骤(Step3),则只需执行:编译并运行,其他步骤无需执行 # 五、常见问题处理 diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/cpp-sink/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/cpp-sink/SKILL.md index f55981afbb5..be7ebe28b08 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/cpp-sink/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/cpp-sink/SKILL.md @@ -1,6 +1,6 @@ --- name: cpp-sink -description: 负责《Paddle API 对齐 PyTorch 项目》中 Step2:API 代码修改,实施『C++下沉』方案。通过将 Python API 下沉至 C++层,可以减少 Python 装饰器带来的性能开销,提升 API 调度效率。 +description: 负责《Paddle API 对齐 PyTorch 项目》中 Step2 代码修改,实施『C++下沉』方案。通过将 Python API 下沉至 C++层,可以减少 Python 装饰器带来的性能开销,提升 API 调度效率。 context: fork disable-model-invocation: false --- diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/create-pr/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/create-pr/SKILL.md index 23f948cd3d3..00d7b70045c 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/create-pr/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/create-pr/SKILL.md @@ -1,7 +1,6 @@ --- name: create-pr description: 负责《Paddle API 对齐 PyTorch 项目》中代码提交,分别对 Paddle、PaConvert、Docs 三个仓库创建或更新 Pull Request -allowed-tools: Bash(git *) disable-model-invocation: false --- @@ -28,7 +27,7 @@ disable-model-invocation: false ### 渠道 1:从上下文或用户输入获取 从以下来源获取 API 名单: -- **从上下文获取**:从 api-change-decider、python-decorator、cpp-sink 等前序步骤的上下文中自动提取 API 名单 +- **从上下文获取**:从 select-solution、python-decorator、cpp-sink 等前序步骤的上下文中自动提取 API 名单 - **从用户输入获取**:用户直接提供 PyTorch API 名单,例如:`torch.relu`、`torch.sigmoid`、`torch.tanh` 等 ### 渠道 2:从仓库改动分析获取 @@ -295,8 +294,7 @@ EOF 4. **pre-commit hook**:如果失败,修复问题后重新 add 和 commit 5. **分支推送**:所有改动必须推送到 upstream 的 claude 分支 6. **PR 操作**:确保 PR 创建或更新成功,失败需修正后重试 -7. **历史经验**:复盘记忆中的历史易错点,避免重复犯错 -8. **安全约束**:禁止在 SKILL 中添加任何网络代理设置的内容,发现代码 Diff 中包含网络代理设置需立即删除并拒绝提交 +7. **安全约束**:禁止在 SKILL 中添加任何网络代理设置的内容,发现代码 Diff 中包含网络代理设置需立即删除并拒绝提交 # 四、常见问题处理 diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/modify-origin-api/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/modify-origin-api/SKILL.md index 52ff2ec4c1c..67004dba066 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/modify-origin-api/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/modify-origin-api/SKILL.md @@ -1,6 +1,6 @@ --- name: modify-origin-api -description: 负责《Paddle API 对齐 PyTorch 项目》中 Step2:API 代码修改,实施『修改原有 API』方案。通过修改原有 Paddle API 的实现(新增参数、扩展参数类型/功能),使 Paddle API 与 PyTorch API 行为对齐,同时保持后向兼容性。 +description: 负责《Paddle API 对齐 PyTorch 项目》中 Step2 代码修改,实施『修改原有 API』方案。通过修改原有 Paddle API 的实现(新增参数、扩展参数类型/功能),使 Paddle API 与 PyTorch API 行为对齐,同时保持后向兼容性。 context: fork disable-model-invocation: false --- diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/python-decorator/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/python-decorator/SKILL.md index 2cdf1f7c492..ba25f734431 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/python-decorator/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/python-decorator/SKILL.md @@ -1,6 +1,6 @@ --- name: python-decorator -description: 负责《Paddle API 对齐 PyTorch 项目》中 Step2:API 代码修改,实施『Python 装饰器』方案。通过 Python 装饰器,在 Python 层为 Paddle API 实现参数名称、参数顺序、参数类型和参数用法的重载,实现 PyTorch 风格的 API 调用,并保持 Paddle API 的向后兼容性。 +description: 负责《Paddle API 对齐 PyTorch 项目》中 Step2 代码修改,实施『Python 装饰器』方案。通过 Python 装饰器,在 Python 层为 Paddle API 实现参数名称、参数顺序、参数类型和参数用法的重载,实现 PyTorch 风格的 API 调用,并保持 Paddle API 的向后兼容性。 context: fork disable-model-invocation: false --- @@ -42,7 +42,7 @@ Paddle 现有装饰器统一位于 `${ROOT_DIR}/Paddle/python/paddle/utils/decor --- -### 场景决策表 +### 场景选择表 | 差异类型 | 参数顺序 | 参数个数 | 参数用法 | 推荐方案 | |---------|--------|--------|--------|--------| diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/pytorch-alignment-validator/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/pytorch-test/SKILL.md similarity index 97% rename from docs/dev_guides/coding_agent/api_compatibility/.claude/skills/pytorch-alignment-validator/SKILL.md rename to docs/dev_guides/coding_agent/api_compatibility/.claude/skills/pytorch-test/SKILL.md index 6542402a311..0ea02d52bd9 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/pytorch-alignment-validator/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/pytorch-test/SKILL.md @@ -1,6 +1,6 @@ --- -name: pytorch-alignment-validator -description: 负责《Paddle API 对齐 PyTorch 项目》中 Step4:对齐验证,基于 PaConvert 工具验证 Paddle API 与 PyTorch API 是否用法完全对齐一致 +name: pytorch-test +description: 负责《Paddle API 对齐 PyTorch 项目》中 Step4 Pytorch 测试,基于 PaConvert 工具验证 Paddle API 与 PyTorch API 是否用法完全对齐一致 disable-model-invocation: false --- @@ -9,7 +9,7 @@ disable-model-invocation: false 请严格按以下 Step 依次执行,不要自行修改或跳过 Step: ## Step 1: 标记已完成的 API -1. 定位文件:`${ROOT_DIR}/PaConvert/paconvert/api_mapping.json` +1. 定位文件:`${ROOT_DIR}/PaConvert/paconvert/api_mapping.json` 或 `${ROOT_DIR}/PaConvert/paconvert/attribute_mapping.json` 2. 将已完成的 PyTorch API 的 Matcher 设置为`ChangePrefixMatcher`,其他字段全部删除掉 **注意**: @@ -128,7 +128,7 @@ def test_case_7(): ```bash cd ${ROOT_DIR}/Paddle/build -cmake .. && make -j$(nproc) +cmake .. && make -j$(nproc) > compile.log 2>&1 cd ${ROOT_DIR}/PaConvert/ python -m pytest tests/test_.py ``` @@ -160,7 +160,7 @@ python -m pytest tests/test_.py - 回退后再进入本步骤(Step4),则只需执行:运行单元测试,其他步骤无需执行 3. **若判断为方案选择错误**(如当前方案不适用、底层不支持等): - - 回退到总步骤 Step1(方案决策)重新决策 + - 回退到总步骤 Step1(选择方案)重新选择 - 回退后再进入本步骤(Step4),则只需执行:运行单元测试,其他步骤无需执行 # 四、常见问题处理 diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-change-decider/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/select-solution/SKILL.md similarity index 92% rename from docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-change-decider/SKILL.md rename to docs/dev_guides/coding_agent/api_compatibility/.claude/skills/select-solution/SKILL.md index fb61ec7649b..f9f34f48d3e 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-change-decider/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/select-solution/SKILL.md @@ -1,6 +1,6 @@ --- -name: api-change-decider -description: 负责《Paddle API 对齐 PyTorch 项目》中 Step1:方案决策,分析 PyTorch API 与 Paddle API 之间的差异,制定合适的 API 改动方案 +name: select-solution +description: 负责《Paddle API 对齐 PyTorch 项目》中 Step1 选择方案,分析 PyTorch API 与 Paddle API 之间的差异,制定合适的 API 改动方案 disable-model-invocation: false --- @@ -110,13 +110,11 @@ disable-model-invocation: false ## Step 1: 获取差异信息 -两种优先级是"二选一"而非"两者都要",一旦获取完整信息立即停止: +**三种信息源均需获取,综合判断**,且遵循以下核心原则: -### 优先级 1:查阅差异文档和转写配置 +**信息更新延迟说明**:可能存在 Paddle 源码已修改,但差异文档或转写配置还未来得及更新的情况。因此需要综合三种信息源判断,源码反映真实情况。 -包含两个信息源,需要综合两者来提取差异信息: - -#### 1.1 查阅差异文档 +### 信息 1:差异文档 **查阅路径**: ``` @@ -124,14 +122,14 @@ ${ROOT_DIR}/docs/docs/guides/model_convert/convert_from_pytorch/api_difference/t ``` **注意事项**: -- **文档可能滞后或有误**:发现问题时应自行分析,或结合转写配置/源码进一步确认 +- **文档可能滞后或有误**:发现问题时应自行分析,或结合转写配置/Paddle 源码进一步确认 - **标题不代表全部**:一个 API 可能涉及多种差异,文档标题仅反映主要分类,**必须通读完整参数映射表提取所有差异**,不能仅看标题 - **忽略参数规则**: - torch 侧忽略:`generator`、`memory_format`、`layout` - paddle 侧忽略:`name` - 其他参数不可忽略 -#### 1.2 查阅转写配置 +### 信息 2:转写配置 **查阅路径**: ``` @@ -159,12 +157,18 @@ ${ROOT_DIR}/PaConvert/paconvert/attribute_mapping.json **注意**:更多 Matcher 类型可参考 `api_matcher.py` 源码分析。 -### 优先级 2:自行获取 API 信息 +### 信息 3:源码分析 -当优先级 1 无法获取完整差异信息时,通过多种方式自行获取 PyTorch API 和 Paddle API 的信息,进行对比分析。 +自行获取 PyTorch API 和 Paddle API 的信息,进行对比分析。 获取方式请参考`api-compatibility/SKILL.md` 中的「API 信息获取方式」内容。 +### 综合判定规则 + +1. **优先级规则**:若任意一种信息源判定为"API 完全一致",则最终结果为"API 完全一致" +2. **多数一致规则**:若多种信息源对同一差异点有一致的判定,采纳该判定 +3. **源码优先规则**:当信息源之间判定不一致时,以源码分析结果为准(源码反映真实情况) + ## Step 2:提取差异信息 根据获取到的 PyTorch API 与 Paddle API 信息,提取以下内容: @@ -194,7 +198,7 @@ ${ROOT_DIR}/PaConvert/paconvert/attribute_mapping.json | 12 | API 别名 | PyTorch API 是其他 API 的别名 | | 13 | 功能缺失 | Paddle 暂无等效实现 | -## Step 3: 方案决策 +## Step 3: 方案选择 ### 3.1 判断 API 路径一致性 @@ -217,18 +221,18 @@ python -c "import paddle; paddle.addmv" # AttributeError → 路径不 python -c "import paddle; paddle.Tensor.addmv_" # AttributeError → 路径不一致 ``` -**输出**:记录路径一致性结果(一致/不一致),用于选择决策表。 +**输出**:记录路径一致性结果(一致/不一致),用于选择流程图。 -### 3.2 执行决策流程 +### 3.2 执行选择流程 -根据 3.1 的路径一致性结果选择决策流程图:**路径不一致** → 决策流程图 A;**路径一致** → 决策流程图 B。 +根据 3.1 的路径一致性结果选择流程图:**路径不一致** → 选择流程图 A;**路径一致** → 选择流程图 B。 **针对每个差异分类独立执行流程图**,得到对应方案: - 仅一个差异分类 → 直接输出该方案 - 多个差异分类 → 按 3.3 规则组合 -**决策流程图 A:路径不一致** +**选择流程图 A:路径不一致** ``` API 路径不一致 @@ -288,7 +292,7 @@ API 路径不一致 └──→ 13. 功能缺失 → 方案 4(新增 Python 层 API 或 C++ 算子)→ 得到方案 ``` -**决策流程图 B:路径一致** +**选择流程图 B:路径一致** ``` API 路径一致 @@ -349,9 +353,9 @@ API 路径一致 ``` -### 3.3 多差异分类组合决策 +### 3.3 多差异分类组合选择 -当 API 存在多个差异分类时,**逐个差异分类独立查决策流程图,再合并方案**。 +当 API 存在多个差异分类时,**逐个差异分类独立查阅流程图,再合并方案**。 **合并规则**: @@ -371,7 +375,7 @@ API 路径一致 # 三、输出要求 -**重要**:本 SKILL 以 agent 模式执行,上下文不共享。完成决策后,必须按以下格式输出完整信息,供后续步骤使用。 +**重要**:本 SKILL 以 agent 模式执行,上下文不共享。完成选择后,必须按以下格式输出完整信息,供后续步骤使用。 ## 输出格式 @@ -391,9 +395,9 @@ API 路径一致 - 额外参数:torch 多出 `xxx, yyy`(如有) - 参数类型:`参数名: torch 类型 vs paddle 类型`(如有) -**方案决策** +**方案选择** - 选择方案:`方案 N(方案名称)` 或 `方案 N1 + 方案 N2` -- 决策依据:`简述选择理由` +- 选择理由:`简述选择理由` - 组合说明:`分别说明各方案解决的差异点`(仅组合方案需要) ``` @@ -416,9 +420,9 @@ API 路径一致 - 参数名映射:`input → x` - 额外参数:torch 多出 `out` -**方案决策** +**方案选择** - 选择方案:方案 2(C++ 下沉) -- 决策依据:API 路径一致;差异为"参数名不同 + 仅多 out 参数",满足方案 2 条件 3;且满足 C++ 下沉全部其他条件(调用 `_C_ops.atan`、无其他 Paddle API 调用、无复杂前处理)。 +- 选择理由:API 路径一致;差异为"参数名不同 + 仅多 out 参数",满足方案 2 条件 3;且满足 C++ 下沉全部其他条件(调用 `_C_ops.atan`、无其他 Paddle API 调用、无复杂前处理)。 ``` **示例 2:组合方案** @@ -438,17 +442,15 @@ API 路径一致 - 参数名映射:`end → stop, steps → num` - 额外参数:torch 多出 `out, device, requires_grad` -**方案决策** +**方案选择** - 选择方案:方案 3 + 方案 1 -- 决策依据:API 路径一致;新增 out/device/requires_grad 参数可保持后向兼容;参数名差异需通过装饰器适配。 +- 选择理由:API 路径一致;新增 out/device/requires_grad 参数可保持后向兼容;参数名差异需通过装饰器适配。 - 组合说明:方案 3 处理 torch 参数更多(新增参数);方案 1 处理参数名不一致。 ``` # 四、注意事项 -1. **严格按标准工作流程执行**,杜绝自行臆断和跳过步骤 -2. 决策前务必检查 Paddle 代码实际状态,差异文档可能滞后,代码反映真实情况(有可能已经完成了 Paddle 代码修改但未更正映射文档) -3. **读取或修改 Python 实现时,忽略静态图部分**(LayerHelper 分支代码不再维护) +**读取或修改 Python 实现时,忽略静态图部分**(LayerHelper 分支代码不再维护) # 五、常见问题处理 diff --git a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-docs-updater/SKILL.md b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/update-docs/SKILL.md similarity index 96% rename from docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-docs-updater/SKILL.md rename to docs/dev_guides/coding_agent/api_compatibility/.claude/skills/update-docs/SKILL.md index ad2a9121efb..9c3ea2bd468 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/api-docs-updater/SKILL.md +++ b/docs/dev_guides/coding_agent/api_compatibility/.claude/skills/update-docs/SKILL.md @@ -1,6 +1,6 @@ --- -name: api-docs-updater -description: 负责《Paddle API 对齐 PyTorch 项目》中 Step5:文档更新,在 API 代码修改完成后,同步更新中文 API 文档,确保文档准确反映 API 的最新行为 +name: update-docs +description: 负责《Paddle API 对齐 PyTorch 项目》中 Step5 更新文档,在 API 代码修改完成后,同步更新中文 API 文档,确保文档准确反映 API 的最新行为 disable-model-invocation: false --- @@ -41,7 +41,7 @@ Step 3. **更新中文文档与英文一致** - Overload 说明内容对应 - out 参数描述对齐 6. **文档描述原则** - - 不要在文档中特别强调"PyTorch 风格"或"PyTorch 签名" + - 不要在文档中强调"PyTorch 风格"、"PyTorch 签名"、"PyTorch 适配"等 Pytorch 相关内容 - 参数别名说明只需简单注明"别名 xxx" # 四、常见修改模式 diff --git a/docs/dev_guides/coding_agent/api_compatibility/README.md b/docs/dev_guides/coding_agent/api_compatibility/README.md index daa4248a4d1..2b67f496946 100644 --- a/docs/dev_guides/coding_agent/api_compatibility/README.md +++ b/docs/dev_guides/coding_agent/api_compatibility/README.md @@ -12,15 +12,15 @@ api_compatibility/ # 本目录 ├── CLAUDE.md # 项目背景(自动加载) └── skills/ # Skill 定义 ├── api-compatibility/ # 总控 - ├── api-change-decider/ # Step1:方案决策 - ├── python-decorator/ # Step2:Python 装饰器 - ├── cpp-sink/ # Step2:C++下沉 - ├── modify-origin-api/ # Step2:修改原有 API - ├── add-new-api/ # Step2:新增 API - ├── add-new-compat-api/ # Step2:新增 compat API - ├── add-compatibility-test/ # Step3:兼容性测试 - ├── pytorch-alignment-validator/ # Step4:对齐验证 - ├── api-docs-updater/ # Step5:文档更新 + ├── select-solution/ # Step1 选择方案 + ├── python-decorator/ # Step2 Python 装饰器 + ├── cpp-sink/ # Step2 C++下沉 + ├── modify-origin-api/ # Step2 修改原有 API + ├── add-new-api/ # Step2 新增 API + ├── add-new-compat-api/ # Step2 新增 compat API + ├── compatibility-test/ # Step3 兼容测试 + ├── pytorch-test/ # Step4 Pytorch 测试 + ├── update-docs/ # Step5 更新文档 └── create-pr/ # 提交 PR ``` @@ -37,13 +37,13 @@ api_compatibility/ # 本目录 ``` ## 安装 +PROJECT_ROOT 需提前下载 `Paddle/`、`PaConvert/`、`docs/` 三个子目录。 ```bash -./install.sh /path/to/PROJECT_ROOT +./install.sh ${PROJECT_ROOT} +export PYTHONPATH="${PROJECT_ROOT}/Paddle/build/python:${env:PYTHONPATH}" ``` -PROJECT_ROOT 需包含 `Paddle/`、`PaConvert/`、`docs/` 三个子目录。 - ## 使用方式 **总控 Skill(推荐)**: @@ -53,18 +53,18 @@ PROJECT_ROOT 需包含 `Paddle/`、`PaConvert/`、`docs/` 三个子目录。 **单独调用 Skill**: ```bash -/api-change-decider torch.atan # Step1: 方案决策 -/cpp-sink torch.atan # Step2: 代码修改 -/add-compatibility-test torch.atan # Step3: 兼容测试 -/pytorch-alignment-validator torch.atan # Step4: 对齐验证 -/api-docs-updater torch.atan # Step5: 文档更新 -/create-pr torch.atan # 提交 PR +/select-solution torch.atan # Step1: 选择方案 +/cpp-sink torch.atan # Step2: 代码修改 +/compatibility-test torch.atan # Step3: 兼容测试 +/pytorch-test torch.atan # Step4: Pytorch 测试 +/update-docs torch.atan # Step5: 更新文档 +/create-pr torch.atan # 提交 PR ``` ## 工作流程 ``` -Step1 方案决策 → Step2 代码修改 → Step3 兼容测试 → Step4 对齐验证 → Step5 文档更新 +Step1 选择方案 → Step2 代码修改 → Step3 兼容测试 → Step4 Pytorch 测试 → Step5 更新文档 ``` ## 详细文档 diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/args_default_value_diff/torch.cuda.amp.GradScaler.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/args_default_value_diff/torch.cuda.amp.GradScaler.md index b0cd6b59631..61712984084 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/args_default_value_diff/torch.cuda.amp.GradScaler.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/args_default_value_diff/torch.cuda.amp.GradScaler.md @@ -1,4 +1,4 @@ -## [ 参数默认值不一致 ]torch.cuda.amp.GradScaler +## [ 参数一致 ]torch.cuda.amp.GradScaler ### [torch.cuda.amp.GradScaler](https://docs.pytorch.org/docs/stable/amp.html#torch.cuda.amp.GradScaler) ```python @@ -10,16 +10,16 @@ torch.cuda.amp.GradScaler(init_scale=65536.0, growth_factor=2.0, backoff_factor= paddle.amp.GradScaler(enable=True, init_loss_scaling=65536.0, incr_ratio=2.0, decr_ratio=0.5, incr_every_n_steps=2000, decr_every_n_nan_or_inf=2, use_dynamic_loss_scaling=True) ``` -其中 Paddle 相比 PyTorch 支持更多其他参数且参数默认值不一致,具体如下: +Paddle 通过参数别名机制完整支持 PyTorch 的调用风格,以下仅为记录。 ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | --------------- | ------------------------ |-----------------------------------------------------------------------------| -| init_scale | init_loss_scaling | 初始 loss scaling 因子。Paddle 与 PyTorch 默认值不同,Paddle 应设置为 65536.0。 | -| growth_factor | incr_ratio | 增大 loss scaling 时使用的乘数。 | -| backoff_factor | decr_ratio | 减小 loss scaling 时使用的小于 1 的乘数。 | -| growth_interval | incr_every_n_steps | 连续 n 个 steps 的梯度都是有限值时,增加 loss scaling。Paddle 与 PyTorch 默认值不同,Paddle 应设置为 2000。| -| enabled | enable | 是否使用 loss scaling。 | +| init_scale | init_loss_scaling | 初始 loss scaling 因子。Alias: ``init_scale``。 | +| growth_factor | incr_ratio | 增大 loss scaling 时使用的乘数。Alias: ``growth_factor``。 | +| backoff_factor | decr_ratio | 减小 loss scaling 时使用的小于 1 的乘数。Alias: ``backoff_factor``。 | +| growth_interval | incr_every_n_steps | 连续 n 个 steps 的梯度都是有限值时,增加 loss scaling。Alias: ``growth_interval``。| +| enabled | enable | 是否使用 loss scaling。Alias: ``enabled``。 | | - | decr_every_n_nan_or_inf | 累计出现 n 个 steps 的梯度为 nan 或者 inf 时,减小 loss scaling,PyTorch 无此参数,Paddle 保持默认即可。 | | - | use_dynamic_loss_scaling | 是否使用动态的 loss scaling,PyTorch 无此参数,Paddle 保持默认即可。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.Tensor.true_divide_.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.Tensor.true_divide_.md index af45e617ed3..1e6f78c7169 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.Tensor.true_divide_.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.Tensor.true_divide_.md @@ -4,9 +4,9 @@ torch.Tensor.true_divide_(other) ``` -### [paddle.Tensor.divide_]() +### [paddle.Tensor.true\_divide\_]() ```python -paddle.Tensor.divide_(y) +paddle.Tensor.true_divide_(y) ``` 两者功能一致且参数用法一致,仅参数名不一致,具体如下: diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.hstack.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.hstack.md index b2a41d312cf..96e3ef5b7e6 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.hstack.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.hstack.md @@ -1,4 +1,4 @@ -## [ 仅参数名不一致 ]torch.hstack +## [ torch 参数更多 ]torch.hstack ### [torch.hstack](https://docs.pytorch.org/docs/stable/generated/torch.hstack.html#torch.hstack) ```python torch.hstack(tensors, *, out=None) @@ -6,13 +6,14 @@ torch.hstack(tensors, *, out=None) ### [paddle.hstack](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/hstack_cn.html#paddle.hstack) ```python -paddle.hstack(x, name=None) +paddle.hstack(x, name=None, *, out=None) ``` -其中 Paddle 相比 PyTorch 仅参数名不一致,具体如下: +PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | ------------- | ------------ | ------------------------------------------------------ | -| tensors | x | 表示输入的 Tensor ,仅参数名不一致。 | +| tensors | x | 表示输入的 Tensor 序列,仅参数名不一致。 | +| out | out | 表示输出的 Tensor。 Paddle 以关键字参数形式提供。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.nn.functional.relu6.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.nn.functional.relu6.md index 8e41a8edc8d..ca6564ec7bb 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.nn.functional.relu6.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.nn.functional.relu6.md @@ -6,7 +6,7 @@ torch.nn.functional.relu6(input, inplace=False) ### [paddle.nn.functional.relu6](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/nn/functional/relu6_cn.html#paddle.nn.functional.relu6) ```python -paddle.nn.functional.relu6(x, name=None) +paddle.nn.functional.relu6(x, inplace=False, name=None) ``` 两者功能一致,仅参数名不一致,具体如下: @@ -15,4 +15,4 @@ paddle.nn.functional.relu6(x, name=None) | PyTorch | PaddlePaddle | 备注 | | ------------- | ------------ | ------------------------------------------------------ | | input | x | 表示输入的 Tensor ,仅参数名不一致。 | -| inplace | - | 表示在不更改变量的内存地址的情况下,直接修改变量的值,Paddle 无此参数,一般对网络训练结果影响不大,可直接删除。 | +| inplace | inplace | 表示在不更改变量的内存地址的情况下,直接修改变量的值,Paddle 已支持此参数。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.vstack.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.vstack.md index 8b2a0143cb3..288d506c535 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.vstack.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/args_name_diff/torch.vstack.md @@ -1,4 +1,4 @@ -## [ 仅参数名不一致 ]torch.vstack +## [ 参数一致 ]torch.vstack ### [torch.vstack](https://docs.pytorch.org/docs/stable/generated/torch.vstack.html#torch.vstack) ```python torch.vstack(tensors, *, out=None) @@ -6,13 +6,14 @@ torch.vstack(tensors, *, out=None) ### [paddle.vstack](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/vstack_cn.html#paddle.vstack) ```python -paddle.vstack(x, name=None) +paddle.vstack(x, name=None, *, out=None) ``` -其中 Paddle 相比 PyTorch 仅参数名不一致,具体如下: +PyTorch 与 Paddle 参数完全一致。 ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | ------------- | ------------ | ------------------------------------------------------ | -| tensors | x | 表示输入的 Tensor ,仅参数名不一致。 | +| tensors | x | 表示输入的 Tensor,仅参数名不一致。Alias: ``tensors``。 | +| out | out | 表示输出的 Tensor,两者均支持。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.H.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.H.md index 9294eb72970..2fc16263cf5 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.H.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.H.md @@ -4,9 +4,12 @@ torch.Tensor.H ``` -Paddle 无此 API,需要组合实现。 -PyTorch 中等于 x.transpose(0, 1).conj(),Paddle 中 transpose 参数 perm 为转换后的维度位置。 -该 API 仅针对 2D。 +### [paddle.Tensor.H]() +```python +paddle.Tensor.H +``` + +两者功能一致,可直接替换使用。 ### 转写示例 ```python @@ -14,5 +17,5 @@ PyTorch 中等于 x.transpose(0, 1).conj(),Paddle 中 transpose 参数 perm y = x.H # Paddle 写法 -y = x.transpose(perm=[1, 0]).conj() +y = x.H ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.addcdiv.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.addcdiv.md index f4521743989..c66c19ad5a8 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.addcdiv.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.addcdiv.md @@ -1,20 +1,24 @@ -## [ 组合替代实现 ]torch.Tensor.addcdiv +## [ 参数一致 ]torch.Tensor.addcdiv ### [torch.Tensor.addcdiv](https://docs.pytorch.org/docs/stable/generated/torch.Tensor.addcdiv.html#torch.Tensor.addcdiv) ```python torch.Tensor.addcdiv(tensor1, tensor2, *, value=1) ``` -用于实现矩阵 `tensor1` 与矩阵 `tensor2` 相除,再加上输入 `input` ,公式为: +### [paddle.Tensor.addcdiv](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor/addcdiv_cn.html#paddle.Tensor.addcdiv) +```python +paddle.Tensor.addcdiv(input, other, *, value=1) +``` + +用于实现矩阵 `tensor1` 与矩阵 `tensor2` 相除,再加上输入 `input`,公式为: $ out = input + value * (tensor1 / tensor2) $ -PaddlePaddle 目前无对应 API,可使用如下代码组合实现该 API。 +PyTorch 与 Paddle 参数完全一致。 -### 转写示例 -```python -# PyTorch 写法 -y = input.addcdiv(tensor1, tensor2, value=value) +### 参数映射 -# Paddle 写法 -y = input + value * tensor1 / tensor2 -``` +| PyTorch | PaddlePaddle | 备注 | +| ------------- | ------------ | ------------------------------------------------------ | +| tensor1 | other | 表示输入的 Tensor。Alias: ``tensor1``。 | +| tensor2 | input | 表示输入的 Tensor。Alias: ``tensor2``。 | +| value | value | 表示乘数因子。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.addcdiv_.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.addcdiv_.md index 8c5d0173cb1..c1bde8e0552 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.addcdiv_.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.addcdiv_.md @@ -1,20 +1,24 @@ -## [ 组合替代实现 ]torch.Tensor.addcdiv_ +## [ 参数一致 ]torch.Tensor.addcdiv_ ### [torch.Tensor.addcdiv\_](https://docs.pytorch.org/docs/stable/generated/torch.Tensor.addcdiv_.html#torch.Tensor.addcdiv_) ```python torch.Tensor.addcdiv_(tensor1, tensor2, *, value=1) ``` +### [paddle.Tensor.addcdiv\_]() +```python +paddle.Tensor.addcdiv_(tensor1, tensor2, *, value=1) +``` + 用于实现矩阵 `tensor1` 与矩阵 `tensor2` 相除,再加上输入 `input` ,公式为: $ out = input + value * (tensor1 / tensor2) $ -PaddlePaddle 目前无对应 API,可使用如下代码组合实现该 API。 +PyTorch 与 Paddle 参数完全一致。 -### 转写示例 -```python -# PyTorch 写法 -input.addcdiv_(tensor1, tensor2, value=value) +### 参数映射 -# Paddle 写法 -input.add_(value * tensor1 / tensor2) -``` +| PyTorch | PaddlePaddle | 备注 | +| ------------- | ------------ | ------------------------------------------------------ | +| tensor1 | tensor1 | 表示输入的 Tensor。 | +| tensor2 | tensor2 | 表示输入的 Tensor。 | +| value | value | 表示乘数因子。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.logdet.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.logdet.md index 4d09453fa32..d379c1eb5db 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.logdet.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.Tensor.logdet.md @@ -3,7 +3,13 @@ ```python torch.Tensor.logdet() ``` -Paddle 无此 API,需要组合实现。 + +### [paddle.Tensor.logdet](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/logdet_cn.html) +```python +paddle.Tensor.logdet() +``` + +两者功能一致,可直接替换使用。 ### 转写示例 ```python @@ -11,5 +17,5 @@ Paddle 无此 API,需要组合实现。 y = input.logdet() # Paddle 写法 -y = paddle.log(paddle.linalg.det(input)) +y = x.logdet() ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.logdet.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.logdet.md index 83922409ec9..7778979fc0f 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.logdet.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.logdet.md @@ -3,7 +3,19 @@ ```python torch.logdet(input) ``` -Paddle 无此 API,需要组合实现。 + +### [paddle.logdet](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/logdet_cn.html) +```python +paddle.logdet(x) +``` + +两者功能一致,可直接替换使用。 + +### 参数映射 + +| PyTorch | PaddlePaddle | 备注 | +| ------- | ------------ | --------------------------------------------------- | +| input | x | 表示输入的 Tensor,仅参数名不一致。 | ### 转写示例 ```python @@ -11,5 +23,5 @@ Paddle 无此 API,需要组合实现。 y = torch.logdet(input) # Paddle 写法 -y = paddle.log(paddle.linalg.det(input)) +y = paddle.logdet(x=input) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.nn.modules.utils._pair.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.nn.modules.utils._pair.md index ba966f0d6b4..8874c9d8ee1 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.nn.modules.utils._pair.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/composite_implement/torch.nn.modules.utils._pair.md @@ -1,10 +1,21 @@ -## [ 组合替代实现 ]torch.nn.modules.utils._pair +## [ 参数一致 ]torch.nn.modules.utils._pair ### [torch.nn.modules.utils._pair](https://github.com/pytorch/pytorch/blob/1f4d4d3b7836d38d936a21665e6b2ab0b39d7092/torch/nn/modules/utils.py#L198) ```python torch.nn.modules.utils._pair(x) ``` -Paddle 无此 API,需要组合实现。 +### [paddle.nn.modules.utils._pair](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/nn/modules/utils/_pair_cn.html#paddle.nn.modules.utils._pair) +```python +paddle.nn.modules.utils._pair(x) +``` + +PyTorch 与 Paddle 功能完全一致,可直接替换使用。 + +### 参数映射 + +| PyTorch | PaddlePaddle | 备注 | +| ------------- | ------------ | ------------------------------------------------------ | +| x | x | 表示输入的值。 | ### 转写示例 ```python @@ -12,14 +23,5 @@ Paddle 无此 API,需要组合实现。 torch.nn.modules.utils._pair(x) # Paddle 写法 -def _ntuple(n, name="parse"): - def parse(x): - if isinstance(x, collections.abc.Iterable): - return tuple(x) - return tuple(repeat(x, n)) - - parse.__name__ = name - return parse - -_ntuple(n=2, name="parse")(x) +paddle.nn.modules.utils._pair(x) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.Tensor.fmod.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.Tensor.fmod.md index 3454e885b10..2ca09cc2654 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.Tensor.fmod.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.Tensor.fmod.md @@ -1,28 +1,37 @@ -## [ 输入参数类型不一致 ]torch.Tensor.fmod +## [ 输入参数类型一致 ]torch.Tensor.fmod ### [torch.Tensor.fmod](https://docs.pytorch.org/docs/stable/generated/torch.Tensor.fmod.html#torch.Tensor.fmod) ```python torch.Tensor.fmod(other) ``` -### [paddle.Tensor.mod](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor__upper_cn.html#mod-y-name-none) +### [paddle.Tensor.fmod](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor_cn.html#fmod) ```python -paddle.Tensor.mod(y, name=None) +paddle.Tensor.fmod(y, name=None) ``` -其中,PyTorch 与 Paddle 的 `other` 参数所支持类型不一致,具体如下: +PyTorch 与 Paddle 的 `other` 参数所支持类型一致,均支持 Tensor 和 Python Number 类型。 ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | ------- | ------------ | ----------------------------- | -| other | y | 多维 Tensor,PyTorch 支持 Tensor 和 Python Number,Paddle 仅支持 Tensor,需要转写。 | +| other | y | 多维 Tensor 或 Python Number,两者均支持。 | ### 转写示例 -#### other +#### other 为 Tensor +```python +# PyTorch 写法 +result = x.fmod(other=y) + +# Paddle 写法 +result = x.fmod(y=y) +``` + +#### other 为标量 ```python # PyTorch 写法 result = x.fmod(other=2.) # Paddle 写法 -result = x.mod(y=paddle.to_tensor(2.)) +result = x.fmod(y=2.) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.Tensor.fmod_.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.Tensor.fmod_.md index b5d45590ccb..338745e88c2 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.Tensor.fmod_.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.Tensor.fmod_.md @@ -1,28 +1,37 @@ -## [ 输入参数类型不一致 ]torch.Tensor.fmod_ +## [ 输入参数类型一致 ]torch.Tensor.fmod_ ### [torch.Tensor.fmod\_](https://docs.pytorch.org/docs/stable/generated/torch.Tensor.fmod_.html#torch.Tensor.fmod_) ```python torch.Tensor.fmod_(other) ``` -### [paddle.Tensor.mod_]() +### [paddle.Tensor.fmod\_](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor_cn.html#fmod) ```python -paddle.Tensor.mod_(y, name=None) +paddle.Tensor.fmod_(y, name=None) ``` -其中,PyTorch 与 Paddle 的 `other` 参数所支持类型不一致,具体如下: +PyTorch 与 Paddle 的 `other` 参数所支持类型一致,均支持 Tensor 和 Python Number 类型。 ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | ------- | ------------ | ----------------------------- | -| other | y | 多维 Tensor,PyTorch 支持 Tensor 和 Python Number,Paddle 仅支持 Tensor,需要转写。 | +| other | y | 多维 Tensor 或 Python Number,两者均支持。 | ### 转写示例 -#### other +#### other 为 Tensor +```python +# PyTorch 写法 +x.fmod_(other=y) + +# Paddle 写法 +x.fmod_(y=y) +``` + +#### other 为标量 ```python # PyTorch 写法 x.fmod_(other=2.) # Paddle 写法 -x.mod_(y=paddle.to_tensor(2.)) +x.fmod_(y=2.) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.set_default_device.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.set_default_device.md index 6ad5ad0654b..2c17a0ce22a 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.set_default_device.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_type_diff/torch.set_default_device.md @@ -1,40 +1,18 @@ -## [ 输入参数类型不一致 ]torch.set_default_device +## [ 参数一致 ]torch.set_default_device ### [torch.set\_default\_device](https://docs.pytorch.org/docs/stable/generated/torch.set_default_device.html#torch.set_default_device) ```python torch.set_default_device(device) ``` -### [paddle.device.set\_device](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/device/set_device_cn.html#paddle.device.set_device) +### [paddle.device.set\_default\_device](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/device/set_default_device_cn.html#paddle.device.set_default_device) ```python -paddle.device.set_device(device) +paddle.device.set_default_device(device=None) ``` -功能一致,参数类型不一致,具体如下: +PyTorch 与 Paddle 参数完全一致,Paddle 已通过装饰器支持 `torch.device` 对象的自动转换。 + ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | ------------- | ------------ |------------------------------------------------| -| device | device | PyTorch 支持 torch.device 。PaddlePaddle 支持 str。需要转写。 | - - -### 转写示例 -#### device: 特定的运行设备 -```python -# PyTorch 写法 -torch.set_default_device('cuda:0') - -# Paddle 写法 -paddle.device.set_device('gpu:0') - -# PyTorch 写法 -torch.set_default_device(2) - -# Paddle 写法 -paddle.device.set_device('gpu:2') - -# PyTorch 写法 -torch.set_default_device("cpu") - -# Paddle 写法 -paddle.device.set_device("cpu") -``` +| device | device | 表示运行的设备。PyTorch 支持 torch.device 对象、str、int、None。Paddle 支持 str、Place、int、None,同时通过装饰器支持 torch.device 对象的自动转换。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_usage_diff/torch.nn.functional.batch_norm.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_usage_diff/torch.nn.functional.batch_norm.md index 8106bdfe63e..eb76d0beb95 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_usage_diff/torch.nn.functional.batch_norm.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/input_args_usage_diff/torch.nn.functional.batch_norm.md @@ -1,4 +1,7 @@ ## [ 输入参数用法不一致 ]torch.nn.functional.batch_norm + +备注:Paddle 已通过参数别名机制完整支持 PyTorch 的调用风格,以下仅为记录。 + ### [torch.nn.functional.batch\_norm](https://docs.pytorch.org/docs/stable/generated/torch.nn.functional.batch_norm.html#torch.nn.functional.batch_norm) ```python torch.nn.functional.batch_norm(input, running_mean, running_var, weight=None, bias=None, training=False, momentum=0.1, eps=1e-05) @@ -6,7 +9,7 @@ torch.nn.functional.batch_norm(input, running_mean, running_var, weight=None, bi ### [paddle.nn.functional.batch\_norm](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/nn/functional/batch_norm_cn.html#paddle.nn.functional.batch_norm) ```python -paddle.nn.functional.batch_norm(x, running_mean, running_var, weight, bias, training=False, momentum=0.9, epsilon=1e-05, data_format='NCHW', name=None) +paddle.nn.functional.batch_norm(x, running_mean, running_var, weight=None, bias=None, training=False, momentum=0.9, epsilon=1e-05, data_format='NCHW', use_global_stats=None, name=None) ``` 其中 PyTorch 与 Paddle 参数不一致,具体如下: @@ -14,23 +17,25 @@ paddle.nn.functional.batch_norm(x, running_mean, running_var, weight, bias, trai | PyTorch | PaddlePaddle | 备注 | | ------------- | ------------ | ------------------------------------------------------ | -| input | x | 表示输入的 Tensor ,仅参数名不一致。 | +| input | x | 表示输入的 Tensor ,仅参数名不一致。Paddle 同时支持 ``input`` 作为 ``x`` 的别名。 | | running_mean | running_mean | 均值的 Tensor。 | | running_var | running_var | 方差的 Tensor。 | | weight | weight | 权重的 Tensor。 | | bias | bias | 偏置的 Tensor。 | | training | training | 是否可训练。 | -| momentum | momentum | 此值用于计算 moving_mean 和 moving_var, 值的大小 Paddle = 1 - PyTorch,需要转写。 | -| eps | epsilon | 为了数值稳定加在分母上的值。 | +| momentum | momentum | 此值用于计算 moving_mean 和 moving_var, 值的大小 Paddle = 1 - PyTorch,需要转写。使用 PyTorch 风格调用时(即同时使用 ``input`` 或 ``eps`` 等参数),``momentum`` 会自动转换。 | +| eps | epsilon | 为了数值稳定加在分母上的值。Paddle 同时支持 ``eps`` 作为 ``epsilon`` 的别名。 | | - | data_format | 指定输入数据格式,PyTorch 无此参数,Paddle 保持默认即可。 | +| - | use_global_stats | 指示是否使用全局均值和方差,PyTorch 无此参数,Paddle 保持默认即可。 | ### 转写示例 #### momentum:此值用于计算 moving_mean 和 moving_var +Paddle 支持 PyTorch 风格的调用方式,可直接使用 ``input``、``eps`` 参数名,并支持 ``momentum`` 自动转换: ```python # PyTorch 写法 torch.nn.functional.batch_norm(input=input, running_mean=running_mean, running_var=running_var, momentum=0.1) -# Paddle 写法 -paddle.nn.functional.batch_norm(x=input, running_mean=running_mean, running_var=running_var, momentum=0.9) +# Paddle 等价写法(直接使用 PyTorch 风格的参数名) +paddle.nn.functional.batch_norm(input=input, running_mean=running_mean, running_var=running_var, momentum=0.1) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.Tensor.imag.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.Tensor.imag.md index b62c103f114..76451682258 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.Tensor.imag.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.Tensor.imag.md @@ -1,4 +1,4 @@ -## [ 仅 API 调用方式不一致 ]torch.Tensor.imag +## [ API 完全一致 ]torch.Tensor.imag ### [torch.Tensor.imag](https://docs.pytorch.org/docs/stable/generated/torch.Tensor.imag.html#torch.Tensor.imag) @@ -9,10 +9,10 @@ torch.Tensor.imag ### [paddle.Tensor.imag](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor__upper_cn.html#imag-name-none) ```python -paddle.Tensor.imag(name=None) +paddle.Tensor.imag ``` -两者功能一致,但调用方式不一致,具体如下: +两者功能一致,调用方式完全一致,无需转写。 ### 转写示例 @@ -21,5 +21,5 @@ paddle.Tensor.imag(name=None) result = src.imag # Paddle 写法 -result = src.imag() +result = src.imag ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.Tensor.real.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.Tensor.real.md index 63075a4e2d7..d6f3c036a42 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.Tensor.real.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.Tensor.real.md @@ -1,4 +1,4 @@ -## [ 仅 API 调用方式不一致 ]torch.Tensor.real +## [ API 完全一致 ]torch.Tensor.real ### [torch.Tensor.real](https://docs.pytorch.org/docs/stable/generated/torch.Tensor.real.html#torch.Tensor.real) @@ -9,10 +9,10 @@ torch.Tensor.real ### [paddle.Tensor.real](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor__upper_cn.html#real-name-none) ```python -paddle.Tensor.real(name=None) +paddle.Tensor.real ``` -两者功能一致,但调用方式不一致,具体如下: +两者功能一致,调用方式完全一致,无需转写。 ### 转写示例 @@ -21,5 +21,5 @@ paddle.Tensor.real(name=None) result = src.real # Paddle 写法 -result = src.real() +result = src.real ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.autograd.grad_mode.set_grad_enabled.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.autograd.grad_mode.set_grad_enabled.md index 7fdd71c350b..90595ceb12e 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.autograd.grad_mode.set_grad_enabled.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/invok_only_diff/torch.autograd.grad_mode.set_grad_enabled.md @@ -1,4 +1,4 @@ -## [ 仅 API 调用方式不一致 ]torch.autograd.grad_mode.set_grad_enabled +## [ 参数一致 ]torch.autograd.grad_mode.set_grad_enabled ### [torch.autograd.grad\_mode.set\_grad\_enabled](https://docs.pytorch.org/docs/stable/generated/torch.autograd.grad_mode.set_grad_enabled.html#torch.autograd.grad_mode.set_grad_enabled) @@ -6,22 +6,16 @@ torch.autograd.grad_mode.set_grad_enabled(mode) ``` -### [paddle.set\_grad\_enabled](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/set_grad_enabled_cn.html#paddle.set_grad_enabled) +### [paddle.autograd.set\_grad\_enabled](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/set_grad_enabled_cn.html#paddle.set_grad_enabled) ```python -paddle.set_grad_enabled(mode) +paddle.autograd.set_grad_enabled(mode) ``` -两者功能一致,但调用方式不一致,具体如下: +两者功能完全一致,Paddle 支持通过 `paddle.autograd.set_grad_enabled` 直接调用。 -### 转写示例 +### 参数映射 -```python -# PyTorch 写法 -with torch.autograd.grad_mode.set_grad_enabled(is_train): - y = x * 2 - -# Paddle 写法 -with paddle.set_grad_enabled(is_train): - y = x * 2 -``` +| PyTorch | PaddlePaddle | 备注 | +| ------------- | ------------ | ------------------------------------------------------ | +| mode | mode | 表示是否启用梯度。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/output_args_type_diff/torch.Tensor.gt_.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/output_args_type_diff/torch.Tensor.gt_.md index e60e4f337ba..339b194f121 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/output_args_type_diff/torch.Tensor.gt_.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/output_args_type_diff/torch.Tensor.gt_.md @@ -4,9 +4,9 @@ torch.Tensor.gt_(other) ``` -### [paddle.Tensor.greater_than_]() +### [paddle.Tensor.gt\_]() ```python -paddle.Tensor.greater_than_(y) +paddle.Tensor.gt_(y) ``` 返回 Tensor 的数据类型不一致,PyTorch 返回数据类型与输入 Tensor 一致, Paddle 返回 paddle.bool 类型。 @@ -24,5 +24,5 @@ result = x.gt_(2) # Paddle 写法 dtype = x.dtype -result = x.greater_than_(paddle.to_tensor(2)).cast_(dtype) +result = x.gt_(paddle.to_tensor(2)).cast_(dtype) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/output_args_type_diff/torch.histc.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/output_args_type_diff/torch.histc.md index dec4c88be69..986b6eddaa4 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/output_args_type_diff/torch.histc.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/output_args_type_diff/torch.histc.md @@ -1,33 +1,12 @@ -## [ 返回参数类型不一致 ]torch.histc +## [ API 完全一致 ]torch.histc ### [torch.histc](https://docs.pytorch.org/docs/stable/generated/torch.histc.html#torch.histc) ```python torch.histc(input, bins=100, min=0, max=0, *, out=None) ``` -### [paddle.histogram](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/histogram_cn.html#paddle.histogram) +### [paddle.histc](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/histc_cn.html#paddle.histc) ```python -paddle.histogram(input, bins=100, min=0, max=0, name=None) +paddle.histc(input, bins=100, min=0, max=0, name=None, *, out=None) ``` -其中 PyTorch 与 Paddle 的返回值类型不一致,具体如下: - -### 参数映射 - -| PyTorch | PaddlePaddle | 备注 | -| ------- | ------------ | --------------------------------------------------- | -| input | input | 表示输入的 Tensor。 | -| bins | bins | 表示直方图直条的个数。 | -| min | min | 表示范围的下边界。 | -| max | max | 表示范围的上边界。 | -| out | - | 表示输出的 Tensor,Paddle 无此参数,需要转写。 | -| 返回值 | 返回值 | 表示返回值,PyTorch 的返回值类型为 float32,Paddle 的返回值类型为 int64 , 需要转写。 | - -### 转写示例 -#### out:指定输出、返回值类型转换 -```python -# PyTorch 写法 -torch.histc(x, out=y) - -# Paddle 写法 -paddle.assign(paddle.histogram(x).astype('float32'), y) -``` +两者功能一致,参数基本一致,可直接替换使用。 diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.Tensor.new_tensor.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.Tensor.new_tensor.md index 8b422954e5a..0f10fa880a4 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.Tensor.new_tensor.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.Tensor.new_tensor.md @@ -1,40 +1,21 @@ -## [ torch 参数更多 ]torch.Tensor.new_tensor +## [ 参数一致 ]torch.Tensor.new_tensor ### [torch.Tensor.new\_tensor](https://docs.pytorch.org/docs/stable/generated/torch.Tensor.new_tensor.html#torch.Tensor.new_tensor) ```python torch.Tensor.new_tensor(data, *, dtype=None, device=None, requires_grad=False) ``` -### [paddle.to\_tensor](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/to_tensor_cn.html#paddle.to_tensor) +### [paddle.Tensor.new\_tensor](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor/new_tensor_cn.html#paddle.Tensor.new_tensor) ```python -paddle.to_tensor(data, dtype=None, place=None, stop_gradient=True) +paddle.Tensor.new_tensor(data, dtype=None, device=None, stop_gradient=True) ``` -PyTorch 相比 Paddle 支持更多其他参数,具体如下: +PyTorch 与 Paddle 参数完全一致。 ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | ------------- | ------------ | ------------------------------------------------------------ | | data | data | 数据内容。 | -| dtype | dtype | 表示输出 Tensor 类型,如果没有指定,默认使用当前对象的 dtype,需要转写。 | -| device | place | 创建 tensor 的设备位置,仅参数名不一致。 | -| requires_grad | stop_gradient | 表示是否计算梯度,两者参数功能相反,需要转写。 | - -### 转写示例 -#### dtype:数据类型 -```python -# PyTorch 写法 -y = x.new_tensor(data) - -# Paddle 写法 -y = paddle.to_tensor(data, dtype=x.dtype) -``` - -#### requires_grad:是否求梯度 -```python -# PyTorch 写法 -y = x.new_tensor(data, requires_grad=True) - -# Paddle 写法 -y = paddle.to_tensor(data, stop_gradient=False) -``` +| dtype | dtype | 表示输出 Tensor 类型,如果没有指定,默认使用当前对象的 dtype。 | +| device | device | 创建 tensor 的设备位置。 | +| requires_grad | stop_gradient | 表示是否计算梯度,两者参数功能相反,Paddle 支持通过装饰器自动转换。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.clamp_max.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.clamp_max.md index fbd64e23ec6..29e9668204a 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.clamp_max.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.clamp_max.md @@ -13,19 +13,20 @@ torch.clamp_max(input, paddle.clip(x, min=None, max=None, - name=None) + name=None, + *, + out=None) ``` -PyTorch 相比 Paddle 支持更多其他参数,具体如下: +两者功能一致,但 PyTorch 和 Paddle 的参数存在差异,具体如下: + ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | ------------- | ------------ | ------------------------------------------------------ | | input | x | 表示输入的 Tensor ,仅参数名不一致。 | -| - | min | 表示裁剪的最小值。PyTorch 无此参数, Paddle 保持默认即可。 | | max | max | 表示裁剪的最大值。 | -| out | - | 表示输出的 Tensor , Paddle 无此参数,需要转写。 | - +| out | out | 表示输出的 Tensor。 | ### 转写示例 #### out:指定输出 @@ -34,5 +35,5 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: torch.clamp_max(input, max=0.5, out=y) # Paddle 写法 -paddle.assign(paddle.clip(input, max=0.5), y) +paddle.clip(x=input, max=0.5, out=y) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.fmod.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.fmod.md index c63c2d13d3d..1301a2067bf 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.fmod.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.fmod.md @@ -1,4 +1,4 @@ -## [ torch 参数更多 ]torch.fmod +## [ 参数一致 ]torch.fmod ### [torch.fmod](https://docs.pytorch.org/docs/stable/generated/torch.fmod.html#torch.fmod) ```python torch.fmod(input, @@ -7,29 +7,40 @@ torch.fmod(input, out=None) ``` -### [paddle.mod](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/mod_cn.html#paddle.mod) +### [paddle.fmod](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/fmod_cn.html#paddle.fmod) ```python -paddle.mod(x, +paddle.fmod(x, y, - name=None) + name=None, + *, + out=None) ``` -PyTorch 相比 Paddle 支持更多其他参数,具体如下: +PyTorch 与 Paddle 参数完全一致,均支持 Tensor 和 Python Number 类型的输入。 + ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | ------------- | ------------ | ------------------------------------------------------ | -| input | x | 表示输入的被除数 ,仅参数名不一致。 | -| other | y | 表示输入的除数, PyTorch 可以为 Tensor 或 scalar,Paddle 只能为 Tensor 。 | -| out | - | 表示输出的 Tensor , Paddle 无此参数,需要转写。 | - +| input | x | 表示输入的被除数,仅参数名不一致。 | +| other | y | 表示输入的除数,两者均支持 Tensor 和 scalar 类型。 | +| out | out | 表示输出的 Tensor,两者均支持。 | ### 转写示例 -#### out:指定输出 +#### 参数名差异 +```python +# PyTorch 写法 +result = torch.fmod(input=x, other=y) + +# Paddle 写法 +result = paddle.fmod(x=x, y=y) +``` + +#### out 参数 ```python # PyTorch 写法 -torch.fmod([3, 5], [1, 2], out=y) +torch.fmod(x, y, out=output) # Paddle 写法 -paddle.assign(paddle.mod([3, 5], [1, 2]), y) +paddle.fmod(x, y, out=output) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.cholesky.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.cholesky.md index f31da904b59..5f6bc4f1281 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.cholesky.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.cholesky.md @@ -6,7 +6,7 @@ torch.linalg.cholesky(input, *, upper=False, out=None) ### [paddle.linalg.cholesky](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/linalg/cholesky_cn.html#paddle.linalg.cholesky) ```python -paddle.linalg.cholesky(x, upper=False, name=None) +paddle.linalg.cholesky(x, upper=False, name=None, *, out=None) ``` PyTorch 相比 Paddle 支持更多其他参数,具体如下: @@ -17,7 +17,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: | ------- | ------- | ------- | | input | x | 表示输入参数为多维 Tensor,它的维度应该为 [*, M, N],其中*为零或更大的批次尺寸,并且最里面的两个维度上的矩阵都应为对称的正定矩阵,仅参数名不一致。 | | upper | upper | 表示是否返回上三角矩阵或下三角矩阵。 | -| out | - | 表示输出的 Tensor ,Paddle 无此参数,需要转写。 | +| out | out | 表示输出的 Tensor,Paddle 已支持该参数。 | ### 转写示例 #### out: 输出的 Tensor @@ -25,7 +25,6 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: # PyTorch 写法 torch.linalg.cholesky(x, upper=False, out=output) - # Paddle 写法 -paddle.assign(paddle.linalg.cholesky(x, upper=False),output) +paddle.linalg.cholesky(x, upper=False, out=output) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.cross.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.cross.md index 1951b76f63f..4e3620949a4 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.cross.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.cross.md @@ -6,7 +6,7 @@ torch.linalg.cross(input, other, *, dim=- 1, out=None) ### [paddle.cross](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/cross_cn.html#paddle.cross) ```python -paddle.cross(x, y, axis=None, name=None) +paddle.cross(x, y, axis=None, name=None, *, out=None) ``` PyTorch 相比 Paddle 支持更多其他参数,具体如下: @@ -18,7 +18,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: | input | x | 表示输入的 Tensor ,仅参数名不一致。 | | other | y | 表示输入的 Tensor ,仅参数名不一致。 | | dim | axis | 表示进行运算的维度,参数默认值不一致。PyTorch 默认为`-1`,Paddle 默认为 `None`。 | -| out | - | 表示输出的 Tensor , Paddle 无此参数,需要转写。 | +| out | out | 表示输出的 Tensor,Paddle 已支持该参数。 | ### 转写示例 #### out:指定输出 @@ -27,5 +27,5 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: torch.linalg.cross(input, other, dim=1, out=y) # Paddle 写法 -paddle.assign(paddle.cross(input, other, axis=1) , y) +paddle.cross(input, other, axis=1, out=y) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.det.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.det.md index 05f4c370da0..549c26caba5 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.det.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.det.md @@ -1,4 +1,4 @@ -## [ torch 参数更多 ]torch.linalg.det +## [ 参数一致 ]torch.linalg.det ### [torch.linalg.det](https://docs.pytorch.org/docs/stable/generated/torch.linalg.det.html#torch.linalg.det) ```python torch.linalg.det(A, *, out=None) @@ -6,23 +6,14 @@ torch.linalg.det(A, *, out=None) ### [paddle.linalg.det](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/linalg/det_cn.html#paddle.linalg.det) ```python -paddle.linalg.det(x) +paddle.linalg.det(x, name=None, *, out=None) ``` -torch 参数更多,具体如下: +PyTorch 与 Paddle 参数完全一致。 + ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | ------------- | ------------ | ------------------------------------------------------ | -| A | x | 表示输入的 Tensor ,仅参数名不一致。 | -| out | - | 表示输出 Tensor, Paddle 无此参数,需要转写。 | - -### 转写示例 -#### out:指定输出 -```python -# PyTorch 写法 -torch.linalg.det(x, out=y) - -# Paddle 写法 -paddle.assign(paddle.linalg.det(x), y) -``` +| A | x | 表示输入的 Tensor,仅参数名不一致。Alias: ``input``, ``A``。 | +| out | out | 表示输出的 Tensor,两者均支持。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.eigh.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.eigh.md index ba6b567831e..41c3ebb4a8d 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.eigh.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.eigh.md @@ -6,7 +6,7 @@ torch.linalg.eigh(input, UPLO='L', *, out=None) ### [paddle.linalg.eigh](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/linalg/eigh_cn.html#paddle.linalg.eigh) ```python -paddle.linalg.eigh(x, UPLO='L', name=None) +paddle.linalg.eigh(x, UPLO='L', name=None, *, out=None) ``` PyTorch 相比 Paddle 支持更多其他参数,具体如下: @@ -17,7 +17,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: | ------- | ------------ | ------------------------------------------------ | | input | x | 输入 Tensor,仅参数名不一致。 | | UPLO | UPLO | 表示计算上三角或者下三角矩阵。 | -| out | - | 表示输出的 Tensor , Paddle 无此参数,需要转写。 | +| out | out | 表示输出的 Tensor,Paddle 已支持该参数。 | ### 转写示例 #### out 参数:输出的 Tensor @@ -26,5 +26,5 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: torch.linalg.eigh(x, out=y) # Paddle 写法: -paddle.assign(paddle.linalg.eigh(x), y) +paddle.linalg.eigh(x, out=y) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.qr.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.qr.md index 33f52bec59e..70e79f5645a 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.qr.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.linalg.qr.md @@ -6,7 +6,7 @@ torch.linalg.qr(A, mode='reduced', *, out=None) ### [paddle.linalg.qr](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/linalg/qr_cn.html#paddle.linalg.qr) ```python -paddle.linalg.qr(x, mode='reduced', name=None) +paddle.linalg.qr(x, mode='reduced', name=None, *, some=None, out=None) ``` PyTorch 相比 Paddle 支持更多其他参数,具体如下: @@ -17,8 +17,8 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: | ------- | ------------ | -------------------------------------------------- | | A | x | 输入 Tensor,仅参数名不一致。 | | mode | mode | 控制正交三角分解的行为。 | -| out | - | 表示输出的 Tensor,Paddle 无此参数,需要转写。 | - +| out | out | 表示输出的 Tensor 元组,Paddle 已支持该参数。 | +-> ### 转写示例 #### out 参数:输出的 Tensor ```python @@ -26,5 +26,5 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: torch.linalg.qr(x, out=y) # Paddle 写法: -paddle.assign(paddle.linalg.qr(x), y) +paddle.linalg.qr(x, out=y) ``` diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.ELU.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.ELU.md index 6b2cbe52706..039c3303cd7 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.ELU.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.ELU.md @@ -8,6 +8,7 @@ torch.nn.ELU(alpha=1.0, ### [paddle.nn.ELU](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/nn/ELU_cn.html#paddle.nn.ELU) ```python paddle.nn.ELU(alpha=1.0, + inplace=False, name=None) ``` @@ -17,4 +18,4 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: | PyTorch | PaddlePaddle | 备注 | | ------------- | ------------ | ------------------------------------------------------ | | alpha | alpha | 表示公式中的超参数。 | -| inplace | - | 在不更改变量的内存地址的情况下,直接修改变量的值,Paddle 无此参数,一般对网络训练结果影响不大,可直接删除。 | +| inplace | inplace | 在不更改变量的内存地址的情况下,直接修改变量的值,Paddle 已支持此参数。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.elu.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.elu.md index 53db8503b7d..3ca7193f9f5 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.elu.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.elu.md @@ -6,7 +6,7 @@ torch.nn.functional.elu(input, alpha=1.0, inplace=False) ### [paddle.nn.functional.elu](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/nn/functional/elu_cn.html#paddle.nn.functional.elu) ```python -paddle.nn.functional.elu(x, alpha=1.0, name=None) +paddle.nn.functional.elu(x, alpha=1.0, inplace=False, name=None) ``` PyTorch 相比 Paddle 支持更多其他参数,具体如下: @@ -17,4 +17,4 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: | ------- | ------------ | --------------------------------------------------------------------------------------------------------------- | | input | x | 输入的 Tensor,仅参数名不一致。 | | alpha | alpha | alpha 参数。 | -| inplace | - | 表示在不更改变量的内存地址的情况下,直接修改变量的值,Paddle 无此参数,一般对网络训练结果影响不大,可直接删除。 | +| inplace | inplace | 表示在不更改变量的内存地址的情况下,直接修改变量的值,Paddle 已支持该参数。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.gumbel_softmax.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.gumbel_softmax.md index c56e86f5e71..5a39d97878c 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.gumbel_softmax.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.gumbel_softmax.md @@ -1,4 +1,4 @@ -## [ torch 参数更多 ]torch.nn.functional.gumbel_softmax +## [ 参数一致 ]torch.nn.functional.gumbel_softmax ### [torch.nn.functional.gumbel\_softmax](https://docs.pytorch.org/docs/stable/generated/torch.nn.functional.gumbel_softmax.html#torch.nn.functional.gumbel_softmax) ```python torch.nn.functional.gumbel_softmax(logits, tau=1, hard=False, eps=1e-10, dim=- 1) @@ -9,14 +9,14 @@ torch.nn.functional.gumbel_softmax(logits, tau=1, hard=False, eps=1e-10, dim=- 1 paddle.nn.functional.gumbel_softmax(x, temperature=1.0, hard=False, axis=- 1, name=None) ``` -PyTorch 相比 Paddle 支持更多其他参数,具体如下: +Paddle 通过参数别名机制完整支持 PyTorch 的调用风格,以下仅为记录。 ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | ------- | ------------ | ------------------------------------------------------------------------------------------------- | -| logits | x | 一个 N-D Tensor,前 N-1 维用于独立分布 batch 的索引,最后一维表示每个类别的概率,仅参数名不一致。 | -| tau | temperature | 大于 0 的标量,仅参数名不一致。 | +| logits | x | 一个 N-D Tensor,前 N-1 维用于独立分布 batch 的索引,最后一维表示每个类别的概率,仅参数名不一致。Alias: ``logits``。 | +| tau | temperature | 大于 0 的标量,仅参数名不一致。Alias: ``tau``。 | | hard | hard | 如果是 True,返回离散的 one-hot 向量。如果是 False,返回软样本。 | | eps | - | eps 参数,PyTorch 已废弃不会生效,Paddle 无此参数,对网络无影响,可直接删除。 | -| dim | axis | 按照维度 axis 计算 softmax,仅参数名不一致。 | +| dim | axis | 按照维度 axis 计算 softmax,仅参数名不一致。Alias: ``dim``。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.qr.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.qr.md index a7d5f2b5ba5..20fc68d0d60 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.qr.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.qr.md @@ -6,34 +6,29 @@ torch.qr(input, some=True, *, out=None) ### [paddle.linalg.qr](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/linalg/qr_cn.html#paddle.linalg.qr) ```python -paddle.linalg.qr(x, mode='reduced', name=None) +paddle.linalg.qr(x, mode='reduced', name=None, *, some=None, out=None) ``` -PyTorch 相比 Paddle 支持更多其他参数,具体如下: +两者功能一致,但 PyTorch 和 Paddle 的参数存在差异,具体如下: ### 参数映射 | PyTorch | PaddlePaddle | 备注 | | ------------- | ------------ | ------------------------------------------------------ | | input | x | 表示输入 Tensor,仅参数名不一致。 | -| some | mode | 表示 QR 分解的行为。 需进行转写。 | -| out | - | 表示输出的 Tensor 元组。 Paddle 无此参数,需要转写。 | +| some | mode | 表示 QR 分解的行为。 Paddle 同时支持 ``some`` 和 ``mode`` 参数,两者等价,选择其一即可。 | +| out | out | 表示输出的 Tensor 元组,Paddle 以关键字参数形式提供,支持 ``out`` 参数(``mode='r'`` 时除外)。 | ### 转写示例 #### some:控制 QR 分解的行为 ```python -# 当进行完整的 QR 分解时 -# PyTorch 写法 -q, r = torch.qr(x, some=False) - -# Paddle 写法 -q, r = paddle.linalg.qr(x, mode='complete') - -#当进行减少的 QR 分解时 # PyTorch 写法 q, r = torch.qr(x, some=True) # Paddle 写法 +q, r = paddle.linalg.qr(x, some=True) + +# 也可使用 mode 参数 q, r = paddle.linalg.qr(x, mode='reduced') ``` @@ -43,5 +38,5 @@ q, r = paddle.linalg.qr(x, mode='reduced') torch.qr(x, out = (q, r) ) # Paddle 写法 -q, r = paddle.linalg.qr(x) +paddle.linalg.qr(x, out=(q, r)) ```