从零开始,手把手教你完成大模型微调、合并、导出GGUF并部署到Ollama
最近在学习大模型微调,跟着B站一个微调视频走了一遍,把整个过程从头到尾跑通了。从环境配置到数据准备,从LoRA微调到最终部署到Ollama,踩了不少坑,也积累了一些经验。这篇文章就把完整的流程记录下来,希望对同样在学习模型微调的朋友有所帮助。
注意:本文章使用的是非Web页面微调
一、LLaMA-Factory是什么?
LLaMA-Factory是一个开源、模块化的大语言模型微调框架。它支持100多种主流开源模型(包括LLaMA、Qwen、ChatGLM、DeepSeek等),以及多种训练方法,如全参微调、LoRA、QLoRA、DPO、PPO等。
简单来说,它把复杂的模型微调流程封装成了简单的命令行操作和配置文件,让我们可以零代码或低代码地完成大模型的定制化训练。
二、环境准备
首先需要安装LLaMA-Factory并准备好虚拟环境:
bash
# 克隆项目
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
# 创建虚拟环境
python -m venv finetune
# 激活虚拟环境(Linux/Mac)
source finetune/bin/activate
# 或Windows: finetune\Scripts\activate
# 安装依赖
pip install -r requirements.txt
建议使用Python 3.9+和PyTorch 2.x版本。
三、数据准备
3.1 获取训练数据
训练数据可以从多个平台获取:
-
魔搭社区(ModelScope) :ModelScope - 数据集列表页
-
百度飞桨 :开放数据集-飞桨AI Studio星河社区
以魔搭为例,找到想要的数据集后,使用以下命令下载:
bash
# 先安装modelscope
uv pip install modelscope -i https://mirrors.aliyun.com/pypi/simple
# 下载数据集
modelscope download --dataset 数据集名称 --local_dir ./dataset/文件夹名
3.2 数据格式要求
LLaMA-Factory支持两种主要的数据格式:
Alpaca格式(适用于指令微调):
bash
[
{
"instruction": "解释量子纠缠",
"input": "",
"output": "量子纠缠是量子力学中的一种现象..."
}
]
ShareGPT格式(适用于多轮对话):
bash
[
{
"conversations": [
{"from": "human", "value": "你好"},
{"from": "gpt", "value": "你好!有什么可以帮助你的吗?"}
]
}
]
3.3 注册数据集
下载的数据集通常需要处理后才能使用。在LLaMA-Factory/data/目录下找到dataset_info.json文件,注册你的数据集:
bash
cd data
vim dataset_info.json
在文件中添加一条记录,指定数据集名称、路径和格式:
bash
"my_dataset": {
"file_name": "path/to/your/data.json",
"formatting": "alpaca"
}
四、模型微调
4.1 配置微调参数
进入训练配置目录,编辑配置文件:
bash
cd LLaMA-Factory/examples/train_lora
vim qwen3_lora_sft.yaml
需要修改的关键参数包括:
-
model_name_or_path:要微调的基座模型名称或路径
-
dataset:训练数据集名称(需要在dataset_info.json中注册)
-
output_dir:训练输出目录
-
template:模型对应的对话模板
4.2 执行训练
激活虚拟环境后,运行以下命令开始微调:
bash
# 激活虚拟环境
source finetune/bin/activate
# 执行训练
USE_MODELSCOPE_HUB=1 llamafactory-cli train examples/train_lora/qwen3_lora_sft.yaml
USE_MODELSCOPE_HUB=1表示从魔搭社区下载模型镜像,国内用户使用这个可以加速下载。
训练过程中会输出损失值等信息,耐心等待训练完成即可。
五、Chat测试微调效果
训练完成后,可以用交互式对话来测试微调效果:
bash
cd examples/inference
vim qwen3_lora_sft.yaml
在配置文件中指定:
-
model_name_or_path:基座模型
-
adapter_name_or_path:训练输出的LoRA适配器路径
-
template:与训练时一致的模板
然后运行:
bash
USE_MODELSCOPE_HUB=1 llamafactory-cli chat examples/inference/qwen3_lora_sft.yaml
这样就可以在终端与微调后的模型进行对话了。
六、合并LoRA适配器
LoRA微调训练出的是一组轻量级的适配器权重(低秩矩阵),推理时需要与基座模型叠加使用。为了便于部署,我们需要将LoRA适配器与基座模型合并成一个完整的模型。
6.1 配置合并参数
bash
cd examples/merge_lora
vim qwen3_lora_sft.yaml
配置文件中需要指定:
-
model_name_or_path:原始基座模型的路径(注意:必须是未量化的原始模型)
-
adapter_name_or_path:训练输出的LoRA适配器路径
-
template:与训练时一致的模板
-
export_dir:合并后模型的输出路径
6.2 执行合并
bash
USE_MODELSCOPE_HUB=1 llamafactory-cli export examples/merge_lora/qwen3_lora_sft.yaml
执行完成后,合并后的完整模型会保存在指定的export_dir目录中。
七、将合并后的模型部署为API服务
合并完成后,可以用LLaMA-Factory提供的API功能将模型部署成接口服务:
bash
cd examples/inference
vim qwen3_lora_sft.yaml
修改配置文件,将模型路径改为合并后输出的模型路径,然后启动API服务:
bash
USE_MODELSCOPE_HUB=1 llamafactory-cli api examples/inference/qwen3_lora_sft.yaml
服务启动后,可以通过curl测试:
bash
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3-0.6B",
"messages": [{"role": "user", "content": "你好"}]
}'
八、转换为GGUF格式并导入Ollama
Ollama原生支持GGUF格式的模型。我们需要将合并后的Hugging Face格式模型转换为GGUF格式。
8.1 准备llama.cpp转换工具
bash
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
pip install -r requirements.txt
8.2 执行格式转换
使用convert_hf_to_gguf.py脚本进行转换:
bash
python convert_hf_to_gguf.py /path/to/your/exported_model \
--outfile my_model.gguf \
--outtype f16
参数说明:
-
/path/to/your/exported_model:合并后模型的路径 -
--outfile:输出的GGUF文件名 -
--outtype:精度类型,可选f16、q8_0等
8.3 创建Modelfile
在存放.gguf文件的目录下,创建一个名为Modelfile的文件:
bash
FROM ./my_model.gguf
如果需要设置模型的系统提示词(人格设定),可以添加SYSTEM指令:
bash
FROM ./my_model.gguf
SYSTEM "你是一个名为xx的xx"
8.4 导入Ollama
在Modelfile所在目录执行:
bash
ollama create muxue-model -f Modelfile
8.5 运行模型
导入成功后,就可以像使用其他Ollama模型一样运行了:
bash
ollama run muxue-model
九、常用命令速查
| 操作 | 命令 |
|---|---|
| 查看已下载模型 | ollama list |
| 拉取模型 | ollama pull 模型名 |
| 运行模型 | ollama run 模型名 |
| 查看模型信息 | ollama show 模型名 |
| 清空上下文 | /clear |
| 退出聊天 | /bye 或 Ctrl+D |
十、总结
整个流程可以概括为五个步骤:
-
准备数据 :从魔搭等平台获取数据集,转换格式后在
dataset_info.json中注册 -
LoRA微调 :配置YAML文件,执行
llamafactory-cli train训练 -
合并模型:将LoRA适配器与基座模型合并为完整模型
-
格式转换:使用llama.cpp将HF格式转为GGUF格式
-
部署Ollama :创建Modelfile,用
ollama create导入,ollama run运行
整个过程虽然步骤不少,但LLaMA-Factory把大部分复杂操作都封装成了配置文件和命令行,大大降低了门槛。希望这篇文章能帮助到正在学习模型微调的朋友们。