一键导入
add-new-api
负责《Paddle API 对齐 PyTorch 项目》中 Step2 代码修改,实施『新增 API』方案。通过新增 Paddle API(新增 API 别名、新增 Python 层 API、新增 C++算子),覆盖 Pytorch API 调用路径,实现与 PyTorch API 行为对齐。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
负责《Paddle API 对齐 PyTorch 项目》中 Step2 代码修改,实施『新增 API』方案。通过新增 Paddle API(新增 API 别名、新增 Python 层 API、新增 C++算子),覆盖 Pytorch API 调用路径,实现与 PyTorch API 行为对齐。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
负责《Paddle API 对齐 PyTorch 项目》中 Step2 代码修改,实施『C++下沉』方案。通过将 Python API 下沉至 C++层,可以减少 Python 装饰器带来的性能开销,提升 API 调度效率。
负责《Paddle API 对齐 PyTorch 项目》中 Step5 更新文档,在 API 代码修改完成后,同步更新中文 API 文档,确保文档准确反映 API 的最新行为
负责《Paddle API 对齐 PyTorch 项目》中 Step2 代码修改,实施『新增 compat 类型 API』方案。在 `paddle.compat` 命名空间下新增 API,实现与 PyTorch API 行为对齐。
开展《Paddle API 对齐 PyTorch 项目》,负责项目整体统筹规划,调用多个 skill,完成输入的 API 对齐
负责《Paddle API 对齐 PyTorch 项目》中 Step3 兼容测试,为已修改的 Paddle API 添加兼容性单测并执行验证,确保 API 的 Paddle 用法与 PyTorch 用法均能正常工作。
负责《Paddle API 对齐 PyTorch 项目》中代码提交,分别对 Paddle、PaConvert、Docs 三个仓库创建或更新 Pull Request
| name | add-new-api |
| description | 负责《Paddle API 对齐 PyTorch 项目》中 Step2 代码修改,实施『新增 API』方案。通过新增 Paddle API(新增 API 别名、新增 Python 层 API、新增 C++算子),覆盖 Pytorch API 调用路径,实现与 PyTorch API 行为对齐。 |
| context | fork |
| disable-model-invocation | false |
根据 API 的性质,将新增场景分为三种模式:
场景一:新增 API 别名
场景二:新增 Python 层 API
场景三:新增 C++ 算子
根据实际需求,选择场景一、场景二或场景三执行。所有场景完成后,统一执行新增 API 英文文档和编译运行测试。
新增的 API 别名应统一在 __init__.py 中定义,便于统一管理,避免分散在各个实现文件中,与现有别名管理保持一致(位于 Paddle/python/paddle/init.py、Paddle/python/paddle/tensor/init.py、Paddle/python/paddle/nn/functional/init.py、Paddle/python/paddle/nn/init.py 等文件中)。
适用条件:目标 PyTorch API 与某个已有 Paddle API 功能完全一致,仅名称不同。
典型示例:paddle.ne(对齐 torch.ne)、paddle.cat(对齐 torch.cat)、paddle.nn.SiLU(对齐 torch.nn.SiLU)
请严格按以下步骤依次执行:
找到原始 API 的实现位置(如 python/paddle/tensor/math.py),在文件末尾添加别名赋值:
# python/paddle/tensor/math.py 末尾
ne = not_equal
lt = less_than
less = less_than
le = less_equal
greater = gt
ge = greater_equal
若属于 paddle.nn 命名空间(如 SiLU = Silu),则在对应的 nn/init.py 中添加:
# python/paddle/nn/__init__.py
SiLU = Silu
在顶层 python/paddle/init.py 的对应 from paddle.tensor import (...) 块内,按字母序插入新别名:
# python/paddle/__init__.py
from paddle.tensor import (
...
ge,
greater,
le,
less,
lt,
ne,
...
)
若需要以 paddle.Tensor.xxx 形式调用(对齐 torch.Tensor.xxx),在 python/paddle/tensor/init.py 中同步处理:
# python/paddle/tensor/__init__.py
# 1. 在 tensor_method_func 列表中按字母序添加方法名
tensor_method_func = [
...
'ne',
'lt',
'less',
...
]
# 2. 在文件末尾与模块导出一起声明别名(作为 Tensor 方法注入来源)
ne = not_equal
lt = less_than
Paddle 通过 patch 机制将 paddle.tensor 模块中的函数动态 setattr 到 paddle.Tensor,因此只需在此处声明即可自动注入为 Tensor 方法,无需修改 class Tensor 定义。
适用条件:需要对齐类的方法或属性,根据已有实现与目标形式的性质差异,分为三种情况处理。
当已有实现与目标形式性质相同时(都是方法或都是属性),直接使用别名赋值即可。
Layer 类示例(方法 → 方法):
# python/paddle/nn/layer/layers.py
class Layer:
def get_sublayer(self, target: str) -> Layer:
# original implementation
...
def set_sublayer(self, target: str, layer: Layer) -> None:
# original implementation
...
# 在类末尾添加别名(对齐 PyTorch 的 get_submodule/set_submodule)
get_submodule = get_sublayer
set_submodule = set_sublayer
Tensor 方法示例(以 bar 对齐 torch.Tensor.bar 为例):
假设已有方法 original_bar,需在注入列表中直接注册别名:
# python/paddle/base/dygraph/math_op_patch.py
# 在注入列表中直接注册(方法→方法,无需额外实现)
(
'bar', # 新 API 名称
original_bar, # 指向已有方法
),
当已有实现是方法(需调用),目标形式是属性(直接访问)时,需使用 @property 装饰器包装原有方法。
简单示例:
class PyLayerContext:
def saved_tensor(self):
...
@property
def saved_tensors(self):
return self.saved_tensor()
Tensor 属性示例:
假设已有方法 rank() 需调用,现改为属性 ndims 直接访问:
# python/paddle/base/dygraph/math_op_patch.py
@property
def ndims(var: Tensor) -> int:
return var.rank()
然后在注入列表中注册为元组形式(属性用元组):
(
'ndims',
ndims,
),
这样 tensor.ndims 可直接访问,无需括号调用。
当已有实现是属性(直接访问),目标形式是方法(需调用)时,需定义新方法返回属性值。
简单示例:
class Layer:
@property
def parameters(self):
...
def get_parameters(self): # 新增方法形式
return list(self.parameters)
Tensor 方法示例:
假设已有属性 dims 直接访问,现添加方法 get_dims 需调用:
# python/paddle/base/dygraph/math_op_patch.py
# dims 是已有属性,get_dims 是其方法形式
def get_dims(var: Tensor) -> list:
return list(var.dims)
然后在注入列表中注册:
(
'get_dims',
get_dims,
),
这样就可以通过 tensor.get_dims() 方法调用来获取 dims。
适用条件:PyTorch 拥有某个 Paddle 没有的命名空间,需创建新包将已有 API 重新组织暴露。
典型示例:paddle.optim(对齐 torch.optim)、paddle.utils.data(对齐 torch.utils.data)、paddle.distributions(对齐 torch.distributions)
(详细步骤待补充)
适用条件:PyTorch 有某个 API,Paddle 没有,但可以基于已有 Paddle API 组合实现,无需新增 C++ 算子。
典型示例:paddle.argwhere(= paddle.nonzero(input, as_tuple=False))、paddle.from_numpy、paddle.asarray
详细开发流程请参考:开发 API Python 端(references/new_python_api.md)
适用条件:PyTorch 有某个计算 OP,Paddle 完全没有对应实现,需要从底层开始完整新增算子。
典型示例:paddle.aminmax(对齐 torch.aminmax)、paddle.addcmul(对齐 torch.addcmul)
详细开发流程请参考:开发 C++ 算子(references/new_cpp_op.md)
代码文件存放位置应尽可能与已有 API 的目录保持一致。下方介绍了 python/paddle/tensor/ 目录的组织结构,供开发者参考。
大部分常用的数组运算 API(在 NumPy 中有功能相似的 numpy.xxx API)都放在 python/paddle/tensor 目录下:
python/paddle/nn/functional 目录中包含用于神经网络的函数,如 batch_norm、conv2d,这些在 NumPy 中通常没有直接对应的函数。
错误现象:
x = paddle.to_tensor([1, 2, 3])
x.ne(y) # AttributeError: 'Tensor' object has no attribute 'ne'
解决方法: