Pytorch FutureWarning of _check_is_size

用户运行 bitsandbytes 库(例如结合 transformers、accelerate 加载量化模型)时,在标准输出或日志中反复出现 FutureWarning。该警告不影响运行结果,但会造成日志污染,同时提示将来可能移除该 API。

Pytorch FutureWarning of _check_is_size

Pytorch FutureWarning of _check_is_size

快速结论:该 FutureWarning 由 PyTorch 2.11+ 废弃 `torch._check_is_size` 函数引发,用户常在使用 bitsandbytes 执行量化或 4-bit 推理时看到。优先升级 bitsandbytes 到 >=0.49.2 或确认 PyTorch 版本是否过于激进。

问题场景

用户运行 bitsandbytes 库(例如结合 transformers、accelerate 加载量化模型)时,在标准输出或日志中反复出现 FutureWarning。该警告不影响运行结果,但会造成日志污染,同时提示将来可能移除该 API。

报错原文

FutureWarning: _check_is_size will be removed in a future PyTorch release along with guard_size_oblivious.
Use _check(i >= 0) instead.
  torch._check_is_size(blocksize)

在 issue 中,用户实际触发位置包括:

/home/user/venv/lib/python3.12/site-packages/bitsandbytes/backends/default/ops.py:223
torch._check_is_size(blocksize)
/home/user/venv/lib/python3.12/site-packages/bitsandbytes/backends/cpu/ops.py:132
torch._check_is_size(blocksize)

原因分析

根本原因:PyTorch 在 commit e58ebc5(PR #169400)中移除了 torch._check_is_size 函数并改用 torch._check(i >= 0)。用户环境中的 PyTorch 2.11.0+ 已经标记该函数为废弃,而 bitsandbytes 0.49.2 仍使用旧 API。PyTorch _check_is_size 是在 PyTorch 2.0~2.2 期间为 torch.compile 生态添加的内置检查函数,并非最早期版本就含有,因此跨版本兼容性需要额外处理。

可能原因:

  • 用户将 bitsandbytes 与实验性 PyTorch 版本(如 2.11.x)搭配使用,但 bitsandbytes 尚未完全适配。
  • 同一环境下存在 _check_is_size 缓存的编译产物(如 torch.compile 产生的 .so 文件),但 issue 未提供直接证据。

环境排查

  • Python 版本:本文案例为 3.12(确认不影响核心逻辑)
  • CUDA / ROCm:案例中使用 CUDA 13.0
  • PyTorch 版本:torch.__version__ → 2.11.0+cu130
  • bitsandbytes 版本:bitsandbytes.__version__ → 0.49.2
  • 依赖检查:确认导入时是否出现 FutureWarning,以及是否同时使用了 torch.compiletorch.fx 等需要编译图的特性。

解决步骤

  1. 确认 bitsandbytes 是否已有修复版本:访问 bitsandbytes 官方 GitHub 仓库,查看最新 release 是否包含对 _check_is_size 的替换。本 issue 讨论的提交仅为概念性修复,尚未进入正式 release。

  2. 手动修补源码(可优先尝试):如果无法等待官方发布,可临时修改 bitsandbytes 源码中的两处调用。找到 default/ops.pycpu/ops.py 中的 torch._check_is_size(blocksize) 替换为:

    torch._check(blocksize >= 0, lambda: f"Blocksize must be non-negative, got {blocksize}")

    注意:此替换在 PyTorch 2.0 以下不可用(torch._check 不存在),因此仅适用于 torch 2.0+。

  3. 降级 PyTorch(回退方案):将 PyTorch 降至 2.4.x2.3.x,此时 _check_is_size 尚未被废弃,可完全避免该警告。降级前需确认与 CUDA 版本的兼容性。

  4. 忽略 FutureWarning:如果对功能无实际影响,可在代码前添加 import warnings; warnings.filterwarnings('ignore', category=FutureWarning) 临时屏蔽日志污染,但 issue 中未推荐此方案作为长期做法。

验证方法

  • 重新运行原本产生警告的脚本或模型加载命令,确认 FutureWarning 不再出现。
  • 对于手动修补方案,执行 bitsandbytes 的单元测试(如 python -m pytest tests/)确保替换后未破坏其他检查逻辑。
  • 检查 torch._check_is_size 不再被任何 bitsandbytes 模块引用:grep -r "_check_is_size" /path/to/bitsandbytes/

参考来源

bitsandbytes-foundation/bitsandbytes #1933

PyTorch 变更链:pytorch/pytorch #169400

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 9034

发表回复

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