入门大模型微调问题一

大模型微调报错记录

学习过程中所遇报错记录、分享

lora微调使用gptq量化模型

使用的微调工具是fastchat,微调模型是qwen1.5 gptq量化过的。在执行中报错“libcudart.so.12 no obejct file”。
环境中python库:
auto_gptq 2.3.5
deepspeed 0.13.5
flash-attn 2.3.0
torch 2.0.1+cu117
torchaudio 2.0.2+cu117
torchvision 0.15.2+cu117
transformers 4.38.2
optimum 1.13.2
cuda 驱动版本是11.7, nvcc 11.7
这个报错是因为auto_gptq包引起的,需要包卸载,重新安装。
安装参考指令:“pip install auto-gptq --extra-index-url https://huggingface.github.io/autogptq-index/whl/cu117/”

如果你的cuda可以更新的12版,也可以把驱动和相关的包都适配到cuda12版。

使用deepspeed 配置把训练放到gpu上报错:
ValueError: Found modules on cpu/disk. Using Exllama backend requires all the modules to be on GPU.You can deactivate exllama backend by setting disable_exllama=True in the quantization config object
确定pip 的依赖torch与cuda驱动是否匹配。

### Transformer 大模型微调入门教程 #### 、理解微调的概念及其重要性 微调是指在预训练好的大规模语言模型基础上,针对特定任务或领域数据集进行进步训练的过程。通过这种方式可以使得通用性强的大规模预训练模型更好地适应具体应用场景下的需求[^1]。 #### 二、准备环境与工具包安装 为了能够顺利开展基于Transformer架构的大模型微调工作,需要提前准备好相应的开发环境并安装必要的Python库文件。这里推荐使用`transformers`库来加载预训练模型,并利用`datasets`处理自定义的数据集合;同时借助于`accelerate`加速分布式训练过程,提高效率[^2]。 ```bash pip install transformers datasets accelerate torch ``` #### 三、获取预训练模型及配置参数调整 从Hugging Face Model Hub下载所需的预训练权重文件(例如BERT、RoBERTa等),并通过修改部分超参设置以满足目标任务的要求。比如,在情感分类场景下可适当减少隐藏层维度大小从而降低过拟合风险的同时保持较好的泛化能力[^3]。 ```python from transformers import AutoModelForSequenceClassification, AutoTokenizer model_name = "bert-base-uncased" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained( model_name, num_labels=2, # 设置标签数量为2表示二元分类问题 ignore_mismatched_sizes=True # 当前版本可能与原始预训练不完全匹配时忽略尺寸差异 ) ``` #### 四、构建适配器结构实现高效迁移学习 考虑到直接全量更新整个网络可能会破坏原有良好特性的情况,因此建议采用Parameter-Efficient Fine-Tuning (PEFT)技术中的LoRA(低秩分解)方案来进行局部优化操作。这样既能在定程度上保留住原生性能优势又不会引入过多额外计算开销。 ```python from peft import LoraConfig, get_peft_model lora_config = LoraConfig(r=8, lora_alpha=16, target_modules=["query", "value"]) peft_model = get_peft_model(model, lora_config) for name, param in peft_model.named_parameters(): if 'adapter' not in name: param.requires_grad_(False) ``` #### 五、编写训练脚本完成最终部署上线 最后步则是按照标准流程组织好输入输出格式后执行迭代式的监督式学习循环直至收敛稳定为止。期间还需注意监控各项指标变化趋势以便及时作出相应调整措施确保整体效果达到预期目标水平之上。 ```python import evaluate metric = evaluate.load("accuracy") def compute_metrics(eval_pred): logits, labels = eval_pred predictions = np.argmax(logits, axis=-1) return metric.compute(predictions=predictions, references=labels) training_args = TrainingArguments(output_dir="./results", evaluation_strategy="epoch", learning_rate=5e-5, per_device_train_batch_size=8, per_device_eval_batch_size=8, weight_decay=0.01, save_total_limit=2) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=test_dataset, tokenizer=tokenizer, data_collator=data_collator, compute_metrics=compute_metrics ) trainer.train() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值