使用bitsandbytes量化Llama 3.1 70B模型后加载报错求助
问题原因与解决方案
报错根源
直接用save_pretrained保存bitsandbytes量化后的模型时,只会存储量化后的权重,不会保留量化过程中生成的bitsandbytes__*前缀统计信息——这些是加载时动态生成的临时状态,不属于模型state dict的一部分。而你加载时再次传入quantization_config,会触发重新量化流程,此时保存的权重已经是量化后的,没有原始权重供新的量化流程读取,因此报错。
另外,加载时误用了AutoModel类,Llama 3.1是因果语言模型,应该用AutoModelForCausalLM匹配模型结构。
修复步骤
- 移除加载时的
quantization_config参数:模型已经是量化后的,无需重复触发量化流程 - 使用正确的模型加载类:替换
AutoModel为AutoModelForCausalLM - 保持设备与 dtype 配置一致:加载时沿用保存模型时的
device_map、torch_dtype等参数,确保模型正确分配资源
修改后的加载代码
# 正确加载量化后的模型 loaded_model = AutoModelForCausalLM.from_pretrained( pt_save_directory, device_map="auto", torch_dtype=torch.bfloat16, low_cpu_mem_usage=True ) # 验证加载是否成功 inputs = tokenizer("Hello, this is a test", return_tensors="pt").to(loaded_model.device) outputs = loaded_model.generate(**inputs, max_new_tokens=20) print(tokenizer.decode(outputs[0], skip_special_tokens=True))
额外注意事项
- 如果后续需要对量化模型微调,建议结合PEFT框架,避免直接修改量化权重导致兼容性问题
- 保存量化模型时,
save_pretrained会自动保存模型配置文件,无需额外操作
内容的提问来源于stack exchange,提问作者Luis Leal
相关产品推荐
相关产品推荐

