已合并
fix: pass map_location to _legacy_load in torch_npu.utils.load for torch.compile cache #43272
fix: pass map_location to _legacy_load in torch_npu.utils.load for torch.compile cache #43272
已合并
wuyouqi1创建于 26 天前
wuyouqi1
wuyouqi1成员
26 天前

【合入来源】

关联 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" 回退,本次恢复原始修改。

【修改方案】

  1. torch_npu/utils/serialization.pyload 函数中,当走 legacy 加载分支且未命中 (torch.device, str) 类型分支时,将 _legacy_load(opened_file, "cpu", ...) 改为 _legacy_load(opened_file, map_location, ...),使加载结果按 map_location 正确映射到目标设备,保证 torch.compile 缓存场景下的加载行为正确。
  2. 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_maplocation UT 用例看护。

【CheckList】

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

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 wuyouqi1 的贡献)
wuyouqi1wuyouqi1成员
26 天前 创建了 pull request,commit cf53480b
atomgit-bot
atomgit-bot
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 设备。
  • 启用参数化测试支持:新增 parametrizeinstantiate_parametrized_tests 的导入,并在模块级调用 instantiate_parametrized_tests(TestSerialization) 以激活参数化测试。
likedislike
atomgit-bot
atomgit-bot
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 级别的文档维护问题,不影响功能正确性。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
ascend-robotascend-robot成员
26 天前 添加了label:ascend-cla/yes
此处折叠了46条消息 查看更多
chujinjin成员
24 天前 评论:

/approve

likedislike
ffmh
ffmh成员
24 天前 评论:

/lgtm

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