更新时间:2024-12-17 GMT+08:00
分享

使用GPTQ量化

当前版本使用GPTQ量化仅支持W8A16 perchannel的量化形式,使用W8A16的量化不仅可以保证精度在可接受的范围内,同时也有一定的性能收益。

GPTQ W8A16量化支持的模型请参见表3

本章节介绍如何在GPU的机器上使用开源GPTQ量化工具GPTQ (huggingface.co)量化模型权重,然后在NPU的机器上实现推理量化。

具体操作如下:

  1. 开始之前,请确保安装了以下库:
    pip install auto-gptq
    pip install --upgrade accelerate optimum transformers
  2. 设置GPTQConfig的参数,并且创建一个数据集用于校准量化的权重,以及一个tokenizer用于准备数据集。
    from transformers import AutoModelForCausalLM, AutoTokenizer, GPTQConfig  
    model_id = "meta-llama/CodeLlama-34b-hf"
    tokenizer = AutoTokenizer.from_pretrained(model_id) 
    gptq_config = GPTQConfig(bits=8, dataset="c4", tokenizer=tokenizer, group_size=-1, damp_percent=0.01, desc_act=False, sym=True, use_exllama=False)
  3. 您也可以将自己的数据集作为字符串列表传递,但强烈建议使用GPTQ论文中的相同数据集。
    dataset = ["auto-gptq is an easy-to-use model quantization library with user-friendly apis, based on GPTQ algorithm."]
    gptq_config = GPTQConfig(bits=8, dataset=dataset, tokenizer=tokenizer, group_size=-1, damp_percent=0.01, desc_act=False, sym=True, use_exllama=False)
  4. 加载要量化的模型,并将gptq_config传递给from_pretrained()方法。
    quantized_model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", quantization_config=gptq_config)
  5. 您还可以使用save_pretrain()方法在本地保存您的量化模型。如果模型是用device_map参数量化的,请确保在保存之前将整个模型移动到GPU或CPU。例如,要将模型保存在CPU上。
    quantized_model.save_pretrained("CodeLlama-34b-hf")
    tokenizer.save_pretrained("CodeLlama-34b-hf")
    
    # if quantized with device_map set
    quantized_model.to("cpu")
    quantized_model.save_pretrained("CodeLlama-34b-hf")

相关文档