بنقرة واحدة
api-compatibility
开展《Paddle API 对齐 PyTorch 项目》,负责项目整体统筹规划,调用多个 skill,完成输入的 API 对齐
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
开展《Paddle API 对齐 PyTorch 项目》,负责项目整体统筹规划,调用多个 skill,完成输入的 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 代码修改,实施『新增 API』方案。通过新增 Paddle API(新增 API 别名、新增 Python 层 API、新增 C++算子),覆盖 Pytorch API 调用路径,实现与 PyTorch API 行为对齐。
负责《Paddle API 对齐 PyTorch 项目》中 Step2 代码修改,实施『新增 compat 类型 API』方案。在 `paddle.compat` 命名空间下新增 API,实现与 PyTorch API 行为对齐。
负责《Paddle API 对齐 PyTorch 项目》中 Step3 兼容测试,为已修改的 Paddle API 添加兼容性单测并执行验证,确保 API 的 Paddle 用法与 PyTorch 用法均能正常工作。
负责《Paddle API 对齐 PyTorch 项目》中代码提交,分别对 Paddle、PaConvert、Docs 三个仓库创建或更新 Pull Request
| name | api-compatibility |
| description | 开展《Paddle API 对齐 PyTorch 项目》,负责项目整体统筹规划,调用多个 skill,完成输入的 API 对齐 |
| allowed-tools | Read Write Edit Bash Glob Grep Agent Skill WebFetch WebSearch |
用户提供待对齐的 Pytorch API 列表 $ARGUMENTS,通过调用多个 skill,使 Paddle API 与 PyTorch API 完全对齐,实现:
torch.* 替换为 paddle.*概念:类方法 API(如 torch.Tensor.abs)和普通 API(如 torch.abs)是不同 API,但实现一致,合并处理即可。Paddle 通过 patch 机制将方法动态添加到 Tensor 类上。
实现方式选择:
| 场景 | 方式 | 操作 |
|---|---|---|
| 数学运算类方法,直接转发到普通函数 | 方式一:配置 tensor_method_func | 见下方步骤 |
| 自定义实现逻辑、property、魔术方法 | 方式二:修改 patch 文件 | 见下方步骤 |
方式一:配置 tensor_method_func
文件:Paddle/python/paddle/tensor/__init__.py
# 1. import 所需函数
from .math import trace
# 2. 加入 tensor_method_func 列表(按字母表顺序插入)
tensor_method_func = [
...
'trace',
...
]
完成。各 patch 文件会自动遍历此列表完成绑定,无需额外修改。
方式二:修改 patch 文件
需修改的文件:
| 文件 | 语言 | 适用 |
|---|---|---|
python/paddle/base/dygraph/math_op_patch.py | Python | 动态图 |
python/paddle/pir/math_op_patch.py | Python | PIR 静态图 |
python/paddle/base/layers/math_op_patch.py | Python | 老静态图 |
paddle/fluid/pybind/eager_math_op_patch.cc | C++ | 动态图(性能更优) |
选择规则:
修改方式:
eager_methods 列表中添加元组 ('方法名', 方法实现)eager_math_op_patch.cc 中已有方法实现查找注意事项:
def abs(class Tensor(方法通过 setattr 动态添加,不在类定义中)概念说明:
torch.abs_):原地操作,直接修改输入 Tensor,其不应有 out 参数,如有 out 需删除torch.abs):返回新 Tensor,不修改输入 Tensor示例对比:
y = paddle.abs(x) # 非 inplace:返回新 Tensor,x 不变
x.abs_() # inplace:原地修改 x
自动生成机制:
Paddle 支持自动生成 inplace API,无需在ops.yaml中单独配置。当定义了inplace: (x -> out)字段后,系统自动生成对应的 inplace 版本,复用原 API 的 Kernel 实现。
配置示例:
ops.yaml,第 10-22 行):- op : abs
args : (Tensor x)
output : Tensor(out)
inplace: (x -> out) # 关键字段:指定 x 和 out 可以 in-place
backward : abs_grad
python_api_info.yaml,第 6-9 行):- op : abs_
name : [paddle.abs_, paddle.Tensor.abs_]
args_alias :
use_default_mapping : True
在开展 API 对齐工作过程中,需要获取 PyTorch API 和 Paddle API 的相关信息。
参考资源:
| 资源类型 | 资源位置 | 说明 |
|---|---|---|
| PyTorch 官方文档 | https://pytorch.org/docs/stable/ | 了解 API 参数功能定义 |
| PyTorch 源码 | https://github.com/pytorch/pytorch | 参考 PyTorch 底层逻辑(需注意 PyTorch 与 Paddle 架构设计存在差异) |
| Paddle 官方文档 | https://www.paddlepaddle.org.cn/documentation/docs/zh/api/ | 了解 Paddle API 参数功能定义 |
| Paddle 源码 | 见本地仓库 ${ROOT_DIR}/Paddle | 参考 Paddle 底层逻辑 |
获取方式:
inspect 模块或 help() 函数获取 API 签名__doc__ 属性获取 API 的文档字符串示例:
import paddle
import torch
# 获取 API 签名
import inspect
print(inspect.signature(paddle.abs))
print(inspect.signature(torch.abs))
# 获取文档字符串
print(paddle.abs.__doc__)
print(torch.abs.__doc__)
# 实际测试验证
x = paddle.to_tensor([1.0, -2.0, 3.0])
print(paddle.abs(x))
输入 API 列表 → Step1:所有 API 选择方案 → Step2:所有 API 代码修改 → Step3:所有 API 兼容测试 → Step4:所有 API Pytorch 测试 → Step5:所有 API 更新文档 → 全部完成
具体如下:
/select-solution skill)Step 1.1: 获取差异信息
Step 1.2: 提取差异信息
Step 1.3: 选择方案
根据 Step1 的方案选择结果,按方案分组,依次调用对应 skill,同一方案的所有 API 在一个 skill 调用中批量处理。
各方案步骤:
/python-decorator skill)Step 2.1: 差异分析与选择装饰器
Step 2.2: 应用或开发装饰器
Step 2.3: 更新函数文档
/cpp-sink skill)Step 2.1: 配置 python_api_info.yaml
Step 2.2: 迁移文档到_paddle_docs.py
Step 2.3: 替换 Python 实现
/modify-origin-api skill)Step 2.1: 修改 API 签名
Step 2.2: 修改函数实现逻辑
Step 2.3: 更新函数文档
/add-new-api skill)/add-new-compat-api skill)/compatibility-test skill)Step 3.1: 编写测试用例
Step 3.2: 编译并运行单测(每次修改代码均需执行编译)
/pytorch-test skill)Step 4.1: 标记已完成的 API
Step 4.2: 增加测试用例
Step 4.3: 编译并运行单测(每次修改代码均需执行编译)
/update-docs skill)假设待对齐 API 为 torch.argmax:
1. Step1: 选择方案 → 得到『方案 2:C++下沉』
2. Step2: 代码修改 → 修改 Paddle 目录文件,将 paddle.argmax 下沉到 C++
3. Step3: 兼容测试 → 在 Paddle 目录添加兼容性单测,编译并运行验证
4. Step4: Pytorch 测试 → 修改 PaConvert 目录文件,编写 Pytorch 单元测试,对比测试,验证对齐
5. Step5: 更新文档 → 修改 docs 目录文件,更新 paddle.argmax 文档
功能定位:
api-compatibility)是项目的总控 skill,负责整体统筹规划核心职责:
Skill 调用规范:
| Skill | 对应步骤 |
|---|---|
/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 更新文档 |
本项目涉及的所有 skill 均具备自进化能力,通过持续学习和优化来提升工作质量。修改的 SKILL 目录为:${ROOT_DIR}/docs/docs/dev_guides/coding_agent/api_compatibility/.claude/skills
如何自进化:
自进化需要修改哪里:
修改注意:
统一放在 __init__.py 的 "API alias" 区块,不要在 math.py 等实现文件中定义。
涉及文件:
paddle/tensor/__init__.pypaddle/__init__.py示例(正确做法):
# 在 __init__.py 的 "API alias" 区块
fix = trunc
fix_ = trunc_
mod = remainder
注意:定义别名后,需从 from .math import 中移除该别名,避免导入错误。
与输入 input 相关的所有操作都必须使用 inplace 方法(scale_、add_ 等),不能用 *、+ 等非 inplace 操作。可以参考 addcdiv_的实现。