微调Mistral 7B模型时遇ValueError参数冲突错误求助
解决Mistral 7B微调的参数冲突问题
这个错误的核心是重复配置了4bit加载参数:你既在BitsAndBytesConfig实例里设置了load_in_4bit=True,又在AutoModelForCausalLM.from_pretrained()中单独传入了load_in_4bit=True——这两个参数是互斥的,只能二选一。
两种可行的修改方案
方案一:保留quantization_config(推荐)
直接移除from_pretrained中的load_in_4bit=True参数,用BitsAndBytesConfig统一管理量化配置,修改后的代码如下:
# Load base model(Mistral 7B) bnb_config = BitsAndBytesConfig( load_in_4bit= True, bnb_4bit_quant_type= "nf4", bnb_4bit_compute_dtype= torch.bfloat16, bnb_4bit_use_double_quant= False, ) model = AutoModelForCausalLM.from_pretrained( base_model, quantization_config=bnb_config, torch_dtype=torch.bfloat16, device_map="auto", trust_remote_code=True, ) model.config.use_cache = False # silence the warnings. Please re-enable for inference! model.config.pretraining_tp = 1 model.gradient_checkpointing_enable() # Load tokenizer tokenizer = AutoTokenizer.from_pretrained(base_model, trust_remote_code=True) tokenizer.padding_side = 'right' tokenizer.pad_token = tokenizer.eos_token tokenizer.add_eos_token = True tokenizer.add_bos_token, tokenizer.add_eos_token
方案二:直接在from_pretrained中传量化参数
如果你不想用BitsAndBytesConfig,可以删掉相关配置代码,直接把量化参数传入from_pretrained:
# Load base model(Mistral 7B) model = AutoModelForCausalLM.from_pretrained( base_model, load_in_4bit=True, bnb_4bit_quant_type= "nf4", bnb_4bit_compute_dtype= torch.bfloat16, bnb_4bit_use_double_quant= False, torch_dtype=torch.bfloat16, device_map="auto", trust_remote_code=True, ) model.config.use_cache = False # silence the warnings. Please re-enable for inference! model.config.pretraining_tp = 1 model.gradient_checkpointing_enable() # Load tokenizer tokenizer = AutoTokenizer.from_pretrained(base_model, trust_remote_code=True) tokenizer.padding_side = 'right' tokenizer.pad_token = tokenizer.eos_token tokenizer.add_eos_token = True tokenizer.add_bos_token, tokenizer.add_eos_token
注意:方案一的配置方式更清晰,后续修改量化参数时只需调整bnb_config即可,更便于维护。
内容的提问来源于stack exchange,提问作者Jyoti yadav
相关产品推荐
相关产品推荐

