1. 数据准备
微调数据的格式为 Alpaca 或 ShareGPT 格式,需进行以下步骤:
-
自定义数据集转换:
-
将原始数据集转换成指定格式(JSON 格式)。 示例数据:
{ "instruction": "写一个商品文案", "input": "类型#裤*版型#宽松", "output": "宽松的阔腿裤吸引了大量明星的喜爱,设计感十足。" }
-
-
数据注册: 修改
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 模型注册
-
编写
Modelfile
:FROM /path/to/merged-model
-
注册模型:
ollama create llama3-chat-merged -f Modelfile
-
启动 Ollama:
ollama run llama3-chat-merged
总结
整体流程总结
- 数据准备:数据集转换与注册。
- LoRA 微调:指令微调与训练。
- 推理验证:动态加载 LoRA 模型进行验证。
- 批量评估:自动计算 BLEU 和 ROUGE 指标。
- 模型合并:合并 LoRA 模型与大模型。
- WebUI 使用:一站式 Web 界面操作。
- API 服务:启动接口服务,接入下游业务。
- GGUF 格式导出:部署到 Ollama 进行本地高效推理。