如何在vLLM中加载量化微调的LLaMA 3-8B模型实现高效推理
解决vLLM加载bitsandbytes量化微调LLaMA 3-8B模型的问题
问题原因
你遇到的ValueError: Unknown quantization method: bitsandbytes错误,本质是vLLM不支持bitsandbytes的动态量化格式。bitsandbytes的4bit/8bit量化是加载时动态量化,而vLLM仅支持静态量化格式(如AWQ、GPTQ等),当合并后的模型保留了bitsandbytes的量化配置时,vLLM会尝试识别该量化方法,进而触发报错。
解决方案
方法1:转换为vLLM支持的AWQ量化格式(推荐)
这是兼顾推理速度和显存占用的最优方案,步骤如下:
- 重新合并PEFT模型为全精度格式
之前合并时你是基于bitsandbytes量化的base模型,需要先加载全精度base模型再合并PEFT权重:from peft import PeftModel from transformers import AutoModelForCausalLM, AutoTokenizer import torch base_model_id = "meta-llama/Meta-Llama-3-8B-Instruct" peft_model_id = "BojanaBas/Meta-Llama-3-8B-Instruct-pqa-10" # 加载全精度base模型(禁用bitsandbytes量化) base_model = AutoModelForCausalLM.from_pretrained( base_model_id, torch_dtype=torch.bfloat16, device_map="auto", token=MYTOKEN ) # 合并并卸载PEFT权重 merged_model = PeftModel.from_pretrained(base_model, peft_model_id) merged_model = merged_model.merge_and_unload() # 保存全精度合并模型 merged_model.save_pretrained("./merged_full_precision") tokenizer = AutoTokenizer.from_pretrained(base_model_id) tokenizer.save_pretrained("./merged_full_precision") - 将全精度模型转换为AWQ量化格式
使用autoawq库完成量化:from awq import AutoAWQForCausalLM from transformers import AutoTokenizer model_path = "./merged_full_precision" quant_save_path = "./merged_awq_model" # AWQ 4bit量化配置 quant_config = {"zero_point": True, "q_group_size": 128, "w_bit": 4, "version": "GEMM"} # 加载模型并执行量化 model = AutoAWQForCausalLM.from_pretrained(model_path, device_map="auto") tokenizer = AutoTokenizer.from_pretrained(model_path) model.quantize(tokenizer, quant_config=quant_config) # 保存量化后的模型 model.save_quantized(quant_save_path) tokenizer.save_pretrained(quant_save_path) - 用vLLM加载AWQ量化模型
from vllm import LLM llm = LLM(model="./merged_awq_model", quantization="awq", dtype="bfloat16")
方法2:直接加载全精度合并模型(显存充足时可选)
如果你的GPU显存足够(LLaMA 3-8B的bfloat16版本约占8GB显存),可以跳过量化步骤,直接加载全精度合并模型,vLLM会自动优化推理:
from vllm import LLM merged_peft_model_name="lcass00/Meta-Llama-3-8B-Instruct-pqa-10-merged-peft" llm = LLM(model=merged_peft_model_name, dtype="bfloat16")
注意:如果之前合并的模型仍保留bitsandbytes量化配置,需要手动删除模型目录下config.json中的quantization_config字段,避免vLLM误识别。
内容的提问来源于stack exchange,提问作者Lorenzo Cassano
相关产品推荐
相关产品推荐

