用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/PaddlePaddle/docs --skill api-compatibility命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| 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_的实现。