RuntimeError: Cannot use “weights_only=True“ with TorchScript archives passed to “torch.load“. In PyTorch 2.6, we changed the default value of the `weights_only` argument in `torch.load` fro

该报错通常出现在使用 IntelEmbedding 加载 TorchScript 格式模型(如 Intel/bge-small-en-v1.5-rag-int8-static )时。PyTorch 2.6 将 torch.load 的 weights_only 默认值改为 True ,而 Torch

快速结论:该报错通常出现在使用 IntelEmbedding 加载 TorchScript 格式模型(如 Intel/bge-small-en-v1.5-rag-int8-static)时。PyTorch 2.6 将 torch.load 的 weights_only 默认值改为 True,而 TorchScript 归档与该设置不兼容,因此在模型加载阶段触发 RuntimeError: Cannot use ``weights_only=True`` with TorchScript archives passed to ``torch.load``.。优先排查 PyTorch 版本、模型是否为 TorchScript 格式,以及 optimum-intel / transformers 的加载路径。

适用环境:Issue 已确认的信息:LlamaIndex 0.12.46;Python 3.12;依赖 optimum-intel 与 transformers;操作系统与 CUDA 版本未在 Issue 中明确给出。相关说明指出问题与 PyTorch 2.6 的默认行为变化有关。

最快修复方案:暂无确认的一步修复方案。Issue 回复明确表示 LlamaIndex 当前没有官方绕过方案。可优先尝试:降级到 PyTorch 2.5,或改用非 TorchScript 格式的模型,或等待 optimum-intel / transformers 上游支持对这类模型传入 weights_only=False。

注意事项:手动将 weights_only 设为 False 可能带来任意代码执行风险,仅应在模型来源可信时考虑。上述绕过方式均未在 Issue 中标记为已验证修复;该问题不限于 LlamaIndex,任何在 PyTorch 2.6 + optimum-intel / transformers 下加载 TorchScript 模型的场景都可能受影响。

问题场景

用户按照 LlamaIndex 文档中 Optimum Intel 的嵌入示例,直接构造 IntelEmbedding("Intel/bge-small-en-v1.5-rag-int8-static")。构造函数内部通过 IPEXModel.from_pretrained(folder_name) 加载模型,最终调用到 torch.load,在权重反序列化阶段失败。

报错原文

RuntimeError: Cannot use ``weights_only=True`` with TorchScript archives passed to ``torch.load``. In PyTorch 2.6, we changed the default value of the `weights_only` argument in `torch.load` from `False` to `True`. Re-running `torch.load` with `weights_only` set to `False` will likely succeed, but it can result in arbitrary code execution. Do it only if you got the file from a trusted source.

该 RuntimeError 之后还伴随 UnicodeDecodeError 与 OSError,它们是在处理首个异常时对二进制权重文件按文本读取产生的次级异常,根因仍是 torch.load 的 weights_only 不兼容。

原因分析

最可能的原因是 PyTorch 版本升级带来的默认值变更:从 PyTorch 2.6 起,torch.load 的 weights_only 默认由 False 改为 True。而 Intel/bge-small-en-v1.5-rag-int8-static 属于 TorchScript 归档,传入 weights_only=True 时会直接报错。

LlamaIndex 的 IntelEmbedding 把模型加载交给 optimum-intel,后者再经由 transformers 调用 torch.load;LlamaIndex 自身没有暴露设置 weights_only 或捕获该错误的入口,因此用户侧无法在 LlamaIndex 参数层面修复。

环境排查

  • 确认所装 PyTorch 版本是否为 2.6 或以上(该版本修改了 weights_only 默认值)。
  • 确认是否安装了 optimum[exporters]、optimum-intel、neural-compressor、intel_extension_for_pytorch 等 Optimum Intel 相关依赖。
  • 确认 Python 版本(Issue 中为 3.12)及 transformers 版本。
  • 确认目标模型是否为 TorchScript 格式;可尝试替换为其他非 TorchScript 的嵌入模型对照验证。
  • CUDA、显卡型号在 Issue 中未给出,如涉及 GPU 推理可一并记录。

解决步骤

  1. 记录当前 PyTorch 版本,确认是否处于 2.6 及以上,这是触发报错的直接前提。
  2. 可优先尝试降级到 PyTorch 2.5,使 torch.load 的 weights_only 恢复为 False,再运行相同的 IntelEmbedding 示例验证。
  3. 若不能降级 PyTorch,可优先尝试改用非 TorchScript 格式的嵌入模型,避开对该归档类型的加载路径。
  4. 关注 optimum-intel 与 transformers 的上游修复,等待其支持对 TorchScript 模型显式传入 weights_only=False 后升级依赖。
  5. 不要直接修改 LlamaIndex 的 IntelEmbedding 源码来绕过;Issue 中指出 LlamaIndex 未将 weights_only 作为可控项暴露,此类改动缺乏官方支持。

验证方法

调整环境或模型后,重新运行 Issue 中的最小复现代码:IntelEmbedding("Intel/bge-small-en-v1.5-rag-int8-static")(或采用的替代模型)。若不再出现 Cannot use ``weights_only=True`` with TorchScript archives passed to ``torch.load``. 并能成功构造 embed_model、后续执行 VectorStoreIndex.from_documents,即说明加载路径已恢复正常。

参考来源

run-llama/llama_index #19328

Issue 评论中提到的相关报告:run-llama/llama_index #17985

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29781

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注