
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.compile或torch.fx等需要编译图的特性。
解决步骤
-
确认 bitsandbytes 是否已有修复版本:访问 bitsandbytes 官方 GitHub 仓库,查看最新 release 是否包含对
_check_is_size的替换。本 issue 讨论的提交仅为概念性修复,尚未进入正式 release。 -
手动修补源码(可优先尝试):如果无法等待官方发布,可临时修改 bitsandbytes 源码中的两处调用。找到
default/ops.py和cpu/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+。 -
降级 PyTorch(回退方案):将 PyTorch 降至
2.4.x或2.3.x,此时_check_is_size尚未被废弃,可完全避免该警告。降级前需确认与 CUDA 版本的兼容性。 -
忽略 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



