使用SFTTrainer微调Mistral模型时遇tokenizer参数错误的解决咨询
解决TRL中SFTTrainer传入tokenizer的报错问题
在TRL最新版本(v0.7及以后)中,SFTTrainer的初始化参数确实移除了tokenizer,相关配置已整合到SFTConfig中,这就是你遇到TypeError的核心原因。
正确处理步骤
将tokenizer直接传入SFTConfig的初始化参数,而非SFTTrainer,同时移除SFTTrainer中的tokenizer参数。具体修改如下:
修改训练配置部分
# Training configuration training_arguments = SFTConfig( output_dir="mistral-finetuned-alpaca", per_device_train_batch_size=8, gradient_accumulation_steps=1, optim="paged_adamw_32bit", learning_rate=2e-4, lr_scheduler_type="cosine", save_strategy="epoch", logging_steps=100, num_train_epochs=1, max_steps=250, fp16=True, packing=False, max_seq_length=512, dataset_text_field="text", push_to_hub=True, tokenizer=tokenizer # 在这里传入tokenizer )
修改Trainer初始化部分
# Initialize trainer trainer = SFTTrainer( model=model, train_dataset=data, peft_config=peft_config, args=training_arguments # 移除此处的tokenizer参数 )
关于移除tokenizer后分词报错的原因
当你不传入tokenizer时,SFTConfig会尝试从模型关联配置中自动加载tokenizer,但对于你使用的GPTQ量化模型(Mistral-7B-Instruct-v0.1-GPTQ),模型本身未绑定对应的tokenizer,因此会导致分词阶段失败。显式将tokenizer传入SFTConfig后,训练过程就能正确调用分词逻辑。
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

