valueError:为层提供的状态字典不包含`bitsandbytes__*`以及可能的其他`quantized_stats`(当加载保存的量化模型时)

问题描述 投票:0回答:1

我们正在尝试部署量化的 Llama 3.1 70B 模型(来自 Huggingface,使用位和字节),量化部分工作正常,因为我们检查模型内存是否正确,并测试模型的预测,这也是正确的,问题是:保存量化模型然后加载后,我们得到

valueError:为layers.0.mlp.down_proj.weight提供的状态字典确实 不包含

bitsandbytes__*
以及可能其他
quantized_stats
组件

我们所做的是:

  • 使用通常的 save_pretrained(save_dir) 保存量化模型
  • 尝试使用 AutoModel.from_pretrained 加载模型,传递 save_dir 和创建模型时使用的相同 quantization_config。

这是代码:

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
                                     )
python artificial-intelligence huggingface-transformers large-language-model quantization
1个回答
0
投票

这是 _load_pretrained_model() 函数中的一个错误 加载分片权重文件时的transformers/modeling_utils.py。这 state_dict 应用于每个分片的空模型。这是有问题的,因为 量化权重及其元数据(*.quant_state.bitsandbytes__nf4)可能是 存储在不同的分片中。 快速而肮脏的修复是合并张量 从所有分片到一个 state_dict。 unsloth github 问题 638

上也报告了类似的问题
© www.soinside.com 2019 - 2024. All rights reserved.