ワンクリックで
compatibility-test
负责《Paddle API 对齐 PyTorch 项目》中 Step3 兼容测试,为已修改的 Paddle API 添加兼容性单测并执行验证,确保 API 的 Paddle 用法与 PyTorch 用法均能正常工作。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
负责《Paddle API 对齐 PyTorch 项目》中 Step3 兼容测试,为已修改的 Paddle API 添加兼容性单测并执行验证,确保 API 的 Paddle 用法与 PyTorch 用法均能正常工作。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | compatibility-test |
| description | 负责《Paddle API 对齐 PyTorch 项目》中 Step3 兼容测试,为已修改的 Paddle API 添加兼容性单测并执行验证,确保 API 的 Paddle 用法与 PyTorch 用法均能正常工作。 |
| disable-model-invocation | false |
在 ${ROOT_DIR}/Paddle/test/legacy_test/ 目录下找到 test_api_compatibility[1-9]\.py 中数字最大的文件,在该文件中添加测试。
严格按以下模板编写测试类:
class Test<APIName>API(unittest.TestCase):
def setUp(self):
# If not use random seed, remove setUp
np.random.seed(2025)
self.np_x = np.random.rand(...).astype(...)
def test_dygraph_Compatibility(self):
paddle.disable_static()
x = paddle.to_tensor(self.np_x)
# 1. Paddle Positional arguments
out1 = paddle.<api_name>(x, ...)
# 2. Paddle keyword arguments
out2 = paddle.<api_name>(x=x, ...)
# 3. Pytorch Positional arguments (only if order different with paddle args)
out3 = paddle.<api_name>(x, ...)
# 4. PyTorch keyword arguments (alias)
out4 = paddle.<api_name>(input=x, dim=...)
# 5. Mixed arguments
out5 = paddle.<api_name>(x, axis=...)
# 6. out parameter test (only if supported)
out6 = paddle.empty_like(x)
out7 = paddle.<api_name>(x, ..., out=out6)
# 7. Tensor method - args (only if supported)
out8 = x.<api_name>(...)
# 8. Tensor method - kwargs (only if supported)
out9 = x.<api_name>(axis=...)
# Verify all outputs
for out in [out1, out2, out3, out4, out5, out6, out7, out8, out9]:
np.testing.assert_allclose(out.numpy(), ...)
paddle.enable_static()
def test_static_Compatibility(self):
paddle.enable_static()
main = paddle.static.Program()
startup = paddle.static.Program()
with paddle.static.program_guard(main, startup):
x = paddle.static.data(name="x", shape=self.shape, dtype=self.dtype)
# Create multiple outputs
out1 = paddle.<api_name>(x, ...)
out2 = paddle.<api_name>(x=x, ...)
out3 = paddle.<api_name>(input=x, dim=...)
exe = paddle.static.Executor()
fetches = exe.run(
main,
feed={"x": self.np_x},
fetch_list=[out1, out2, out3],
)
# Verify all outputs
for out in fetches:
np.testing.assert_allclose(out, ...)
动态图模式必测项:
静态图模式必测项(inplace API 无需测):
pin_memory 参数测试:
if paddle.device.is_compiled_with_cuda() or paddle.device.is_compiled_with_xpu():
x = paddle.xxx([2], device="gpu", pin_memory=True)
self.assertTrue("pinned" in str(x.place))
device 参数测试:
# 测试不同设备
if paddle.device.is_compiled_with_cuda():
out_cpu = paddle.<api_name>(x, device="cpu")
out_gpu = paddle.<api_name>(x, device="gpu:0")
单测编写完成后,按以下命令验证执行:
cd ${ROOT_DIR}/Paddle/build
cmake .. && make -j$(nproc) > compile.log 2>&1
python test_xxx.py
根据报错信息修改测试用例或回退,确保所有测试用例通过。每次修改后均需要重新执行本步骤。
编译注意事项:
paddle.disable_static() 和 paddle.enable_static() 切换模式paddle.static.program_guard 创建程序上下文# 数值比对
np.testing.assert_allclose(actual, expected, rtol=1e-5, atol=1e-8)
np.testing.assert_array_equal(actual, expected)
# 布尔断言
self.assertTrue(condition)
self.assertFalse(condition)
self.assertEqual(a, b)
self.assertIsInstance(obj, cls)
# 随机数据
np.random.seed(2025)
self.np_x = np.random.rand(2, 3).astype(np.float32)
# 特定形状
self.shape = [2, 3, 4]
self.dtype = np.float32
${ROOT_DIR} 变量表示根目录,需自行替换为实际路径,若未通过 ROOT_DIR 指定,则均为相对于 ROOT_DIR 的路径test_api_compatibility[1-9]\\.py 中添加Test<APIName>API 格式,如 TestArgmaxAPI当本步骤多次尝试仍无法通过时,需要根据错误信息诊断问题根源:
若判断为测试用例编写有误(如断言逻辑错误、测试数据错误):
若判断为代码实现有误(如参数处理逻辑错误、类型转换失败等):
若判断为方案选择错误(如当前方案不适用、底层不支持等):
错误现象:
TypeError: xxx() got an unexpected keyword argument 'out'
解决方法: 检查 API 签名是否正确添加了 out 参数,或参数名是否拼写正确。
错误现象:
RuntimeError: Pinning memory is not supported for Place(cpu)
解决方法:
pin_memory=True 仅在 GPU/XPU 设备上有意义。确保测试逻辑中正确添加了环境判断:
if paddle.device.is_compiled_with_cuda() or paddle.device.is_compiled_with_xpu():
x = paddle.xxx([2], device="gpu", pin_memory=True)
self.assertTrue("pinned" in str(x.place))
错误现象:
AttributeError: 'OpResult' object has no attribute 'pin_memory'
解决方法:
某些动态图专用的方法需要在 in_dynamic_mode() 保护下执行:
if in_dynamic_mode():
tensor = tensor.pin_memory()
错误现象:
AssertionError: Not equal to tolerance rtol=1e-5, atol=1e-8
解决方法:
rtol 和 atol负责《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 项目》,负责项目整体统筹规划,调用多个 skill,完成输入的 API 对齐
负责《Paddle API 对齐 PyTorch 项目》中代码提交,分别对 Paddle、PaConvert、Docs 三个仓库创建或更新 Pull Request