LLaMA-Factory 基于 LoRA 的 SFT 指令微调及相关功能梳理

1. 数据准备

微调数据的格式为 AlpacaShareGPT 格式,需进行以下步骤:

  1. 自定义数据集转换:

    • 将原始数据集转换成指定格式(JSON 格式)。 示例数据:

      复制代码
      {
        "instruction": "写一个商品文案",
        "input": "类型#裤*版型#宽松",
        "output": "宽松的阔腿裤吸引了大量明星的喜爱,设计感十足。"
      }
  2. 数据注册: 修改 data/dataset_info.json 文件,将数据集注册到系统中。

    复制代码
    "adgen_local": {
      "path": "data/adgen.json",
      "columns": {"instruction": "content", "output": "summary"}
    }

2. LoRA 指令微调 (SFT)

2.1 命令行启动训练

通过命令行微调模型,参数定义如下:

复制代码
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \
    --stage sft \
    --do_train \
    --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \
    --dataset alpaca_gpt4_zh,identity,adgen_local \
    --dataset_dir ./data \
    --template llama3 \
    --finetuning_type lora \
    --output_dir ./saves/LLaMA3-8B/lora/sft \
    --overwrite_cache \
    --overwrite_output_dir \
    --cutoff_len 1024 \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 8 \
    --learning_rate 5e-5 \
    --num_train_epochs 5.0 \
    --fp16 \
    --plot_loss

2.2 训练参数说明

参数 说明
stage 微调阶段,SFT(指令微调)。
finetuning_type LoRA 微调方式。
output_dir 保存训练结果的目录。
dataset 使用的数据集(已注册)。
learning_rate 学习率,调小可避免过拟合。
num_train_epochs 训练轮数。
fp16 使用半精度浮点计算(省显存)。

3. 动态合并 LoRA 的推理

微调完成后,可以动态加载 LoRA 微调结果,验证模型效果。

3.1 启动 WebUI 页面

复制代码
CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat \
    --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \
    --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \
    --template llama3 \
    --finetuning_type lora
  • 访问地址http://localhost:7860
  • 可以在网页中与模型进行对话,查看微调效果。

3.2 命令行交互测试

若无法使用 WebUI,可以通过命令行验证:

复制代码
CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat \
    --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \
    --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \
    --template llama3 \
    --finetuning_type lora

4. 批量预测与训练效果评估

自动评估模型生成效果,计算文本生成指标(如 BLEU 和 ROUGE)。

4.1 预测与评估命令

复制代码
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train \
    --stage sft \
    --do_predict \
    --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \
    --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \
    --eval_dataset adgen_local \
    --dataset_dir ./data \
    --template llama3 \
    --finetuning_type lora \
    --output_dir ./saves/LLaMA3-8B/lora/predict \
    --predict_with_generate

4.2 指标说明

指标 含义
BLEU-4 评估生成文本与参考文本的 n-gram 匹配。
ROUGE-1 / ROUGE-2 单词和双词序列匹配程度。
ROUGE-L 最长公共子序列匹配程度。
predict_runtime 预测总运行时间。

5. LoRA 模型合并与导出

将 LoRA 微调模型与原始大模型合并,输出完整的模型文件:

复制代码
CUDA_VISIBLE_DEVICES=0 llamafactory-cli export \
    --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \
    --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \
    --template llama3 \
    --finetuning_type lora \
    --export_dir ./merged-model

6. 一站式 WebUI Board

通过 WebUI Board 操作训练全链路:

复制代码
CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui
  • 主要功能
    • 可视化训练与预测参数设置。
    • 支持命令脚本导出。
    • 训练完成后可直接加载 LoRA 模型进行对话。

7. API 服务启动与调用

启动 API 服务并接入业务系统:

复制代码
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 llamafactory-cli api \
    --model_name_or_path ./merged-model \
    --template llama3 \
    --finetuning_type lora

API 调用示例

复制代码
import os
from openai import OpenAI

client = OpenAI(
    api_key="0",
    base_url="http://localhost:8000/v1"
)
result = client.chat.completions.create(
    messages=[{"role": "user", "content": "hello"}],
    model="test"
)
print(result.choices[0].message)

8. 导出 GGUF 格式并部署到 Ollama

8.1 转换为 GGUF 格式

复制代码
python llama.cpp/convert-hf-to-gguf.py ./merged-model

8.2 Ollama 模型注册

  1. 编写 Modelfile

    复制代码
    FROM /path/to/merged-model
  2. 注册模型:

    复制代码
    ollama create llama3-chat-merged -f Modelfile
  3. 启动 Ollama:

    复制代码
    ollama run llama3-chat-merged

总结

整体流程总结

  1. 数据准备:数据集转换与注册。
  2. LoRA 微调:指令微调与训练。
  3. 推理验证:动态加载 LoRA 模型进行验证。
  4. 批量评估:自动计算 BLEU 和 ROUGE 指标。
  5. 模型合并:合并 LoRA 模型与大模型。
  6. WebUI 使用:一站式 Web 界面操作。
  7. API 服务:启动接口服务,接入下游业务。
  8. GGUF 格式导出:部署到 Ollama 进行本地高效推理。
相关推荐
小陈工3 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
墨染天姬7 小时前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
AI成长日志7 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
2501_948114247 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠7 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
黎阳之光8 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
小超同学你好8 小时前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型
智星云算力8 小时前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用
jinanwuhuaguo8 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin
xiaozhazha_8 小时前
效率提升80%:2026年AI CRM与ERP深度集成的架构设计与实现
人工智能