易学探索助手-个人记录(十)
本文分享了我们基于 Qwen2.5-32B-Chat 模型,在 易学(周易)领域进行指令微调的完整实践过程。训练框架选用了轻量、灵活的 LLaMA-Factory,结合 LoRA 技术完成微调
一、实验目标
通过基于 Qwen2.5-32B 模型进行指令微调,使模型掌握以下方面的知识与能力:
-
易学基础概念(如阴阳、五行、八卦等)
-
易学体例与术语
-
易学人物与代表著作
-
古籍文辞理解与评估能力
二、数据集构建
数据集全部采用 Alpaca 格式,内容来源分为三部分:
来源 | 处理量 | 问答条数 |
---|---|---|
Self-Instruct 数据 | - | 4,475 |
易学研究论文处理 | 2,726篇 | 11,532 |
易学古籍文献 | 349本 | 16,068 |
总计 | - | 32,075 |
三、环境准备
1. Docker 镜像部署
我们基于济南 AICC 提供的 LLaMA-Factory 镜像,完成了容器环境部署:
-
拉取镜像:
docker pull aicc/llama-factory:<tag>
-
创建并启动容器:每台裸金属服务器均执行:
bash start_container.sh
-
配置环境变量:
vim ~/.bashrc # 添加环境路径等 source ~/.bashrc
2. 模型与依赖安装
每台服务器需执行:
-
创建 Python 环境
-
安装
LLaMA-Factory
项目依赖 -
下载 Qwen2.5-32B-Chat 权重文件至指定目录
/home/data/LLMs/qwen/
四、微调配置与执行
微调框架
-
使用框架:
LLaMA-Factory
-
微调方式:LoRA(全量层适配)
-
分布式训练:Deepspeed + DDP
核心配置参数如下:
# 模型参数
model_name_or_path: /home/data/LLMs/qwen/Qwen2.5-32B-Chat
finetuning_type: lora
lora_target: all# 分布式训练
deepspeed: examples/deepspeed/ds_z3_offload_config.json
ddp_timeout: 180000000# 数据参数
dataset: zhouyi
template: qwen
cutoff_len: 1024
max_samples: 100000
preprocessing_num_workers: 16# 输出设置
output_dir: /home/data/output/qwen/Qwen2.5-32B-Chat
overwrite_output_dir: true
plot_loss: true# 训练参数
per_device_train_batch_size: 4
gradient_accumulation_steps: 8
learning_rate: 1e-4
num_train_epochs: 50
lr_scheduler_type: cosine
warmup_ratio: 0.1
fp16: true
logging_steps: 10
save_steps: 500# 验证参数
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500
启动训练脚本
我们在两台服务器上分别运行如下命令,启动微调:
bash train_qwen_lora.sh
五、训练结果
训练性能与指标如下:
-
最终 epoch:49.99
-
训练 loss:0.8569
-
总 FLOPs:2.7e+17
-
每秒训练样本数:3.801
-
每秒训练步数:0.007
六、评估效果
我们使用人工评估方式对模型在不同维度进行打分,统计如下:
评估维度 | 满分 | 得分 |
---|---|---|
易学概念 | 30 | 22 |
易学体例 | 29 | 21 |
易学人物与著作 | 29 | 24 |
易学文辞理解与评估 | 32 | 30 |
总计 | 120 | 97 |
评估结论:模型在 文辞理解能力 和 人物著作识别能力 上表现出色,对于易学概念仍有一定提升空间。
七、总结
通过本次微调实践,我们验证了 LLaMA-Factory 框架在大模型 LoRA 微调中的高效性与灵活性,也证实了 Qwen2.5-32B 模型在知识型任务中的可塑性。未来我们将继续探索在更多中文垂类知识场景下的落地与优化。