2024中文LLM微调挑战赛:BELLE模型训练全攻略
你还在为中文大模型微调效果不佳而困扰?还在纠结全参数微调与LoRA的取舍?本文将以BELLE开源项目为基础,带你从零掌握中文LLM微调技术,轻松应对2024年度微调挑战赛。读完本文你将获得:BELLE模型训练全流程指南、不同微调方法对比分析、实战案例代码解析以及评估优化技巧。
一、挑战赛背景与目标
BELLE(Be Everyone's Large Language model Engine)是一个开源中文对话大模型项目,致力于降低中文大语言模型的研究和应用门槛。本次微调挑战赛旨在推动中文LLM微调技术的发展,鼓励开发者探索更高效、更优质的微调方法。
1.1 项目核心内容
BELLE项目提供了完整的训练代码、开放数据集、验证集合与方法、多种模型以及相关技术分析,为挑战赛提供了坚实的技术支撑。
- 训练代码:详见BELLE/train,集成了Deepspeed-Chat,支持全参数微调、LoRA等多种训练方法,并提供了相关的docker环境。
- 数据开放:包含1.5M、10M等多个规模的中文数据集,如train_3.5M_CN_With_Category。
- 验证集合&方法:详见BELLE/eval,包含一个1k+的测试集合和对应打分prompt,采用GPT-4或者ChatGPT打分。
- 模型:基于LLaMA、BLOOMZ等基础模型优化后的多个中文模型,如BELLE-Llama2-13B-chat-0.4M。
1.2 挑战赛任务
参赛者需基于BELLE提供的代码和数据,对指定模型进行微调,以在给定的评估集上取得最优性能。评估指标将综合考虑模型在多个任务上的表现,包括问答、对话、推理等。
二、BELLE模型训练环境搭建
2.1 Docker环境(推荐)
BELLE提供了完整可运行的Docker镜像,简化了环境配置过程。
sudo docker pull tothemoon/belle:latest
git clone https://gitcode.com/gh_mirrors/be/BELLE
运行Docker容器的命令如下:
sudo docker run --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 \
--network host \
--privileged \
--env HF_HOME=$hf_home \
-it \
--name belle \
-v $belle_path:$belle_path \
-v $hf_home:$hf_home \
-w $workdir \
tothemoon/belle:latest \
/bin/bash
上述命令实现了拉取镜像、克隆仓库、挂载目录等功能,具体参数说明可参考docker环境说明。
2.2 Conda环境(不推荐)
若无法使用Docker,也可通过conda创建环境,但需自行解决依赖问题:
pip install -r requirements.txt
关于Deepspeed的安装问题,可参考FAQ。
三、微调方法详解
BELLE支持多种微调方法,包括全参数微调(FT)、LoRA以及RLHF(PPO、DPO)等。
3.1 全参数微调
全参数微调是对模型所有参数进行更新,通常能取得较好的效果,但计算成本较高。
3.1.1 数据准备
全参数微调的数据格式与指令微调类似,具体可参考相关数据集说明。
3.1.2 训练脚本
bash train/scripts/run_sft.sh
详细参数设置可参考README_FT.md。
3.2 LoRA微调
LoRA(Low-Rank Adaptation)是一种参数高效的微调方法,通过冻结预训练模型的大部分参数,仅更新少量适配器参数来实现微调。
3.2.1 数据准备
与全参数微调类似,但可能需要针对特定任务进行数据筛选和预处理。
3.2.2 训练脚本
bash train/scripts/run_lora.sh
LoRA配置文件可参考configs/lora_config_llama.json和configs/lora_config_bloom.json。
3.3 RLHF训练
RLHF(Reinforcement Learning from Human Feedback)通过人类反馈的强化学习进一步提升模型性能,BELLE支持PPO和DPO两种方法。
3.3.1 PPO训练
PPO(Proximal Policy Optimization)是一种常用的强化学习算法。
- 奖励模型训练:
bash train/scripts/run_rm.sh
- PPO训练:
bash train/scripts/run_ppo.sh
详细流程可参考README_RLHF.md。
3.3.2 DPO训练
DPO(Direct Preference Optimization)是一种直接优化偏好的方法,无需训练奖励模型。
- 数据准备:
数据格式如下:
{"chosen":xxx, "reject":xxx, "prompt":xxx}
一条数据样例:
{"chosen": "水的化学式是H2O。这意味着每个水分子由两个氢原子(H)和一个氧原子(O)组成。在这个结构中,氢原子和氧原子通过共价键相连。", "rejected": "H2O.", "prompt": "Human: \n水的化学式是什么?\n\nAssistant: \n"}
- 训练脚本:
cd train/scripts
bash run_dpo.sh
四、微调方法对比与选择
不同的微调方法各有优缺点,参赛者需根据自身资源和任务需求选择合适的方法。
4.1 性能对比
以下是BELLE技术分析中不同微调方法的性能对比:
| Model | Average Score | Additional Param. | Training Time (Hour/epoch) |
|---|---|---|---|
| LLaMA-13B + LoRA(2M) | 0.648 | 28M | 8 |
| LLaMA-7B + LoRA(4M) | 0.624 | 17.9M | 11 |
| LLaMA-7B + FT(2M) | 0.710 | - | 31 |
| LLaMA-7B + FT(2M) + LoRA(math_0.25M) | 0.729 | 17.9M | 3 |
| LLaMA-7B + FT(2M) + FT(math_0.25M) | 0.738 | - | 6 |
数据来源:A Comparative Study between Full-Parameter and LoRA-based Fine-Tuning on Chinese Instruction Data for Instruction Following Large Language Model
从表格中可以看出,全参数微调(FT)通常能取得更高的性能,但训练时间更长,参数更新量更大;LoRA微调则在参数效率和训练速度上具有优势,适合资源有限的情况。
4.2 评估集分布
BELLE的评估集包含多个类别,分布如下:
了解评估集的分布有助于选择合适的微调策略,针对重点类别进行优化。
五、实战案例:中文LLM微调步骤
5.1 数据准备与预处理
- 下载BELLE提供的数据集,如train_3.5M_CN_With_Category。
- 对数据进行清洗和过滤,去除低质量样本。
- 根据任务需求,对数据进行格式转换和划分,如划分为训练集和验证集。
5.2 模型选择与初始化
- 选择合适的基础模型,如LLaMA-7B或BELLE-Llama2-13B-chat-0.4M。
- 加载预训练模型权重,注意遵循模型的使用许可。
5.3 微调训练
以LoRA微调为例,训练步骤如下:
- 修改LoRA配置文件,设置合适的秩、学习率等参数。
- 运行训练脚本:
bash train/scripts/run_lora.sh
- 监控训练过程,观察损失、准确率等指标的变化,及时调整超参数。
5.4 模型评估与优化
- 使用BELLE/eval中的评估脚本对微调后的模型进行评估。
- 根据评估结果,分析模型的优势和不足,针对性地进行数据增强或模型调整。
- 若性能未达预期,可尝试其他微调方法,如结合全参数微调和LoRA的增量微调。
5.5 模型部署与应用
微调后的模型可用于多种中文NLP任务,如聊天机器人、智能问答等。BELLE提供了ChatBELLE App,可实现模型的本地部署和交互:
详细部署方法可参考BELLE/chat。
六、总结与展望
6.1 挑战赛要点回顾
- 熟悉BELLE项目的代码结构和数据格式,选择合适的微调方法。
- 搭建高效的训练环境,合理配置超参数,监控训练过程。
- 充分利用评估集进行模型优化,关注模型在不同任务上的综合表现。
6.2 未来展望
随着大语言模型技术的不断发展,中文LLM的微调方法将更加高效和多样化。BELLE项目也将持续更新,提供更多的训练数据、模型和工具,为中文NLP社区贡献力量。
6.3 资源与互动
欢迎大家点赞、收藏、关注本项目,获取最新动态。期待在挑战赛中看到大家的精彩表现!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





