微调Vigogne模型时触发IndexError报错,求解决方案
环境:AWS SageMaker Jupyter Notebook(ml.m5.2xlarge/ml.m5.4xlarge实例、Python3环境)
模型:基于Vigogne-7B-Chat(基座为decapoda-research/llama-7b-hf)
操作:已成功加载模型并完成交互,自定义数据集已完成tokenize(包含input_ids和label列),配置LoraConfig与TrainingArguments后,初始化Trainer时触发如下报错:
IndexError Traceback (most recent call last) <ipython-input-16-c4b1c566cc63> in <module> 13 model=peft_model, 14 args=peft_training_args, ---> 15 train_dataset=tokenized_data, 16 ) /opt/conda/lib/python3.7/site-packages/transformers/trainer.py in __init__(self, model, args, data_collator, train_dataset, eval_dataset, tokenizer, model_init, compute_metrics, callbacks, optimizers, preprocess_logits_for_metrics) 394 self.is_model_parallel = True 395 else: ---> 396 self.is_model_parallel = self.args.device != torch.device(devices[0]) 397 398 # warn users IndexError: list index out of range
解决思路
修正TrainingArguments的设备配置:报错根源是
devices列表为空,ml.m5系列是CPU实例,若TrainingArguments里误设了device="cuda",框架找不到GPU就会触发这个问题。把device参数设为"cpu",或者不手动指定让框架自动检测。确保PEFT模型加载到正确设备:加载PEFT模型后,执行
peft_model = peft_model.to("cpu"),保证模型设备和TrainingArguments的配置一致,避免设备不匹配引发的检测错误。升级transformers库:旧版本transformers在CPU环境下的设备检测逻辑可能存在bug,执行
pip install --upgrade transformers升级到最新稳定版,修复潜在的设备检测问题。快速验证数据集格式:虽然报错指向设备,但也可以确认tokenized_dataset是
Dataset或DatasetDict类型,且input_ids、label等字段没有空值或维度错误,排除数据集格式问题的干扰。
内容的提问来源于stack exchange,提问作者Marc.ad

