文章介绍了开源大模型的概念及LLaMA Factory工具的使用。详细讲解了模型微调流程,包括数据集准备(Alpaca、ShareGPT等多种格式)、训练参数配置、模型合并与量化技术。最后介绍了模型评估、分布式训练以及多种部署方式,如GGUF格式转换、Ollama部署和Open WebUI接口,为开发者提供了从微调到部署的完整解决方案。


开源大模型微调和部署

什么是开源大模型?

开源大模型与传统开源代码虽然都带有"开源"二字,但本质上存在很大差异。

开源大模型是指公开模型权重和架构的人工智能模型,比如LLaMA、Qwen、DeepSeek等。这些模型通常有数十亿甚至上千亿参数,能够处理自然语言、图像等多模态任务。

开放内容 是否通常公开
模型权重 ✅ 公开
模型架构 ✅ 公开
推理代码 ✅ 公开
训练代码 ❌ 很少公开
训练数据 ❌ 几乎不公开
训练过程 ❌ 不公开

开源大模型更像是"免费使用的黑盒",而传统开源软件是"完全透明的白盒"。开源大模型的"开源"更多是一种商业策略,让模型获得更广泛的使用和生态支持,但本质上与传统的开源精神——透明、协作、可重现——有很大差距。

下面看看怎么对开源大模型进行微调,本文主要介绍LLaMA Factory这个工具

LLaMA Factory官方文档:https://llamafactory.readthedocs.io/zh-cn/latest/

LLaMA Factory项目地址:https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。致力于简化大型的定制过程。它集成了多种训练策略和监控工具,提供了命令行和 WebUI 等多种交互方式,大幅降了模型微调的技术门槛。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调,框架特性包括:

  • 模型种类:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等等。
  • 训练算法:(增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO 训练、DPO 训练、KTO 训练、ORPO 训练等等。
  • 运算精度:16 比特全参数微调、冻结微调、LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的 2/3/4/5/6/8 比特 QLoRA 微调。
  • 优化算法:GaLore、BAdam、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ 和 PiSSA。
  • 加速算子:FlashAttention-2 和 Unsloth。
  • 推理引擎:Transformers 和 vLLM。
  • 实验监控:LlamaBoard、TensorBoard、Wandb、MLflow、SwanLab 等等。

使用LLaMa Factory目标:

  • • 安装
  • • 数据集准备
  • • 基于Lora训练/微调
  • • 模型合并与量化
  • • 模型推理
  • • 模型评估
  • • 分布训练
  • • 模型部署和调用

安装

  • • 从源码安装,可能需要先安装CUDA(略)
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.gitcd LLaMA-Factorypip install -e ".[torch,metrics]" --no-build-isolation
  • • docker安装,镜像中已经有了环境了
docker run -it --rm --gpus=all --ipc=host hiyouga/llamafactory:latest

数据集准备

文档:https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README_zh.md

dataset_info.json 包含了所有经过预处理的 本地数据集 以及 在线数据集。如果您希望使用自定义数据集,请务必 在 dataset_info.json 文件中添加对数据集及其内容的定义。

支持 Alpaca 格式和 ShareGPT 格式的数据集。

Alpaca

针对不同的任务有不同的格式

  • • 指令监督微调

    instruction 列对应的内容为人类指令, input 列对应的内容为人类输入, output 列对应的内容为模型回答。下面是一个例子, instruction + input是人类最终输入,output是模型回答

    data.json文件如下

    {    "instruction": "计算这些物品的总费用。 ","input": "输入:汽车 - $3000,衣服 - $100,书 - $20。","output": "汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"},
    

    dataset_info.json 中的 数据集描述 应为:

    "dataset_name": {    "file_name": "data.json",    "columns": {        "prompt": "instruction",        "query": "input",        "response": "output",        "system": "system",        "history": "history"    }}
    
  • • 预训练

    大语言模型通过学习未被标记的文本进行预训练,从而学习语言的表征。通常,预训练数据集从互联网上获得,因为互联网上提供了大量的不同领域的文本信息,有助于提升模型的泛化能力。

    data.json文件如下

    [  {"text": "document"},  {"text": "document"}]
    

    dataset_info.json 中的 数据集描述 应为:

    "dataset_name": {    "file_name": "data.json",    "columns": {        "prompt": "text"    }}
    
  • • 偏好训练

    偏好数据集用于奖励模型训练、DPO 训练和 ORPO 训练。对于系统指令和人类输入,偏好数据集给出了一个更优的回答和一个更差的回答。

    一些研究 表明通过让模型学习“什么更好”可以使得模型更加迎合人类的需求。甚至可以使得参数相对较少的模型的表现优于参数更多的模型。

    data.json文件如下:

    [    {        "instruction": "人类指令(必填)",        "input": "人类输入(选填)",        "chosen": "优质回答(必填)",        "rejected": "劣质回答(必填)"    }]
    

    dataset_info.json 中的 数据集描述 应为:

    "dataset_name": {    "file_name": "data.json",    "ranking": true,    "columns": {        "prompt": "instruction",        "query": "input",        "chosen": "chosen",        "rejected": "rejected"    }}
    
  • • KTO

    KTO数据集与偏好数据集类似,但不同于给出一个更优的回答和一个更差的回答,KTO数据集对每一轮问答只给出一个 true/false 的 label。

    除了 instruction 以及 input 组成的人类最终输入和模型回答 output ,KTO 数据集还需要额外添加一个 kto_tag 列(true/false)来表示人类的反馈。

    data.json文件如下:

    [    {        "instruction": "人类指令(必填)",        "input": "人类输入(选填)",        "output": "模型回答(必填)",        "kto_tag": "人类反馈 [true/false](必填)"    }]
    

    dataset_info.json 中的 数据集描述 应为:

    "dataset_name": {    "file_name": "data.json",    "columns": {        "prompt": "instruction",        "query": "input",        "response": "output",        "kto_tag": "kto_tag"    }}
    
  • • 多模态

    支持 多模态图像数据集、 视频数据集 以及 音频数据集 的输入。

    图像data.json文件如下:(视频videos、音频audios)

    [    {        "instruction": "人类指令(必填)",        "input": "人类输入(选填)",        "output": "模型回答(必填)",        "images": [        "图像路径(必填)"        ]    }]
    

    dataset_info.json 中的 数据集描述 应为:

    "dataset_name": {    "file_name": "data.json",    "columns": {        "prompt": "instruction",        "query": "input",        "response": "output",        "images": "images"    }}
    

ShareGPT

针对不同任务,数据集格式要求如下:

  • • 指令监督微调

    相比 alpaca 格式的数据集, sharegpt 格式支持 更多 的角色种类,例如 human、gpt、observation、function 等等。它们构成一个对象列表呈现在 conversations 列中。下面是 sharegpt 格式的一个例子:

    注意其中 human 和 observation 必须出现在奇数位置,gpt 和 function 必须出现在偶数位置。

    data.json:

    {    "conversations": [        {            "from": "human",            "value": "你好,我出生于1990年5月15日。你能告诉我我今天几岁了吗?"        },        {            "from": "function_call",            "value": "{\"name\": \"calculate_age\", \"arguments\": {\"birthdate\": \"1990-05-15\"}}"        },        {            "from": "observation",            "value": "{\"age\": 31}"        },        {            "from": "gpt",            "value": "根据我的计算,你今天31岁了。"        }    ],    "tools": "[{\"name\": \"calculate_age\", \"description\": \"根据出生日期计算年龄\", \"parameters\": {\"type\": \"object\", \"properties\": {\"birthdate\": {\"type\": \"string\", \"description\": \"出生日期以YYYY-MM-DD格式表示\"}}, \"required\": [\"birthdate\"]}}]"}
    

    dataset_info.json 中的 数据集描述 应为:

    "dataset_name": {    "file_name": "data.json",    "formatting": "sharegpt",    "columns": {        "messages": "conversations",        "system": "system",        "tools": "tools"    }}
    
  • • 偏好训练

    Sharegpt 格式的偏好数据集同样需要在 chosen 列中提供更优的消息,并在 rejected 列中提供更差的消息。下面是一个例子:

    data.json:

    [    {        "conversations": [        {            "from": "human",            "value": "人类指令"        },        {            "from": "gpt",            "value": "模型回答"        },        {            "from": "human",            "value": "人类指令"        }        ],        "chosen": {        "from": "gpt",        "value": "优质回答"        },        "rejected": {        "from": "gpt",        "value": "劣质回答"        }    }]
    

    dataset_info.json 中的 数据集描述 应为:

    "dataset_name": {    "file_name": "data.json",    "formatting": "sharegpt",    "ranking": true,    "columns": {        "messages": "conversations",        "chosen": "chosen",        "rejected": "rejected"    }}
    
  • • OpenAI格式

    OpenAI 格式仅仅是 sharegpt 格式的一种特殊情况,其中第一条消息可能是系统提示词。

    data.json:

    [    {        "messages": [        {            "role": "system",            "content": "系统提示词(选填)"        },        {            "role": "user",            "content": "人类指令"        },        {            "role": "assistant",            "content": "模型回答"        }        ]    }]
    

    dataset_info.json 中的 数据集描述 应为:

    "dataset_name": {    "file_name": "data.json",    "formatting": "sharegpt",    "columns": {        "messages": "messages"    },    "tags": {        "role_tag": "role",        "content_tag": "content",        "user_tag": "user",        "assistant_tag": "assistant",        "system_tag": "system"    }}
    

训练/微调

通过WebUI(llamafactory-cli webui)或者 命令行(llamafactory-cli train xx.yaml

参数:

名称 描述
model_name_or_path 模型名称或路径
stage 训练阶段,可选: rm(reward modeling), pt(pretrain), sft(Supervised Fine-Tuning), PPO, DPO, KTO, ORPO
do_train true用于训练, false用于评估
finetuning_type 微调方式。可选: freeze, lora, full
lora_target 采取LoRA方法的目标模块,默认值为 all
dataset 使用的数据集,使用”,”分隔多个数据集
template 数据集模板,请保证数据集模板与模型相对应。
output_dir 输出路径
logging_steps 日志输出步数间隔
save_steps 模型断点保存间隔
overwrite_output_dir 是否允许覆盖输出目录
per_device_train_batch_size 每个设备上训练的批次大小
gradient_accumulation_steps 梯度积累步数
max_grad_norm 梯度裁剪阈值
learning_rate 学习率
lr_scheduler_type 学习率曲线,可选 linear, cosine, polynomial, constant 等。
num_train_epochs 训练周期数
bf16 是否使用 bf16 格式
warmup_ratio 学习率预热比例
warmup_steps 学习率预热步数
push_to_hub 是否推送模型到 Huggingface

合并与量化

合并

当我们基于预训练模型训练好 LoRA 适配器后,我们不希望在每次推理的时候分别加载预训练模型和 LoRA 适配器,因此我们需要将预训练模型和 LoRA 适配器合并导出成一个模型,并根据需要选择是否量化。根据是否量化以及量化算法的不同,导出的配置文件也有所区别。

通过命令llamafactory-cli export merge_config.yaml

配置文件示例

# 基座模型路径model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct# 训练后的LoRA适配器adapter_name_or_path: saves/llama3-8b/lora/sfttemplate: llama3finetuning_type: lora### 导出配置-位置export_dir: models/llama3_lora_sft### 导出模型的大小export_size: 2export_device: cpuexport_legacy_format: false

量化

在完成模型合并并获得完整模型后,为了优化部署效果,人们通常会基于显存占用、使用成本和推理速度等因素,选择通过量化技术对模型进行压缩,从而实现更高效的部署。

量化(Quantization)通过数据精度压缩有效地减少了显存使用并加速推理。LLaMA-Factory 支持多种量化方法,包括:AQLM、AWQ、GPTQ、QLoRA …

QLoRA 是一种在 4-bit 量化模型基础上使用 LoRA 方法进行训练的技术。它在极大地保持了模型性能的同时大幅减少了显存占用和推理时间。

# 基座模型路径model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct# 训练后的LoRA适配器adapter_name_or_path: saves/llama3-8b/lora/sfttemplate: llama3finetuning_type: lora### 导出配置-位置export_dir: models/llama3_lora_sft### 导出模型的大小export_size: 2export_device: cpuexport_legacy_format: false

推理

可以使用 llamafactory-cli chat inference_config.yaml 或 llamafactory-cli webchat inference_config.yaml 进行推理与模型对话。对话时配置文件只需指定原始模型 model_name_or_path 和 template ,并根据是否是微调模型指定 adapter_name_or_path 和 finetuning_type。

如果您希望向模型输入大量数据集并保存推理结果,您可以启动 vllm 推理引擎对大量数据集进行快速的批量推理。您也可以通过 部署 api 服务的形式通过 api 调用来进行批量推理。

默认情况下,模型推理将使用 Huggingface 引擎。 您也可以指定 infer_backend: vllm 以使用 vllm 推理引擎以获得更快的推理速度。

完整模型推理

### examples/inference/llama3.yamlmodel_name_or_path: meta-llama/Meta-Llama-3-8B-Instructtemplate: llama3infer_backend: huggingface #choices: [huggingface, vllm]

微调模型推理

### examples/inference/llama3_lora_sft.yamlmodel_name_or_path: meta-llama/Meta-Llama-3-8B-Instructadapter_name_or_path: saves/llama3-8b/lora/sfttemplate: llama3finetuning_type: lorainfer_backend: huggingface #choices: [huggingface, vllm]

多模态模型推理

model_name_or_path: llava-hf/llava-1.5-7b-hftemplate: vicunainfer_backend: huggingface #choices: [huggingface, vllm]

批量推理

命令:

## 通过指定一个数据集,批量进行推理python scripts/vllm_infer.py --model_name_or_path path_to_merged_model --dataset alpaca_en_demo

评估

懒得搬运了,直接看文档吧https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/eval.html

分布训练

懒得搬运了,直接看文档吧https://llamafactory.readthedocs.io/zh-cn/latest/advanced/distributed.html

部署和调用

市面上很多开源工具,比较简单的可以使用Ollama + Open WebUI

https://github.com/ollama/ollama

https://github.com/open-webui/open-webui

转化成GGUF

上面微调合成大模型格式是Huggingface提出的Safetensors格式,GGUF格式是llama.cpp定义发布的一种大模型文件格式,GGUF是一种二进制文件格式的规范,GGUF格式可以更快的被载入使用,消耗更低的资源。但是只能做推理,不能训练,生态相对封闭,胜在部署简单。

安装llama.cpp工具

git clone https://github.com/ggerganov/llama.cpp.gitpip install -r llama.cpp/requirements.txt

执行转换

# 如果不量化,保留模型的效果python llama.cpp/convert_hf_to_gguf.py /mnt/workspace/.cache/modelscope/models/LLM-Research/Meta-Llama-3-8B-Instruct  --outtype f16 --verbose --outfile Meta-Llama-3-8B-Instruct_f16.gguf# 如果需要量化(加速并有损效果),直接执行下面脚本就可以python llama.cpp/convert_hf_to_gguf.py /mnt/workspace/.cache/modelscope/models/LLM-Research/Meta-Llama-3-8B-Instruct  --outtype q8_0 --verbose --outfile Meta-Llama-3-8B-Instruct_q8_0.gguf

安装Ollama

curl -fsSL https://ollama.com/install.sh | sh

启动Ollama

nohup ollama serve &

Ollama中创建模型并运行

创建ModelFile

FROM ./Meta-Llama-3-8B-Instruct_q8_0.gguf# set the temperature to 0.7 [higher is more creative, lower is more coherent]PARAMETER temperature 0.7PARAMETER top_p 0.8PARAMETER repeat_penalty 1.05TEMPLATE """{{ if .System }}<|im_start|>system{{ .System }}<|im_end|>{{ end }}{{ if .Prompt }}<|im_start|>user{{ .Prompt }}<|im_end|>{{ end }}<|im_start|>assistant{{ .Response }}<|im_end|>"""# set the system messageSYSTEM """You are a helpful assistant."""

运行命令创建模型ollama create Meta-Llama-3-8B-Instruct_q8_0 --file ./ModelFile

运行模型ollama run Meta-Llama-3-8B-Instruct_q8_0

使用Open WebUI

# 安装pip install open-webui# 启动,访问http://localhost:8080open-webui serve

还可以暴露API接口,其他启动和使用方式看文档

​最后

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。

我整理出这套 AI 大模型突围资料包:

  • ✅AI大模型学习路线图
  • ✅Agent行业报告
  • ✅100集大模型视频教程
  • ✅大模型书籍PDF
  • ✅DeepSeek教程
  • ✅AI产品经理入门资料

完整的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
​​
在这里插入图片描述

为什么说现在普通人就业/升职加薪的首选是AI大模型?

人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。

img
智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200% ,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。

AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。

在这里插入图片描述

​​
在这里插入图片描述

资料包有什么?

①从入门到精通的全套视频教程⑤⑥

包含提示词工程、RAG、Agent等技术点
在这里插入图片描述

② AI大模型学习路线图(还有视频解说)

全过程AI大模型学习路线

在这里插入图片描述

③学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的

在这里插入图片描述

④各大厂大模型面试题目详解

在这里插入图片描述

⑤ 这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

在这里插入图片描述
在这里插入图片描述

智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌,构建起"前沿课程+智能实训+精准就业"的高效培养体系。

课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

​​​​在这里插入图片描述
在这里插入图片描述

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓**

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐