已关闭
[RFC]: [NN] DataParallel/DataLoader 行为补丁/[Tensor] .type() 重写补丁削减方案 #3686
wanglijun55创建于 8月5日关闭于 29 天前
8月5日 关联了看板:FrameworkPTAdapter 版本issue看板
8月5日 添加了label:rfc
8月5日 issue状态由 TODO 改变为 ACCEPTED
8月5日 issue类型由 Bug-Report 改变为 RFC
8月5日 添加了label:bot-triaged
TorchNPU-Bot
8月5日 评论:
8月5日 评论:
检测到当前 issue 已关联 PR,自动添加标签:bot-triaged


29 天前 关闭了 issue
29 天前 添加了label:resolved
相关 Issue/PR: N/A
1. 概述
1.1 简介
本评审报告针对 pytorch_npu 项目中两个 monkey-patch 补丁的处理策略变更进行评估。原计划将这些补丁贡献至 PyTorch 上游社区,经过深入分析后发现补丁函数与原函数之间的差异已可消除,因此建议将策略从【贡献上游社区】调整为【自行消除】。
涉及的两个补丁:
pytorch-npu/torch_npu/utils/_module.pypytorch-npu/torch_npu/utils/tensor_methods.py1.2 动机
1.3 目标
2. 用例分析
2.1 [NN] DataParallel/DataLoader 行为补丁
文件位置:
pytorch-npu/torch_npu/utils/_module.py关键代码:
def _apply_module_patch(): torch.nn.Module.npu = npu torch.nn.Module.to = to torch.nn.Module.cast_weight = cast_weight torch.nn.modules.rnn.LSTM.forward = _lstm_forward torch.nn.parallel.DataParallel.parallel_apply = npu_parallel_apply # 本次分析部分 torch.nn.parallel.data_parallel = npu_data_parallel # 本次分析部分 torch.utils.data.dataloader._MultiProcessingDataLoaderIter.__init__ = ( _mpdl_iter_init )补丁描述:
torch.nn.parallel.DataParallel.parallel_apply和torch.nn.parallel.data_parallel函数2.2 [Tensor] .type() 重写补丁
文件位置:
pytorch-npu/torch_npu/utils/tensor_methods.py关键代码:
def _add_tensor_methods(): torch.Tensor.type_raw = torch.Tensor.type torch.Tensor.type = _npu_type补丁描述:
_npu_type函数重写 PyTorch 原生_type函数,差异在于类型转换的方法3. 方案设计
3.1 总体方案
根据本提案的场景用例及功能特点,阐述整体设计思路、技术方案、核心逻辑,可包括选择什么软/硬件平台、操作系统、编程模型、使用什么算法,系统架构如何布局,UI如何呈现等。并给出相应的限制和约束说明,如在什么场景或前置条件下,可以达成xx性能指标。
根据实现方案的复杂度,可选择采用自然语言,并结合架构图、时序图、活动图或状态机(算法)等适合的方式来辅助设计。
3.2 技术选型
列出考虑过但放弃的其他方案,给出优劣对比,说明不选择的理由。
3.3 功能与性能设计
结合场景用例分析的结果,对本提案的相关功能及性能指标影响展开设计,如功能的实现方案、运行的核心流程(文字描述或流程图)、数据模型定义或变更(若涉及)、影响范围等。
3.4 安全隐私与DFX设计
结合场景用例,对本提案所涉及的安全隐私及DFX(兼容性、可维护性、可测试性、可靠性...)等属性影响进行设计。
3.5 编程与调用设计
若本提案相关特性/功能组件/模块等支持被开发者集成调用(二次开发),则需要提供便捷易用的编程与调用能力。要站在开发者如何进行编程开发、接口调用及系统集成的使用方式上,给出相应的编程模型定义和设计,包括各要素的可获取方式和途径。
3.5.1 编程模型基本设计
开发环境设计:明确好开发者使用的软/硬件环境、开发&调试工具链、编程框架、要提供的加速库或算子等。
开发约束:开发者使用过程中的约束和限制说明,如硬件平台、编程语言限制等。
可验收设计:提供相应功能、性能指标等的验收环境、标准或用例设计,保证最终的实现可达成既定目标。
3.5.2 接口定义与设计
给出相关组件/模块被集成调用的API定义或变更、对接上下游主流生态技术栈的适配方案、提供功能被使用或集成的参考代码或方法等。
3.5.2.1 xxx(API1 Name)
3.5.2.2 xxx(API2 Name)
...
3.5.3 编程手册设计
为了帮助开发者能快速上手开发,要设计好本提案相关特性/功能的《编程手册》,要包含哪些内容和章节,单独输出还是共用,在已有的手册中更新还是输出等。确保最后输出的《编程手册》中有相关变更内容。
4. 测试设计
4.1 单元测试
4.2 集成测试
4.3 回归测试
5. 缺点和风险
5.1 潜在风险
5.2 实现成本
6. 现有技术
PyTorch 原生实现已可满足 NPU 使用需求,无需额外 patch 机制。参考上游社区的类似实践,直接使用原生函数是推荐做法。
7. 未解决问题
附录
参考资料
术语表
文档更新计划
评审结论建议:✅ 同意将策略从【贡献上游社区】调整为【自行消除】,建议实施前完成充分的测试验证。
欢迎加入社区,感谢您对社区的贡献 🎉!