我们正在尝试部署量化的 Llama 3.1 70B 模型(来自 Huggingface,使用位和字节),量化部分工作正常,因为我们检查模型内存是否正确,并测试模型的预测,这也是正确的,问题是:保存量化模型然后加载后,我们得到
valueError:为layers.0.mlp.down_proj.weight提供的状态字典确实 不包含
以及可能其他bitsandbytes__*
组件quantized_stats
我们所做的是:
这是代码:
model_id = "meta-llama/Meta-Llama-3.1-70B-Instruct"
cache_dir = "/home/ec2-user/SageMaker/huggingface_cache"
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
model_4bit = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
torch_dtype=torch.bfloat16,
quantization_config=quantization_config,
low_cpu_mem_usage=True,
offload_folder="offload",
offload_state_dict=True,
cache_dir=cache_dir
)
tokenizer = AutoTokenizer.from_pretrained(model_id,cache_dir=cache_dir)
pt_save_directory = "test_directory"
tokenizer.save_pretrained(pt_save_directory,)
model_4bit.save_pretrained(pt_save_directory)
## test load it
loaded_model = AutoModel.from_pretrained(pt_save_directory,
quantization_config=quantization_config
)
这是 _load_pretrained_model() 函数中的一个错误 加载分片权重文件时的transformers/modeling_utils.py。这 state_dict 应用于每个分片的空模型。这是有问题的,因为 量化权重及其元数据(*.quant_state.bitsandbytes__nf4)可能是 存储在不同的分片中。 快速而肮脏的修复是合并张量 从所有分片到一个 state_dict。 unsloth github 问题 638
上也报告了类似的问题