已合并
fix: pass map_location to _legacy_load in torch_npu.utils.load for torch.compile cache #43272
wuyouqi1创建于 26 天前
fix: pass map_location to _legacy_load in torch_npu.utils.load for torch.compile cache #43272
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 wuyouqi1 的贡献)atomgit-bot
26 天前 评论:
26 天前 评论:
变更摘要
此 PR 恢复了对 torch_npu.utils.load 中 legacy(非 zip)加载分支的修复:将 _legacy_load 的第二个参数从硬编码的 "cpu" 改回透传 map_location,使加载结果能按 map_location 正确映射到目标设备,修复 torch.compile 缓存加载在 NPU 上的功能问题。同时恢复了对应的单测用例 test_legacy_load_maplocation。
主要改动
torch_npu/utils/serialization.py修复map_location透传:在load函数的 legacy 加载分支中,将_legacy_load(opened_file, "cpu", ...)改为_legacy_load(opened_file, map_location, ...),使map_location参数在非(torch.device, str)类型分支下被正确传递,而非被硬编码为"cpu"。- 新增
test_legacy_load_maplocation测试用例:在test/npu/test_serialization.py中新增参数化测试,使用@parametrize("map_kind", ["none", "callable", "dict"])覆盖None、可调用对象、字典三种map_location形式,验证 legacy 加载模式下结果能正确映射到npu:0设备。 - 启用参数化测试支持:新增
parametrize和instantiate_parametrized_tests的导入,并在模块级调用instantiate_parametrized_tests(TestSerialization)以激活参数化测试。


ascend-robot
26 天前 评论:
26 天前 评论:
atomgit-bot
26 天前 评论:
26 天前 评论:
代码审查
审查总结
审查覆盖情况
| 文件 | 审查结果 |
|---|---|
torch_npu/utils/serialization.py |
1 个 P3 问题(警告消息过时) |
test/npu/test_serialization.py |
无问题 |
发现统计
- P0: 0
- P1: 0
- P2: 0
- P3: 1
整体风险评估
低风险。 核心修复(第 339 行将 "cpu" 改为 map_location)正确解决了 map_location=None(以及 Callable/Dict)在 legacy 加载分支被错误强制为 CPU 的 bug,与 issue #3005 描述的问题根因一致。新增的单测 test_legacy_load_maplocation 通过 @parametrize 覆盖了 None / Callable / Dict 三种 map_location 类型,结构合理。唯一可改进项是第 315–320 行的遗留警告消息与修复后的行为不一致,属于 P3 级别的文档维护问题,不影响功能正确性。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


26 天前 添加了label:ascend-cla/yes
此处折叠了46条消息 查看更多
ffmh
24 天前 评论:
24 天前 评论:
/lgtm


24 天前 添加了label:lgtm
24 天前 合入了pull request
ascend-robot
24 天前 评论:
24 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13483 [ commitID:575c6f61 ] 已完成


【合入来源】
关联 issue: https://gitcode.com/Ascend/pytorch/issues/3005 (Fixes #3005)
恢复 torch_npu.utils.load 在 legacy(非 zip)加载分支对
map_location的透传,修复 torch.compile 缓存加载在 NPU 上的功能问题。此前该改动被fix: Revert "modifty torch_npu.utils.load for torch.compile cache use"回退,本次恢复原始修改。【修改方案】
torch_npu/utils/serialization.py的load函数中,当走 legacy 加载分支且未命中(torch.device, str)类型分支时,将_legacy_load(opened_file, "cpu", ...)改为_legacy_load(opened_file, map_location, ...),使加载结果按map_location正确映射到目标设备,保证 torch.compile 缓存场景下的加载行为正确。test/npu/test_serialization.py恢复test_legacy_load_maplocation用例,覆盖 legacy load 的map_location映射。本修改等价于恢复 "modifty torch_npu.utils.load for torch.compile cache use" 的原始改动,仅涉及上述两个文件。
【资料变更】
不涉及
【接口变更】
不涉及
【功能验证】
torch_npu.utils.load在 legacy 分支下的map_location映射;torch.compile 缓存加载。test/npu/test_serialization.py::TestSerialization::test_legacy_load_maplocation。test_legacy_load_maplocationUT 用例看护。【CheckList】