| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 年前 | ||
Optimize the patch for FSDP Co-authored-by: zhenyu10<shizhenyu5@huawei.com> # message auto-generated for no-merge-commit merge: !34632 merge master into master Optimize the patch for FSDP Created-by: zhenyu10 Commit-by: zhenyu10 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 社区 issue:https://gitcode.com/Ascend/pytorch/issues/1788 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 采用“上层复用原生,下层补齐后端语义”的设计: 1. torch-npu 删除 FSDP2 collectives patch: - 不再覆写 _get_param_all_gather_inputs - 不再覆写 torch.ops.fsdp.all_gather_copy_in - 不再覆写 FSDPParamGroup.finalize_backward - fully_shard() 入口只保留 NPU 侧增强 patch,例如内存缓存和 recompute/prefetch 状态管理 2. op-plugin 在 foreach copy 算子中对齐同设备 D2D fast path: - fast path 判定显式使用 PyTorch foreach 工具函数: - at::native::can_use_fast_route(self, src) - check_tensor_dtype_support_base(src) - can_use_fast_route(self, src) 本身会检查 self/src dtype 一致,因此 dtype 不同不会进入 NPU fast path,保持当前 NPU 不支持跨 dtype fast path 的既有语义。 - 命中 fast path 时调用: cpp split_and_exec_npu_cmd_copy(self, src, /*non_blocking=*/true); 3. fallback 路径保持调用方传入语义: - 未命中 fast path 时,memcpyBatch(self, src, non_blocking) 不变 - slow path foreach_tensor_copy_list_kernel_slow_(self, src, non_blocking) 不变 - DO_COMPATIBILITY 回退仍使用原始 non_blocking # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及。 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及。无新增客户可见接口;FSDP 对外使用方式不变。_foreach_copy_ 的 NPU 后端实现由 op-plugin 承接,不新增 Python 侧公开接口。 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 测试场景: 1. FSDP collectives 覆写删除后,fully_shard 继续复用上游 PyTorch 原生 finalize_backward、_get_param_all_gather_inputs、all_gather_copy_in 主流程; 2. NPU 侧 _foreach_copy_ 在 op-plugin 中优先走 D2D fast path,不满足条件时回退到已有 batch copy / slow path; 3. 跨 dtype NPU D2D copy 场景在异步排队后结果正确。 测试方法: - op-plugin 用例: - python test/test_v2r1_ops/test_foreach_copy.py - python test/test_v2r2_ops/test_foreach_copy.py - torch-npu 侧建议验证 FSDP fully-shard 训练主路径,功能科通过仓内测试用例。 执行结果: - 已完成代码检查与 push hook 校验通过。 - NPU 环境 UT 结果请以当前 CI/转测执行结果为准。 UT看护: - 已适配 op-plugin foreach copy 用例,在跨 dtype copy 断言前增加 torch.npu.synchronize(),覆盖新增异步 D2D fast path 行为。 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!34632 | 4 个月前 | |
[test] Add _get_module_fsdp_state_if_fully_sharded_module API test case Co-authored-by: lihaokun-2026<851563813@qq.com> # message auto-generated for no-merge-commit merge: !45546 merge _get_module_fsdp_state_if_fully_sharded_module-master into master [test] Add _get_module_fsdp_state_if_fully_sharded_module API test case Created-by: lihaokun-2026 Commit-by: lihaokun-2026 Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <span style="color:red"><strong>如有社区 Issue,请关联 Issue 链接</strong></span> > <span style="color:red"><strong>请勿携带内部流程信息(需求链接、问题单、内部issue等)</strong></span> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch-ecosystem/issues/269 - [ ] 重构优化 - [ ] 资料更新 # 1、API功能分析 - torch.distributed.fsdp._common_utils._get_module_fsdp_state_if_fully_sharded_module torch.distributed.fsdp._common_utils._get_module_fsdp_state_if_fully_sharded_module 是 FSDP 内部私有辅助函数,用于判断传入的 module 本身是否是真正由 FSDP 管理的 fully-sharded module;如果是传统 FullyShardedDataParallel module,或者是 composable fully_shard 管理的 module,就返回对应 _FSDPState,否则返回 None。这个函数自身只是做 Python 层的 FSDP state 查询和 module 身份判断,不直接执行 NPU 算子或 HCCL 通信,所以不是直接的 NPU API;但它位于 FSDP 运行链路中,而 NPU 上的 FSDP 会涉及设备管理、HCCL、参数 shard/unshard 等,因此和 torch-npu 间接相关。 # 2、上游用例检查情况 | API | PyTorch 上游测试情况 | 单卡能否完成核心测试 | torch-npu 推荐环境 | | ------------------------------------------------ | --------------------------------------------------- | ----------------: | ------------------- | | _get_module_fsdp_state_if_fully_sharded_module | **未找到直接针对该私有函数的独立测试,但被 FSDP state_dict 测试链路间接覆盖** | **直接 API 测试可以单卡** | 单卡可测;完整 FSDP 推荐多卡 | torch.distributed.fsdp._common_utils._get_module_fsdp_state_if_fully_sharded_module._get_module_fsdp_state_if_fully_sharded_module 需要进行测试用例的补充。 # 3. 资料检查 - torch.distributed.fsdp._common_utils._get_module_fsdp_state_if_fully_sharded_module 这个API是内部方法无需进行资料补充。 # 4. API功能测试 - torch.distributed.fsdp._common_utils._get_module_fsdp_state_if_fully_sharded_module._get_module_fsdp_state_if_fully_sharded_module 测试方法: source /usr/local/Ascend/ascend-toolkit/set_env.sh TORCH_DEVICE_BACKEND_AUTOLOAD=1 python test/distributed/fsdp/test_get_module_fsdp_state_if_fully_sharded_module.py -v 测试覆盖范围: | 测试项 | 覆盖内容 | 预期结果 | | --- | --- | --- | | 普通 NPU Module | 创建未经过 FSDP 管理的 nn.Linear NPU Module,调用 _get_module_fsdp_state_if_fully_sharded_module | 返回 None | | 单 rank HCCL 初始化 | 使用 backend="hccl"、rank=0、world_size=1 初始化默认 ProcessGroup | HCCL ProcessGroup 初始化成功 | | FSDP NPU Module | 将 NPU nn.Linear 使用 FullyShardedDataParallel 包装后调用目标 API | 返回非 None 的 FSDP state | | 返回值类型 | 检查 FSDP Module 对应的返回结果 | 返回结果为 _FSDPState | 测试结果: v2.7.1  v2.11.0  v2.12.0  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!45546 | 21 天前 | |
| 1 年前 | ||
| 2 年前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 年前 | ||
| 4 个月前 | ||
| 21 天前 | ||
| 1 年前 | ||
| 2 年前 |