这个坑值得记一笔。用 transformers 4.46 加载 4bit 量化模型,启动报 ImportError,原文 bitsandbytes>=0.43.3 is required,环境里装的是 0.41.1,pip 又不敢随便升,怕影响别的服务。
刚开始盯着「CUDA 版本与 bnb wheel 不匹配,装了也加载失败」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。新版本 transformers 提高了 bitsandbytes 的最低版本;虚拟环境里装了多份 bnb,导入命中的是旧那份;量化配置里 bnb_4bit_use_double_quant 需要更新的实现。
先看当前环境里 bnb 的实际版本与路径
python -c "import bitsandbytes as b;print(b.__version__, b.__file__)"
接着按 CUDA 版本装匹配的 wheel
pip install bitsandbytes==0.44.1 --no-cache-dir
然后验证 4bit 配置能构建
python -c "from transformers import BitsAndBytesConfig;print(BitsAndBytesConfig(load_in_4bit=True))"
末了加载模型并打印显存占用
python -c "import torch;print(torch.cuda.memory_allocated()/1024**3)"
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
中途换过一次思路,把范围缩到最小的那一层,反而快了。
怎么算真的好了,看的是同一批现象。模型能正常加载,显存占用与之前相当,日志里没有 bitsandbytes 版本告警。
量化相关的版本约束最紧,升级时把 bnb、torch、transformers 三个版本一起对齐再动手。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
