已开启
[Bug]: 【硬件解耦任务】test_qlinear_packed_params.py 用例运行失败--weights-only 默认加载策略与完整模块反序列化不兼容导致 UnpicklingError,A5 环境复现 #457
kevin_lee1231创建于 5 天前
5 天前 添加了label:help-wantedbot-triagedevent: accelerator-agnostic
TorchNPU-Bot
5 天前 评论:
5 天前 评论:
检测到社区任务相关 issue,自动添加标签:event: accelerator-agnostic、help-wanted


5 天前 添加了label:bug
5 天前 关联了pull request:【社区任务】Ascend for PyTorch测试用例解耦(6) 交付件补充 NPU 失败 issue 链接
5 天前 修改了issue 的描述
环境信息
🐛 问题描述
1、背景
测试用例重构倡议(pytorch/pytorch#185590)任务 6:
test/ao/sparsity/test_qlinear_packed_params.py(上游分类 PR pytorch/pytorch#193177 已合入,交付 PR pytorch-ecosystem!33)的 3 条用例在 NPU 环境运行全部失败。失败性质为框架兼容性(错误类型:功能不支持/反序列化限制),非解耦代码问题:A/B 实证显示未修改的原始测试源码在相同环境下失败集合逐字一致,单独设置
TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD=1后 3/3 通过(详见交付报告 4.2/4.3 节)。历史验证(2026-09-14)A2(910B3)与 A5(950PR)双环境均失败;2026-10-09 在 A5 新环境(torch 2.15.0a0+git70c2918 + torch_npu 2.15.0+git9cd8d1f)复现,报错依旧。2、复现步骤
前置条件:venv(torch + torch_npu)环境。
cd pytorch/test/ao/sparsity python -m unittest test_qlinear_packed_params -v注意:该测试文件无
__main__入口,需通过python -m unittest或 pytest 运行。涉及用例(3 条,Node ID):
TestQlinearPackedParams::test_qlinear_packed_params_fbgemmTestQlinearPackedParams::test_qlinear_packed_params_fbgemm_qnnpack_cross_compatibilityTestQlinearPackedParams::test_qlinear_packed_params_qnnpack3、报错日志
3 条用例全部报同一错误(ERROR,
Ran 3 tests ... FAILED (errors=3)):错误关键帧:
4、原因分析
错误类型为
_pickle.UnpicklingError,源于 torch.load weights-only 默认加载策略与完整模块反序列化写法不兼容:torch.save(lin, ...)保存完整的稀疏量化Linear模块(torch.ao.nn.sparse.quantized.dynamic.linear.Linear),再用未显式指定weights_only的torch.load(...)读取,验证打包参数的序列化/反序列化与 FBGEMM/QNNPACK 跨引擎兼容性;该写法在 CPU/CUDA 的社区 CI 中通过;torch.load默认weights_only=True,该模块类型不在默认允许列表中,加载即抛UnpicklingError;torch.save(完整模块)→torch.load()(默认 weights-only) →_weights_only_unpickler拒绝未授权全局 → 3 条用例 ERROR;torch.backends.quantized.supported_engines含 qnnpack/fbgemm)。修复方向分析(供参考):
方向 1:环境侧兼容(torch_npu / 运行环境)——将
torch.ao.nn.sparse.quantized.dynamic.linear.Linear及稀疏量化模块相关类型纳入反序列化安全全局列表(torch.serialization.add_safe_globals),或在环境初始化中提供兼容加载配置;对用户自行加载完整模块的场景可给出显式报错提示。方向 2:上游测试语义适配(pytorch 侧)——测试以显式
weights_only=False(或safe_globals上下文)调用torch.load,使序列化语义显式化;该改动涉及社区测试语义,需上游社区评审。在修复前,可通过
TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD=1临时处置(诊断验证 3/3 通过),但该变量不应作为默认运行方式。关联信息
标签建议
欢迎加入社区,感谢您对社区的贡献 🎉