基于 LLaMA-Factory 的完整微调流程

参考:

文本类LoRA微调验证-CSDN博客

DPO(Direct Preference Optimization,直接偏好优化)-CSDN博客

为你整理了基于 LLaMA-Factory 的完整微调流程。这两篇文档分别涵盖了 SFT(监督微调)DPO(直接偏好优化) 两个核心阶段。

将流程梳理为三个主要阶段,并提供了流程图描述核心步骤 以及关键配置参数

📊 整体流程图 (PPT 核心图示)

建议在 PPT 的第一页放置此流程图,概括整个技术路径:

复制代码
          +---------------------+
          | 1. 环境准备         |
          | - Python >= 3.11    |
          | - LLaMA-Factory     |
          +----------+----------+
                     |
                     v
+---------------------------------------------------+
| 2. 阶段一:SFT (监督微调)                          |
| - 数据预处理 (JSON -> Alpaca格式)                 |
| - 训练命令 (LoRA微调)                             |
| - 输出:LoRA 适配器模型                           |
+---------------------------------------------------+
                     |
                     v
+---------------------------------------------------+
| 3. 阶段二:DPO (直接偏好优化) [可选]              |
| - 数据准备 (Preference Pair: chosen/rejected)     |
| - 训练命令 (基于SFT后的模型继续训练)              |
| - 输出:对齐人类偏好的模型                        |
+---------------------------------------------------+
                     |
                     v
+---------------------------------------------------+
| 4. 阶段三:模型合并与部署                         |
| - 合并 (Base Model + LoRA)                        |
| - 转换 (HF -> GGUF)                              |
| - 量化 (Q4_K_M 等)                               |
| - 推理 (llama.cpp / API)                         |
+---------------------------------------------------+

🛠️ 第一阶段:SFT (监督微调)

参考文档: 《文本类LoRA微调验证》

1. 环境搭建
  • Python 版本: 必须 >= 3.11 (文档中特别强调 3.10 不兼容)。

  • 安装命令:

    复制代码
    git clone https://gitee.com/strakMan/LLaMA-Factory.git
    cd LLaMA-Factory
    pip install -e ".[torch,metrics]"
2. 数据预处理
  • 数据格式: 需要转换为 Alpaca 格式(Instruction, Input, Output)。
  • 数据增强 (DA): 可以通过代码逻辑随机替换指令模板,增加数据多样性。
  • 文件位置: 将处理好的 train.json 放入 LLaMA-Factory/data/ 目录。
3. 注册数据集

data/dataset_info.json 中添加你的数据集配置:

复制代码
"my_maintenance_data": {
  "file_name": "train_qwen3_4b.json",
  "columns": {
    "prompt": "instruction",
    "query": "input",
    "response": "output"
  }
}
4. 训练命令 (SFT)
复制代码
llamafactory-cli train \
  --model_name_or_path /path/to/Qwen3-4B-Instruct \
  --dataset my_maintenance_data \
  --template qwen \
  --finetuning_type lora \
  --lora_target q_proj,k_proj,v_proj,o_proj \
  --output_dir output/qwen3-4b-sft \
  --per_device_train_batch_size 4 \
  --gradient_accumulation_steps 4 \
  --learning_rate 2e-4 \
  --num_train_epochs 3.0 \
  --fp16

⚖️ 第二阶段:DPO (直接偏好优化)

参考文档: 《DPO(Direct Preference Optimization,直接偏好优化)》

注:DPO 通常在 SFT 之后进行,用于让模型回答更符合人类偏好(更好 vs 更坏)。

1. DPO 数据准备
  • 核心格式: 必须是 Preference Pair (偏好对)

  • JSONL 结构: 每行一个 JSON 对象,包含 chosen (好回答) 和 rejected (坏回答)。

    复制代码
    {
      "instruction": "解释什么是机器学习",
      "chosen": "机器学习是AI的核心...",
      "rejected": "机器学习是一种技术。"
    }
2. 注册 DPO 数据集

data/dataset_info.json 中注册,并标记 ranking: true

复制代码
"my_dpo_full": {
  "file_name": "dpo_train_full.jsonl",
  "ranking": true,  // 关键标识
  "formatting": "alpaca",
  "columns": {
    "instruction": "instruction",
    "chosen": "chosen",
    "rejected": "rejected"
  }
}
3. 训练命令 (DPO)
  • 基础模型: 使用 SFT 合并后的模型SFT 的 LoRA 路径

  • 命令示例:

    复制代码
    llamafactory-cli train \
      --stage dpo \
      --model_name_or_path /path/to/sft-merged-model \ # 或者是 base model + resume_from_checkpoint
      --dataset my_dpo_full \
      --template qwen \
      --finetuning_type lora \
      --lora_rank 8 \
      --output_dir output/qwen3-4b-dpo \
      --beta 0.1 \ # DPO 特有参数
      --fp16

📦 第三阶段:模型合并与量化部署

参考文档: 两篇文档的结尾部分均有涉及

1. 模型合并 (Merge)

将 LoRA 适配器合并到基座模型中。

  • 配置文件 (merge_config.yaml):

    复制代码
    model_name_or_path: /path/to/base/model
    adapter_name_or_path: output/qwen3-4b-sft # SFT输出的LoRA路径
    template: qwen
    finetuning_type: lora
    export_dir: models/qwen3-4b-merged
  • 执行命令:

    复制代码
    llamafactory-cli export merge_config.yaml
2. 转换为 GGUF 格式

为了在 CPU 或 llama.cpp 中运行,需要转换格式。

  • 转换 (FP16):

    复制代码
    python convert_hf_to_gguf.py models/qwen3-4b-merged --outfile qwen3-4b-f16.gguf --outtype f16
  • 量化 (压缩):

    复制代码
    ./llama-quantize qwen3-4b-f16.gguf qwen3-4b-Q4_K_M.gguf Q4_K_M
3. 推理验证

使用量化后的模型进行推理:

复制代码
./llama-cli -m qwen3-4b-Q4_K_M.gguf -p "你的问题" -n 128
  1. 架构图: 使用最上方的流程图作为总览。
  2. 对比页: 可以做一个 SFT vs DPO 的对比表格(SFT 是教会模型怎么做,DPO 是教会模型哪个更好)。
  3. 参数页: 重点展示 dataset_info.json 的配置格式,这是最容易出错的地方。
  4. 结果页: 展示 Loss 曲线下降图(文档中提到 Loss 从 0.4 降到 0.25 是收敛良好的表现)。
相关推荐
碳基硅坊1 天前
llama.cpp本地部署Qwen3.6-27B
人工智能·llama·推理加速·qwen3.6-27b
sleven fung2 天前
llama-cpp-python 本地部署入门
开发语言·python·算法·llama
碳基硅坊2 天前
Qwen3.6-27B 本地部署三大工具:Ollama、LM Studio、llama.cpp 谁更快?
人工智能·llama·大模型部署
小何code3 天前
人工智能【第53篇】大模型微调实战:LoRA与QLoRA技术详解
lora·llama·peft·qlora·大模型微调
kuokay3 天前
深入理解 LLM 分布式训练全栈:从硬件到 LLaMA-Factory
分布式·llama·deepspeed·fsdp·llama-factory·accelerate
C137的本贾尼4 天前
Spring AI Alibaba 模型全家桶:接入通义、百川、LLaMA 等第三方 LLM
人工智能·spring·llama
心疼你的一切5 天前
Llama.Cpp 本地大模型极速部署与调用指南
人工智能·ai·aigc·llama
hyunbar5 天前
llama_index.vector_stores 模块没有怎么办?
python·llama