Skip to content

APITest 测试修复:🐛 修复 forward-only 用例的 autograd 冗余建图#659

Merged
wanghuancoder merged 2 commits into
PFCCLab:mainfrom
cangtianhuang:opt/autograd
Jun 23, 2026
Merged

APITest 测试修复:🐛 修复 forward-only 用例的 autograd 冗余建图#659
wanghuancoder merged 2 commits into
PFCCLab:mainfrom
cangtianhuang:opt/autograd

Conversation

@cangtianhuang

Copy link
Copy Markdown
Collaborator

Title: 🐛 修复 forward-only 用例的 autograd 冗余建图

🧭 背景

PaddleAPITest 的 accuracy_stable 会同时执行 Paddle 侧实现和转换后的 Torch 参考实现,用于验证多轮前向结果稳定性。对于 moe_permute 而言,输入规模可能很大,例如 bf16 hidden_states[1048576, 1024],按 expert 展开后的 hidden_states_unzipped 可达到 [8388608, 1024],单个输出 tensor 约 16GB。

在这种场景下,测试只需要前向结果比对,不需要反向图;旧逻辑可能让 Torch 浮点输入默认 requires_grad=True,使 MoePermuteRule 中的大量索引和 slice assignment 构建巨大的 CopySlices autograd 图。这个图不会参与 backward 校验,却会增加显存、运行和对象析构成本,造成 测试成功但进程崩溃 的问题。

🛠️ 实现方案

本 PR 将输入是否需要 autograd 的判断集中至 TensorConfig,通过 _supports_autograd / _requires_autograd 表达 Torch 与 Paddle 共用策略。判断使用 tester/base_config.yaml 中的 forward_only_apis:命中后 Torch 输入生成 requires_grad=False,Paddle 输入同步设置 stop_gradient=True

🔧 主要变更

1. 对齐 Torch/Paddle forward-only autograd 行为

forward-only API 不再因为浮点 dtype 自动开启 Torch autograd;对应 Paddle 输入也同步停止梯度记录。对非 forward-only API,Torch 仍按 backward 需求设置 requires_grad=True,Paddle 仍保持 stop_gradient=False

2. 修复 bf16 Torch 输入 leaf 行为

bf16 backward 场景下,Torch 输入在 dtype cast 后重新设置为 leaf requires-grad tensor,避免最终输入携带 cast 产生的 grad_fn

📁 改动文件

tester/
└── api_config/
    └── config_analyzer.py              # 统一 Torch/Paddle 输入 autograd 策略,并修复 bf16 leaf 行为

✅ 验证

修改后经测试,moe_permute 测试行为正常,不再发生进程崩溃。

@wanghuancoder wanghuancoder merged commit d0e32f4 into PFCCLab:main Jun 23, 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.

2 participants