简单聊一聊大模型的微调

380 阅读5分钟

大模型的微调

前言

大模型在完成训练后,其知识储备便定格于训练结束的瞬间。随着时间推移和新信息涌现,模型原有的认知会逐渐滞后。例如 AGI 概念中的 Manus 能够实现电脑自动化操控,若想让大模型具备类似的特定领域能力或新知识,就需要通过微调来打破认知固定的局限。微调不仅能使模型适应新的应用场景,还能在特定任务上显著提升性能,弥补预训练模型通用性带来的不足。

步骤

大模型微调主要包含以下六个核心步骤:

  1. 环境准备:需搭建 Python 编程环境,利用 Conda 进行环境管理,并配备高性能显卡以加速计算过程。

  2. 数据集准备:以 JSON 格式组织数据集,为模型训练提供精准的数据支撑。​

  3. 模型准备:从 Hugging Face 等平台获取合适的预训练模型,作为微调的基础。​

  4. 训练:运用特定工具与算法,基于准备好的数据集对模型进行针对性训练。​

  5. 模型评估(测试):通过测试数据集对训练后的模型进行性能评估,检验微调效果。​

  6. 模型部署(推理):将优化后的模型部署到实际应用场景,实现推理功能。

1. 环境搭建与工具准备

当 Hugging Face 访问受限,可借助达摩院的魔搭社区平台进行学习实践。首先进入魔搭社区

image.png

点击启动:

image.png

image.png

点击查看 Notebook

image.png

现在我们进入 JupyterLab 界面。JupyterLab 是谷歌开源的在线交互式开发环境,支持代码编写、调试与运行,为大模型微调提供了便捷的操作空间。

image.png

image.png

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

image.png

ok拉取完成

data是数据集

image.png

pip install -e ".[torch,metrics]"

image.png

这里是因为版本过低,运行以下指令:

pip install --upgrade pip

image.png

再重新执行

pip install -e ".[torch,metrics]"

image.png

查看版本

llamafactory-cli version

image.png

llamafactory-cli webui

image.png

单击网址,跳转到另一个页面

image.png

lora:一种微调方法

这里我们使用自己的数据集,可以去找deepseek生成一个,或者直接取我的:

新建一个 json 文件:

image.png

打开编辑:

image.png

放进去:

[
    {
      "instruction": "解释量子纠缠现象",
      "input": "",
      "output": "量子纠缠是量子力学中的一种现象,当两个或多个粒子相互作用后,它们的量子状态会相互关联,即使这些粒子被分隔到很远的距离,对一个粒子的测量会立即影响另一个粒子的状态。这种现象被爱因斯坦称为'鬼魅般的超距作用'。量子纠缠是现代量子计算和量子通信的基础。"
    },
    {
      "instruction": "光合作用的基本过程是什么?",
      "input": "",
      "output": "光合作用是植物、藻类和某些细菌利用光能将二氧化碳和水转化为有机物(主要是葡萄糖)和氧气的过程。主要分为光反应和暗反应两个阶段:1) 光反应发生在叶绿体的类囊体膜上,通过光系统II和I捕获光能,分解水分子产生氧气,并生成ATP和NADPH;2) 暗反应(卡尔文循环)发生在叶绿体基质中,利用ATP和NADPH将二氧化碳固定并还原为葡萄糖。"
    }
]

记得 ctrl+s 保存

接着找到 dataset_info.json,这相当于数据集的老大,我们继续编辑这个文件:

image.png

  "my_train": {
    "file_name": "my_train.json"
  },

保存

3. 模型微调与训练

image.png

在实际微调过程中,需明确学习率和训练轮数等关键参数。学习率并非越高越好,过高可能导致模型训练不稳定;而训练轮数在合理范围内越高,模型对数据的学习越充分,但也会增加训练时间和计算资源消耗。

image.png

因为这里没有评估集,我们要手动添加 --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

注意目录,运行

image.png

image.png

网络问题,用镜像地址

export HF_ENDPOINT=https://hf-mirror.com

image.png

/LLaMA-Factory/saves/LLaMA-Factory/saves/train_2025-04-23-23-32-12/checkpoint-1/

image.png

导出模型

合并:基座+微调

点击页面,导出

image.png

这是我想放在的目录:/mnt/workspace/LLaMA-Factory/merge

image.png

这个就是合并之后的新模型

image.png

可以先将合并后的模型文件上传至 Hugging Face 平台,再下载到本地,最后使用 ollama 工具启动模型,使其在实际应用中发挥作用。