基于 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 是收敛良好的表现)。
相关推荐
还卿一钵无情泪2 天前
PEFT-Transformers、Unsloth、LLaMA-Factory 微调框架 横向对比
深度学习·大模型·llama·ollama
程序猿编码3 天前
不依赖 vLLM/llama.cpp:一套面向学习的 DeepSeek-R1 CUDA 推理实现
c++·学习·语言模型·llama·vllm·大模型推理
天燹3 天前
本地部署大模型ollama
人工智能·llama
骑着蜗牛撵大象3274 天前
N1 小盒子撑起 AI 接口中转层:New-API 接管本地 Ollama,用 Token 分发模型能力
docker·llama·1024程序员节·api网关·飞牛nas·new-api
言简行敏,心静致远。5 天前
llama-bench使用说明及其应用
llama
AI_Gump5 天前
模型篇|llama.cpp 推理引擎深度解读:从一人练手到 LLM 端侧的事实标准
llama·llama.cpp
星野云联AIoT技术洞察8 天前
设备手册离线 RAG:先管住版本、权限和引文,再谈本地大模型
llama·rag·设备告警·rag知识库·设备运维·设备离线·设备手册
晚风吹北巷10 天前
基于LLama-Factory 进行Lora微调
llama
你都会上树?10 天前
本地部署模型 llama + opencode + Qwen3.8-32b
llama
夜瞬11 天前
从零微调 Qwen3-8B:基于 LoRA 与 LLaMA-Factory 打造专属 AI 编程助教
人工智能·python·llama