已合并
fix: pass map_location to _legacy_load in torch_npu.utils.load for torch.compile cache #43271
fix: pass map_location to _legacy_load in torch_npu.utils.load for torch.compile cache #43271
已合并
wuyouqi1创建于 7月29日
wuyouqi1
wuyouqi1成员
7月29日

【合入来源】

关联 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成员
7月29日 创建了 pull request,commit f29c6c97
atomgit-bot
atomgit-bot
7月29日 评论:

变更摘要

本次 PR 恢复了之前被回退的修改,修复 torch_npu.utils.load 在 legacy(非 zip)加载分支中 map_location 参数未被正确透传的问题。核心改动是将 _legacy_load 调用中的硬编码 "cpu" 替换为外部传入的 map_location,确保 torch.compile 缓存加载场景下 tensor 能被正确映射到目标设备。同时恢复了对应的 test_legacy_load_maplocation 单测用例,覆盖 None、Callable、Dict 三种 map_location 类型的映射行为。

主要改动

  • 修复 map_location 透传: 在 torch_npu/utils/serialization.pyload 函数中,将 _legacy_load(opened_file, "cpu", ...) 改为 _legacy_load(opened_file, map_location, ...),使 legacy 加载路径按调用方指定的 map_location 正确映射设备,而非固定加载到 CPU。
  • 恢复 test_legacy_load_maplocation 测试用例: 在 test/npu/test_serialization.py 中重新添加该测试方法,通过 @parametrize("map_kind", ["none", "callable", "dict"]) 覆盖三种 map_location 类型(None、可调用对象、字典),验证 legacy 加载后 tensor 设备均为 npu:0
  • 引入参数化测试支持: 新增 from torch.testing._internal.common_utils import parametrize, instantiate_parametrized_tests 导入,并在测试类末尾添加 instantiate_parametrized_tests(TestSerialization) 调用,为参数化测试方法自动生成实例。
likedislike
atomgit-bot
atomgit-bot
7月29日 评论:

代码审查

审查总结

对 2 个变更文件逐一完成审查:

文件 审查结果
torch_npu/utils/serialization.py 发现 1 个 P3 问题(警告信息与实际行为不一致)
test/npu/test_serialization.py 未发现问题

按优先级统计:P0: 0, P1: 0, P2: 0, P3: 1

整体风险评估:此次变更风险较低。核心修复(第 339 行将 "cpu" 改为 map_location)正确解决了 torch.compile 缓存加载时 NPU tensor 被错误映射到 CPU 的问题,测试用例覆盖了 None、Callable、Dict 三种 map_location 类型。仅存在一个次要问题:第 315–320 行的警告信息声称 Callable/Dict 类型的 map_location 不受支持且所有 tensor 将被加载到 CPU,但修改后这些类型已被实际透传给 _legacy_load 并正确工作,警告内容与行为不一致,建议更新或调整警告的作用域。

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

likedislike
ascend-robotascend-robot成员
7月29日 添加了label:ascend-cla/yes
此处折叠了47条消息 查看更多
ffmh
ffmh成员
28 天前 评论:

/lgtm

likedislike
ascend-robotascend-robot成员
28 天前 添加了label:lgtm
ascend-robotascend-robot成员
28 天前 合入了pull request
ascend-robot
ascend-robot成员
28 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
ascend-robot
ascend-robot成员
28 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13482 [ commitID:48058d80 ] 已完成
likedislike