已合并
[fix] Add FaultyTensorpipeAgent For TestCase #36105
[fix] Add FaultyTensorpipeAgent For TestCase #36105
已合并
pengqihw创建于 5月19日
pengqihw
pengqihw成员
5月19日

【合入来源】

如有社区issue,请关联issue链接
请勿携带内部流程信息(需求链接、问题单、内部issue等)

用例中原生社区使用了FaultyTensorPipeAgent类进行延时注入,NPU 缺少 FaultyTensorPipeAgent,导致无法使用 FAULTY_TENSORPIPE 后端,messages_to_delay / messages_to_fail 配置无效。本次改动为 NPU 实现完整的 FaultyTensorPipeAgent 基础设施。

【修改方案】

请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列
如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容)

参考原生社区实现为 NPU 添加 FaultyTensorPipeAgent 实现,使 FAULTY_TENSORPIPE 后端能在 NPU 上用于 RPC 故障注入测试。

修改范围(7 个文件)

新增(2 个)

faulty_tensorpipe_agent.h — FaultyTensorPipeAgent 类定义

  • 继承 NPU TensorPipeAgent,使用 tensorpipe_npu::Pipe / tensorpipe_npu::Error
  • send() override:根据 messagesToFail_ 配置决定是否注入发送失败
  • pipeWrite() override:根据 messagesToDelay_ 配置在发送前注入延迟

faulty_tensorpipe_agent.cpp — 实现

  • 构造函数使用 static_cast(opts) 将基类部分切片拷贝传递给父类,避免 std::move(opts) 后访问 moved-from 成员的 undefined behavior(原生 PyTorch 存在同样的问题,NPU 实现中一并修复)

修改(5 个)

init.cpp — Python 绑定

  • 注册 FaultyTensorPipeRpcBackendOptions 和 FaultyTensorPipeAgent 到 torch_npu._C._distributed_rpc

backend_registry.py — 后端注册

  • 新增 _faulty_tensorpipe_construct_rpc_backend_options_handler:创建 FaultyTensorPipeRpcBackendOptions
  • 新增 _faulty_tensorpipe_init_backend_handler:创建 FaultyTensorPipeAgent 并调用 api._init_rpc_states()。在创建 agent 前调用 _init_device_state() 初始化 NPU 设备(NPU TensorPipeAgent 构造依赖已初始化的 NPU 设备,原生 CUDA 无此需求)
  • _rpc_backend_registry():注册 FAULTY_TENSORPIPE 后端;import torch.distributed.rpc._testing 并设置 is_available = lambda: False 阻止原生 PyTorch 的 FAULTY_TE- NSORPIPE 重复注册;若原生已提前注册则重建 BackendType Enum 替换为 NPU handler

tensorpipe_agent.cpp — Bug 修复

  • 添加 #include <fmt/format.h>
  • 超时错误消息修正:errorMsg = "" → fmt::format(kRpcTimeoutErrorStr, timeoutMetadata.timeout.count())。原生 PyTorch 会格式化为 "RPCErr:1:RPC ran for more than set timeout (500 ms)...",NPU 版本此前传空字符串导致异常消息为 "RPCErr:1:",测试 regex "RPC ran for more than" 无法匹配

tensorpipe_agent.h — 依赖补充

  • 添加 using torch::distributed::rpc::kRpcTimeoutErrorStr;,与同文件中 kSecToMsConversion、kUnsetRpcTimeout 的引入方式一致

CMakeLists.txt — 编译配置

  • FILE(GLOB ...) 添加 rpc/testing/*.cpp

关于 PYTHON_CALL vs SCRIPT_CALL

torch_npu.contrib.transfer_to_npu 全局替换 torch.jit.script 为 pass-through 包装器。MultiProcessTestCase 以 multiprocessing.spawn 启动子进程运行测试,父进程中调用 enable_jit_script() 设置的状态不会传递给子进程。子进程中所有 @torch.jit.script 装饰的函数均不编译,RPC 框架因此使用 PYTHON_CALL 消息类型。测试用例需将 messages_to_delay / messages_to_fail 配置为 PYTHON_CALL 来匹配实际的消息类型。

【资料变更】

请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及”

【接口变更】

请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及”

【功能验证】

说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤
新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图
image.png

【CheckList】

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 pengqihw 的贡献)
pengqihwpengqihw成员
5月19日 创建了 pull request,commit 623a861d
ascend-robot
ascend-robot成员
5月19日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
torch_npu/csrc/distributed wjlflyer, zhenyu10 (2/2) wjlflyer (1/1)
torch_npu/distributed zhenyu10, wjlflyer (2/2) wjlflyer (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

pengqihw, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
ascend-robotascend-robot成员
5月19日 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
5月19日 评论:

当前仓库存在以下 保护分支

Protected Branch Version Release
master
v2.7.1
v2.9.0
v2.10.0
v2.11.0
v2.12.0

评论 /sync <branch1> <branch2> ... 可将当前 PR 修改同步到其它分支(创建同步 PR):
a) 如果当前 PR 是 Open 状态,同步操作将延迟到 PR 被合并时执行
b) 如果当前 PR 已经 Merged,将立即执行同步操作

注意:

  1. /sync 命令可以指定同步到多个分支,仅最后一个 /sync 命令生效
  2. 如果创建的同步 PR 不正确,可通过向同步 PR 的源分支提交轻量级 PR 完善,或使用 /close 命令关闭
likedislike
此处折叠了49条消息 查看更多
yc_233成员
5月22日 评论:

/lgtm

likedislike
wjlflyer成员
5月26日 评论:

/lgtm
/approve

likedislike
ascend-robotascend-robot成员
5月26日 添加了label:approvedlgtm
ascend-robot
ascend-robot成员
5月26日 评论:

Review Guide

This pull-request passes review.
Committers who wrote a comment of /approve are: wjlflyer.
Reviewers who wrote a comment of /lgtm are: zhenyu10, wjlflyer.

likedislike
ascend-robotascend-robot成员
5月26日 合入了pull request