微调的基本步骤
大模型微调的标准化流程,可以概括为:
- 找一个基座模型
- 准备训练数据(重中之重)
- 进行训练调整参数
下文基于魔搭平台提供的免费GPU环境
微调框架使用Llamafactory
1. 选择并下载模型
下载模型使用的命令:
1 2 3
| modelscope download \ --model Qwen/Qwen2.5-3B-Instruct \ --local_dir /mnt/workspace/models/Qwen2.5-3B-Instruct
|
模型对话,使用 LLaMA-Factory 自带的命令行对话:
1 2 3 4
| llamafactory-cli chat \ --model_name_or_path /mnt/workspace/models/Qwen2.5-3B-Instruct \ --template qwen \ --infer_backend huggingface
|
2. 选择并下载数据集
想将该自定义数据集放到我们的系统中使用,则需要进行如下两步操作
- 复制该数据集到 data目录下
- 修改 data/dataset_info.json 新加内容完成注册, 该注册同时完成了3件事
下载数据集:
1 2 3 4 5
| cd /mnt/workspace/LlamaFactory
modelscope download \ --dataset llamafactory/alpaca_zh \ --local_dir /mnt/workspace/LlamaFactory/data/alpaca_zh
|
在 data/dataset_info.json 最后添加一个新的本地数据集配置:
1 2 3 4 5 6 7 8 9
| "alpaca_zh_local": { "file_name": "alpaca_zh/alpaca_data_zh_51k.json", "formatting": "alpaca", "columns": { "prompt": "instruction", "query": "input", "response": "output" } }
|
因为魔搭的notebook对json文件只读,编辑不了
直接在当前目录执行下面的 Python 修改脚本即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| cd /mnt/workspace/LlamaFactory
cp data/dataset_info.json data/dataset_info.json.bak
python - <<'PY' import json from pathlib import Path
path = Path("data/dataset_info.json")
with path.open(encoding="utf-8") as f: info = json.load(f)
info["alpaca_zh_local"] = { "file_name": "alpaca_zh/alpaca_data_zh_51k.json", "formatting": "alpaca", "columns": { "prompt": "instruction", "query": "input", "response": "output" } }
with path.open("w", encoding="utf-8") as f: json.dump(info, f, ensure_ascii=False, indent=2) f.write("\n")
print("dataset_info.json 已更新") PY
|
3. 正式训练
在Llamafactory目录下新建一个qwen2.5_3b_alpaca_zh_lora.yaml配置文件
yaml文件配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| model_name_or_path: /mnt/workspace/models/Qwen2.5-3B-Instruct trust_remote_code: true
stage: sft do_train: true finetuning_type: lora lora_rank: 8 lora_target: all
dataset: alpaca_zh_local dataset_dir: /mnt/workspace/LlamaFactory/data template: qwen cutoff_len: 2048 max_samples: 1000 preprocessing_num_workers: 8 dataloader_num_workers: 2
output_dir: /mnt/workspace/LlamaFactory/saves/qwen2.5-3b/lora/alpaca_zh logging_steps: 10 save_steps: 100 plot_loss: true overwrite_output_dir: true save_only_model: false report_to: none
per_device_train_batch_size: 1 gradient_accumulation_steps: 8 learning_rate: 1.0e-4 num_train_epochs: 3.0 lr_scheduler_type: cosine warmup_ratio: 0.1 bf16: true ddp_timeout: 180000000 resume_from_checkpoint: null
|
正式训练命令:
1 2 3
| CUDA_VISIBLE_DEVICES=0 \ llamafactory-cli train \ /mnt/workspace/LlamaFactory/qwen2.5_3b_alpaca_zh_lora.yaml
|
4. 训练后验证
训练完之后,加载微调后的 adapter进行对话:
1 2 3 4 5 6 7
| cd /mnt/workspace/LlamaFactory
llamafactory-cli chat \ --model_name_or_path /mnt/workspace/models/Qwen2.5-3B-Instruct \ --adapter_name_or_path /mnt/workspace/LlamaFactory/saves/qwen2.5-3b/lora/alpaca_zh \ --template qwen \ --infer_backend huggingface
|