大模型的微调
前言
大模型在完成训练后,其知识储备便定格于训练结束的瞬间。随着时间推移和新信息涌现,模型原有的认知会逐渐滞后。例如 AGI 概念中的 Manus 能够实现电脑自动化操控,若想让大模型具备类似的特定领域能力或新知识,就需要通过微调来打破认知固定的局限。微调不仅能使模型适应新的应用场景,还能在特定任务上显著提升性能,弥补预训练模型通用性带来的不足。
步骤
大模型微调主要包含以下六个核心步骤:
-
环境准备:需搭建 Python 编程环境,利用 Conda 进行环境管理,并配备高性能显卡以加速计算过程。
-
数据集准备:以 JSON 格式组织数据集,为模型训练提供精准的数据支撑。
-
模型准备:从 Hugging Face 等平台获取合适的预训练模型,作为微调的基础。
-
训练:运用特定工具与算法,基于准备好的数据集对模型进行针对性训练。
-
模型评估(测试):通过测试数据集对训练后的模型进行性能评估,检验微调效果。
-
模型部署(推理):将优化后的模型部署到实际应用场景,实现推理功能。
1. 环境搭建与工具准备
当 Hugging Face 访问受限,可借助达摩院的魔搭社区平台进行学习实践。首先进入魔搭社区
点击启动:
点击查看 Notebook
现在我们进入 JupyterLab 界面。JupyterLab 是谷歌开源的在线交互式开发环境,支持代码编写、调试与运行,为大模型微调提供了便捷的操作空间。
2. 微调工具安装与数据集配置
首先要安装微调工具:LLama-Factory(模型微调工厂)
GitHub - hiyouga/LLaMA-Factory: Unified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)
将模型拉取下来:
// 复制在终端上即可
git clone https://github.com/hiyouga/LLaMA-Factory.git
ok拉取完成
data是数据集
pip install -e ".[torch,metrics]"
这里是因为版本过低,运行以下指令:
pip install --upgrade pip
再重新执行
pip install -e ".[torch,metrics]"
查看版本
llamafactory-cli version
llamafactory-cli webui
单击网址,跳转到另一个页面
lora:一种微调方法
这里我们使用自己的数据集,可以去找deepseek生成一个,或者直接取我的:
新建一个 json 文件:
打开编辑:
放进去:
[
{
"instruction": "解释量子纠缠现象",
"input": "",
"output": "量子纠缠是量子力学中的一种现象,当两个或多个粒子相互作用后,它们的量子状态会相互关联,即使这些粒子被分隔到很远的距离,对一个粒子的测量会立即影响另一个粒子的状态。这种现象被爱因斯坦称为'鬼魅般的超距作用'。量子纠缠是现代量子计算和量子通信的基础。"
},
{
"instruction": "光合作用的基本过程是什么?",
"input": "",
"output": "光合作用是植物、藻类和某些细菌利用光能将二氧化碳和水转化为有机物(主要是葡萄糖)和氧气的过程。主要分为光反应和暗反应两个阶段:1) 光反应发生在叶绿体的类囊体膜上,通过光系统II和I捕获光能,分解水分子产生氧气,并生成ATP和NADPH;2) 暗反应(卡尔文循环)发生在叶绿体基质中,利用ATP和NADPH将二氧化碳固定并还原为葡萄糖。"
}
]
记得 ctrl+s 保存
接着找到 dataset_info.json,这相当于数据集的老大,我们继续编辑这个文件:
"my_train": {
"file_name": "my_train.json"
},
保存
3. 模型微调与训练
在实际微调过程中,需明确学习率和训练轮数等关键参数。学习率并非越高越好,过高可能导致模型训练不稳定;而训练轮数在合理范围内越高,模型对数据的学习越充分,但也会增加训练时间和计算资源消耗。
因为这里没有评估集,我们要手动添加 --eval_dataset my_train \
llamafactory-cli train \
--stage sft \
--do_train True \
--model_name_or_path deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B \
--preprocessing_num_workers 16 \
--finetuning_type lora \
--template deepseek3 \
--flash_attn auto \
--dataset_dir data \
--dataset my_train \
--eval_dataset my_train \
--cutoff_len 2048 \
--learning_rate 5e-05 \
--num_train_epochs 1.0 \
--max_samples 100000 \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--max_grad_norm 1.0 \
--logging_steps 5 \
--save_steps 100 \
--warmup_steps 0 \
--packing False \
--report_to none \
--output_dir saves/DeepSeek-R1-1.5B-Distill/lora/train_2025-04-23-23-32-12 \
--bf16 True \
--plot_loss True \
--trust_remote_code True \
--ddp_timeout 180000000 \
--include_num_input_tokens_seen True \
--optim adamw_torch \
--lora_rank 8 \
--lora_alpha 16 \
--lora_dropout 0 \
--lora_target all
注意目录,运行
网络问题,用镜像地址
export HF_ENDPOINT=https://hf-mirror.com
/LLaMA-Factory/saves/LLaMA-Factory/saves/train_2025-04-23-23-32-12/checkpoint-1/
导出模型
合并:基座+微调
点击页面,导出
这是我想放在的目录:/mnt/workspace/LLaMA-Factory/merge
这个就是合并之后的新模型
可以先将合并后的模型文件上传至 Hugging Face 平台,再下载到本地,最后使用 ollama 工具启动模型,使其在实际应用中发挥作用。