LLaMA-Factory进行模型微调、合并与Ollama部署全流程指南

从零开始,手把手教你完成大模型微调、合并、导出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 获取训练数据

训练数据可以从多个平台获取:

以魔搭为例,找到想要的数据集后,使用以下命令下载:

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:精度类型,可选f16q8_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
退出聊天 /byeCtrl+D

十、总结

整个流程可以概括为五个步骤:

  1. 准备数据 :从魔搭等平台获取数据集,转换格式后在dataset_info.json中注册

  2. LoRA微调 :配置YAML文件,执行llamafactory-cli train训练

  3. 合并模型:将LoRA适配器与基座模型合并为完整模型

  4. 格式转换:使用llama.cpp将HF格式转为GGUF格式

  5. 部署Ollama :创建Modelfile,用ollama create导入,ollama run运行

整个过程虽然步骤不少,但LLaMA-Factory把大部分复杂操作都封装成了配置文件和命令行,大大降低了门槛。希望这篇文章能帮助到正在学习模型微调的朋友们。

相关推荐
炒栗子不加糖12 天前
NeMo AutoModel继续预训练
模型微调·nemo automodel
All The Way North-17 天前
【完形填空实战】BERT中文MLM微调:数据构造→训练→评估,有完整可运行代码
pytorch·bert·预训练模型·transformers·模型微调·mlm·完形填空
学Linux的语莫2 个月前
LlamaFactory微调框架的使用
ai·lora·模型微调
山鬼谣me2 个月前
大模型训练
llamafactory·微调大模型
Sven在流浪2 个月前
LLamafactory Qlora微调 实战
ai·模型微调
Thanks_ks3 个月前
从辅助编码到架构重塑:基于 LLM 的智能开发工作流落地实战
自动化测试·大模型·llm·研发效能·模型微调·rag·提示词工程
x_lrong3 个月前
昇腾Ascend环境微调部署Qwen3(LlamaFactory+vLLM-Ascend)
微调·部署·昇腾·ascend·llamafactory·qwen3·vllm-ascend
重生之我要成为代码大佬4 个月前
HuggingFace生态实战:从模型应用到高效微调
人工智能·python·大模型·huggingface·模型微调
爱打代码的小林4 个月前
LLaMA-Factory大模型微调
人工智能·llamafactory