简介
LLM 通用模型在各种使命上表现良好,咱们能够将它们用刁难方针使命进行微调的基础。微调允许咱们使模型适应方针域和方针使命,使其能够更好地完成咱们所需要的特定的使命。
目前模型微调办法首要有 Full(全参微调)、Freeze、P-tuning、LoRA、QLora,这些这些办法都各有优势,关于它们的介绍也有很多,本篇首要讲解代码完成,原理方面就不赘述了,相同考虑到不是一切读者都有满足的算力,因而运用占用资源最少的 QLora 对模型进行微调,各个微调方法占用资源如下图所示(batch_size 设置为 1)。

这里推荐运用 firefly(流萤)项目来完成模型微调,这个项目首要是为了微调多轮对话数据集,不过单轮对话也相同适用。
Firefly 项目练习多轮对话模型时,采取了一种愈加充沛高效的办法。如下图所示,将一条多轮对话数据拼接之后,输入模型,并行核算每个方位的 loss,只要 Assistant 部分的 loss 参与权重更新。

练习环境装备
首先 pull 项目并装备环境:
git clone https://github.com/yangjianxin1/Firefly.git
cd Firefly
pip install -r requirements.txt
然后找到 1. Firefly/train_args/sft/qlora 途径下的 qwen-7b-sft-qlora.json(尽管文件名是 7b 但是 qwen 都能够通用),对里面的内容进行修正,首要修正模型途径和练习文件,其余参数能够看着修正。
{
"output_dir": "output/firefly-qwen-1_8b-sft-qlora",
"model_name_or_path": "Qwen/Qwen-1_8B-Chat",
"train_file": "./data/dummy_data.jsonl",
"template_name": "qwen",
"num_train_epochs": 1,
"per_device_train_batch_size": 1,
"gradient_accumulation_steps": 16,
"learning_rate": 2e-4,
"max_seq_length": 1024,
"logging_steps": 100,
"save_steps": 100,
"save_total_limit": 1,
"lr_scheduler_type": "constant_with_warmup",
"warmup_steps": 100,
"lora_rank": 64,
"lora_alpha": 128,
"lora_dropout": 0.05,
"gradient_checkpointing": true,
"disable_tqdm": false,
"optim": "paged_adamw_32bit",
"seed": 42,
"fp16": true,
"report_to": "tensorboard",
"dataloader_num_workers": 0,
"save_strategy": "steps",
"weight_decay": 0,
"max_grad_norm": 0.3,
"remove_unused_columns": false
}
数据预备
这里的数据集是官方提供的一个测试数据集,用于跑通流程,以下是其间一条数据:

开端练习
使用以下代码开端练习:
python train.py --train_args_file train_args/sft/qlora/qwen-7b-sft-qlora.json
练习完成后会在装备文件中设置的 output_dir 生成对应的 QLora 文件,可使用 Firefly/script/chat 途径下的两个脚本进行调用来测试模型微调的效果。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。