Skip to content

支持更多 Paddle Tensor API 的 Torch 精度对齐 - #707

Merged
cangtianhuang merged 3 commits into
PFCCLab:mainfrom
cangtianhuang:main
Aug 9, 2026
Merged

支持更多 Paddle Tensor API 的 Torch 精度对齐#707
cangtianhuang merged 3 commits into
PFCCLab:mainfrom
cangtianhuang:main

Conversation

@cangtianhuang

Copy link
Copy Markdown
Collaborator

支持的 API

  • paddle.Tensor.add_
  • paddle.Tensor.contiguous
  • paddle.Tensor.copy_
  • paddle.Tensor.flatten_
  • paddle.Tensor.multiply_
  • paddle.Tensor.put_along_axis_
  • paddle.Tensor.scale_
  • paddle.Tensor.subtract_
  • paddle.Tensor.to
  • paddle.randint

主要改动

Tensor 原地算子

复用 main 分支已有的 _C_ops 转换规则,为对应的 paddle.Tensor.* 方法增加映射,避免重复实现相同的原地计算逻辑。

涉及:

  • add_
  • flatten_
  • multiply_
  • put_along_axis_
  • scale_
  • subtract_

add_subtract_ 补充以下兼容处理:

  • 支持 Paddle API 的 alpha 参数。
  • 在执行 Torch 原地运算前,将第二个 Tensor 转换为目标 Tensor 的 dtype。
  • 解决 float32bfloat16 等混合 dtype 输入下 Paddle 和 Torch 行为不一致的问题。
  • 使用 Torch 原地算子保持输入修改语义与 Paddle 一致。

put_along_axis_ 同时兼容 _C_ops 使用的 arr 参数名和 Tensor 方法使用的 x 接收者参数名。

paddle.Tensor.copy_

  • 为无法通过 inspect.signature 获取签名的内建方法增加手工参数绑定。
  • 支持 selfotherblocking 参数。
  • 将 Paddle 的 blocking 转换为 Torch copy_non_blocking 参数。
  • copy_ 加入 forward-only API,避免对原地修改后的 Tensor 执行无意义的反向精度比较。

paddle.Tensor.contiguous

直接映射到 torch.Tensor.contiguous,沿用 main 分支现有的 Tensor 方法调用机制。

paddle.Tensor.to

新增独立转换规则,处理 Paddle 与 Torch 在设备和 dtype 参数上的差异:

  • 将 Paddle 的 gpugpu:<id> 转换为 Torch 的 cudacuda:<id>
  • 将 Paddle dtype、字符串 dtype 转换为对应的 torch.dtype
  • 支持位置参数和关键字参数形式。
  • 过滤 main 分支执行协议中的 selfargs 元数据,避免这些内部参数被重复传递给 torch.Tensor.to
  • 无显式转换参数时保持原 Tensor 结果。

paddle.randint

新增到 torch.randint 的参数映射:

  • 将 Paddle 的 shape 列表转换为 Torch 接受的 tuple。
  • 保持 lowhigh 参数顺序。
  • 未显式提供 dtype 时使用 torch.int64,与 Paddle 默认行为对齐。
  • 使用 locals().get("dtype") 读取可选参数,避免缺省 dtype 时产生未定义变量错误。

@cangtianhuang
cangtianhuang enabled auto-merge (squash) August 9, 2026 07:07
@cangtianhuang
cangtianhuang merged commit 6b1c9a7 into PFCCLab:main Aug 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant