随着 GPT、LLaMA、QWen 等一众基础模型(Base Models)的出现,LLMs 的通用语言理解和生成能力已得到广泛验证。然而,在面对垂直行业、专业领域或特定业务流程对高精度、定制化的需求时,基础模型的通用性往往存在局限。
微调 (Fine-Tuning)正是解决这类问题的核心技术。它基于已经具备通用知识和特征的预训练模型,在相对较小的专业数据集上进行再训练,实现知识迁移和能力聚焦,从而显著提升模型在特定任务上的表现。
本文将重点聚焦于最成熟的微调技术之一——指令监督微调(SFT)。以 LLaMA Factory 为载体,系统性地演示和解析一套完整的微调工作流程。内容涵盖从构建和格式化高质量训练数据,到实施不同训练策略(如 Full FT 和 PEFT),直至最终通过 API 接口将模型部署上线的全部环节,旨在帮助大家高效地将基础 LLM 转化为解决特定业务问题的专业化智能体。
Fine-Tuning
微调(Fine-tuning)是利用预训练好的模型(如 GPT、QWen、LLama 等模型)作为基础模型(Base Model)在一个更小、更专业领域的数据集上进行进一步的训练的过程。它能将预训练模型所学到的模式和特征迁移到新的任务上,从而只需较少的数据和计算资源就能提升模型在特定任务上的表现能力。它已成为 NLP 领域的热门方法,常用于文本分类、情感分析和问答等任务。
通常 Fine-Tuning 可以分为以下三种:
- Unsupervised Fine-Tuning:不需要标注数据,通过让 LLMs 接触来自目标领域的大量未标注文本语料库,从而提升其语言理解能力。这种方法适用于法律或医学等新兴领域,不过对于分类或摘要等特定任务的精确度较低。
- Supervised Fine-Tuning(SFT):为 LLMs 提供针对目标任务定制的标注数据。如在特定业务中使用已标注的分类文本来微调 LLMs,使 LLMs 具备对该业务文本的分类能力。这种方法能有效提升 LLMs 在特定业务中的能力,但它需要大量的标注数据(数据成本高)。
- Instruction Fine-Tuning via Prompt Engineering:无需对模型进行训练,通过设计 Prompt 来让 LLMs 具备特定的推理能力。这种方法非常依赖于 Prompt 的设计,对于创建专业助手非常有用;但在面对复杂的推理任务上,则效果一般。
本文主要是关注于 SFT,详细介绍如何一步步使用我们自己的数据来微调出能够解决特定问题的 LLMs。
LLaMA Factory
在介绍具体步骤之前,我们先看下本文使用微调工具:LLaMA_Factory。具体可以参考官方文档:
LLaMA Factory: https://llamafactory.readthedocs.io/zh-cn/latest/
LLaMA Factory 是一个简单易用且高效的 LLMs 训练与微调平台。通过 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 等等。
在安装相关依赖之后,就可以通过下面的命令直接安装了:
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.gitcd LLaMA-Factorypip install -e ".[torch,metrics]"# 校验是否安装成功llamafactory-cli versionSFT Pipeline for LLMs
微调 LLM 的基本流程图下图所示:
主要包括:
- Data Preparation:构建高质量训练数据集。依次实现对目标领域数据的收集清洗(去重/去噪/修正格式)、转换为模型可理解的
<Instruct,Response>结构并加特殊Token、将数据分为训练集/验证集/测试集; - Training & Fine-Tuning:采用 Full FT 或者 PEFT(如LoRA) 等微调技术对模型进行微调;
- Evaluation & Deployment:通过设计好的评估指标,对模型在测试集上进行评估。最后将上将模型部署上线,提供应用。
Data Preparation
核心目标:收集、清理并格式化数据,使我们的数据符合模型训练的要求。
采用 LLaMA Factory 训练模型,需将数据格式化,具体可以参考文档:
https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/data_preparation.html
本文采用 ShareGPT 格式来组织结构化数据。ShareGPT格式支持更多的角色种类,如 human、gpt、observation、function 等等。下面 OpenAI 格式(ShareGPT 的一种特殊格式):
[ { "messages": [ { "role": "system", "content": "系统提示词(选填)" }, { "role": "user", "content": "人类指令" }, { "role": "assistant", "content": "模型回答" } ] }]这个数据集的效果是模型根据人类指令输出模型回答。然后将 JSON 格式的数据转换成适合用于训练 LLM的 Hugging Face 数据集格式
import codecsimport osimport jsonfrom datasets import Dataset # 需安装 dataset 包json_file = 'PATH_TO_JSON_FORMAT_FILE.json'save_path = 'SAVE_PATH'with codecs.open(json_file, 'r', 'utf-8') as fp: data_json = json.load(fp)all_systems = data_json['system']all_conversations = data_json['conversations']my_dataset = Dataset.from_dict({"system": all_systems, "conversations": all_conversations})print(f'Saving to path: [{save_path}]')my_dataset.save_to_disk(save_path, max_shard_size="2048MB")处理完数据后,需要在 LLaMA Factory 的data/dataset_info.json中配置我们的数据(名称为My_New_Data_Set_1):
"My_New_Data_Set_1": { "file_name": "PATH_TO_DATA_FILE", "formatting": "sharegpt", "columns": { "messages": "messages" }, "tags": { "role_tag": "role", "content_tag": "content", "user_tag": "user", "assistant_tag": "assistant", "system_tag": "system" }}注意,数据准备阶段应当尽可能保证数据干净,可以采用人工或大模型(如 DeepSeek-R1)对数据进行清洗,确保数据有效。
Model Training
在模型训练之前,我们需要下载要用的 Base Model,可以在 Hugging Face 官网直接下载,如 QWen 模型可以在下面的链接中下载:
https://huggingface.co/Qwen/models
这里更建议通过下面的 python 代码直接下载:
from huggingface_hub import snapshot_downloadmodel_name = "Qwen/Qwen2.5-1.5B-Instruct"print(f"正在下载模型 {model_name} 到 {model_name} ...")snapshot_download( repo_id=model_name, local_dir=model_name)下载完成之后,我们就有了与训练好的 Base Model:
total 3026368-rw-r--r-- 1 root root 660 Nov 12 14:21 config.json-rw-r--r-- 1 root root 242 Nov 12 14:21 generation_config.json-rw-r--r-- 1 root root 11343 Nov 12 14:21 LICENSE-rw-r--r-- 1 root root 1671839 Nov 12 14:21 merges.txt-rw-r--r-- 1 root root 3087467144 Nov 12 14:21 model.safetensors-rw-r--r-- 1 root root 4917 Nov 12 14:21 README.md-rw-r--r-- 1 root root 7305 Nov 12 14:21 tokenizer_config.json-rw-r--r-- 1 root root 7031645 Nov 12 14:21 tokenizer.json-rw-r--r-- 1 root root 2776833 Nov 12 14:21 vocab.json下面就可以通过配置来使用我们的数据对 Base Model 进行微调了,主要有如下两种微调技术:
Full Fine-Tuning(全量微调)
在微调阶段会更新预训练模型的所有参数。加载预训练的 LLM(如 Llama、Qwen)后,所有层的权重都会被设置为可训练(Trainable),并会根据训练数据进行梯度更新。
优点:
- 性能上限高:模型的所有参数都会在新数据上会调整,理论上它可以达到最佳的任务性能;
- 灵活性强:可以修改模型所有的内部表示,能更好地适应与预训练数据分布差异较大的新任务。
缺点:
- 计算资源需大:需要巨大的GPU 显存来存储整个模型的权重、激活值和优化器状态(例如,一个 7B 模型可能需要 40GB+ 显存);
- 训练速度慢:需要计算和更新大量的参数梯度;
- 存储成本高:每次微调都需要保存一个完整模型副本;
- 灾难性遗忘:对所有权重进行了更新,可能会导致模型遗忘在预训练阶段学到的通用知识和能力。
在 LLaMA Factory 中可以通过以下配置来实现全量微调(qwen2.5_1.5b_full_sft.yaml):
### modelmodel_name_or_path:/data/BaseModels/Qwen/Qwen2.5-1.5B-Instructtrust_remote_code:true### methodstage:sftdo_train:truedo_eval:truefinetuning_type:fulldeepspeed:examples/deepspeed/ds_z2_config.json### datasetdataset:My_New_Data_Set_1template:qwencutoff_len:2048overwrite_cache:truepreprocessing_num_workers:16dataloader_num_workers:4### outputoutput_dir:saves/qwen2.5-1.5b/full_sftlogging_steps:10save_steps:200plot_loss:trueoverwrite_output_dir:true### trainper_device_train_batch_size:1gradient_accumulation_steps:12learning_rate:1.0e-5num_train_epochs:3.0lr_scheduler_type:cosinewarmup_ratio:0.1bf16:falseddp_timeout:180000000resume_from_checkpoint:null### evalval_size:0.1per_device_eval_batch_size:1eval_strategy:stepseval_steps:200启动训练,提供了多种版本,可以根据需要选择:
# 单卡版:FORCE_TORCHRUN=1 CUDA_VISIBLE_DEVICES=0 llamafactory-cli train qwen2.5_1.5b_full_sft.yaml# 多卡版:FORCE_TORCHRUN=1 NNODES=1 NODE_RANK=0 MASTER_PORT=29500 llamafactory-cli train qwen2.5_1.5b_full_sft.yaml# 多机多卡版(假设两台机器):FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=0 MASTER_ADDR=xx.xx.xx.xx MASTER_PORT=29500 llamafactory-cli train qwen2.5_1.5b_full_sft.yamlFORCE_TORCHRUN=1 NNODES=2 NODE_RANK=1 MASTER_ADDR=xx.xx.xx.xx MASTER_PORT=29500 llamafactory-cli train qwen2.5_1.5b_full_sft.yamlPEFT(参数高效微调)
PEFT 是一组方法的统称,只更新模型参数的一小部分(甚至不到 1%),同时固定大部分预训练权重。
- 代表性方法包括 LoRA (Low-Rank Adaptation)、Prefix Tuning、Prompt Tuning 等。
- 核心思想:大多数预训练模型是过参数化的,只需要调整少量参数就能达到接近全量微调的性能。
优点:
- 极大地节省计算资源: 只需存储和计算少量新增参数的梯度。如使用 QLoRA 技术微调 7B 模型,可能只需 16GB-24GB 显存;
- 训练速度快: 参数少,梯度计算快,训练速度显著提升;
- 存储成本低: 最终只需要存储一个很小的适配器文件(Adapter, 几 MB 到几百 MB);
- 避免灾难性遗忘: 固定了大部分预训练权重,有助于保留模型的通用知识和能力;
- 模型切换方便: 可以轻松切换和加载不同的 Adapter 来应对不同的下游任务。
缺点:
- 性能略低于 Full Fine-Tuning: 在某些极端复杂的、或与预训练领域差异巨大的任务上,其性能上限可能略低于全量微调;
- 推理时需要合并(Merge): 在生产部署时,通常需要将 PEFT 权重(如 LoRA Adapter)与原模型权重合并才能获得最佳的推理速度和效率。
在 LLaMA Factory 中可以通过以下配置来实现 LoRA 微调(qwen2.5_32b_lora_sft.yaml):
### modelmodel_name_or_path:/data/BaseModels/Qwen/Qwen2.5-32B-Instructtrust_remote_code:true### methodstage:sftdo_train:truefinetuning_type:loralora_alpha:32lora_rank:16lora_target:alldeepspeed:examples/deepspeed/ds_z2_config.json### datasetdataset:My_New_Data_Set_1template:qwencutoff_len:4096overwrite_cache:truepreprocessing_num_workers:16dataloader_num_workers:4### outputoutput_dir:saves/qwen2.5-32b_instruct/lora_sftlogging_steps:10save_steps:400plot_loss:trueoverwrite_output_dir:truesave_only_model:falsereport_to:none### trainper_device_train_batch_size:2gradient_accumulation_steps:8learning_rate:1.0e-5num_train_epochs:3.0lr_scheduler_type:cosinewarmup_ratio:0.1bf16:trueddp_timeout:180000000resume_from_checkpoint:null### evalval_size:0.1per_device_eval_batch_size:1eval_strategy:stepseval_steps:200在模型部署时,需要将 Base model 和 Adapter 进行合并,可以采用如下代码:
llamafactory-cli export \ --model_name_or_path /data/BaseModels/Qwen2.5-32B-Instruct \ --adapter_name_or_path saves/qwen2.5-32b_instruct/lora_sft \ --export_dir saves/qwen2.5-32b_instruct/lora_sft/merge/ --template qwen \ --finetuning_type lora \ --export_size 2 \ --export_legacy_format False \ --export_device cpu至此,我们得到了使用 LoRA 微调的完整模型。
DeepSpeed 配置
上面的配置中有 deepspeed 的配置:
deepspeed: examples/deepspeed/ds_z2_config.json
DeepSpeed 是微软开发的一个开源深度学习优化库,旨在提高大模型训练的效率和速度。DeepSpped 作为 LLMs 训练的高性能基础设施,能让研究人员和企业以更少的 GPU 资源或更快的速度来训练超大模型(如千亿甚至上万亿参数)。
在使用 DeepSpeed 之前,需要先估计训练任务的显存大小,再根据任务需求与资源情况选择合适的 ZeRO 阶段。
- ZeRO-1: 仅划分优化器参数,每个GPU各有一份完整的模型参数与梯度。
- ZeRO-2: 划分优化器参数与梯度,每个GPU各有一份完整的模型参数。
- ZeRO-3: 划分优化器参数、梯度与模型参数。
简单来说:从ZeRO-1到ZeRO-3,阶段数越高,显存需求越小,但是训练速度也依次变慢。此外,设置offload_param=cpu参数会大幅减小显存需求,但会极大地使训练速度减慢。因此,如果您有足够的显存, 应当使用 ZeRO-1,并且确保offload_param=none。
LLaMA Factory 提供了使用不同阶段的 DeepSpeed 配置文件的示例:
# LLaMA-Factory/examples/deepspeedds_z0_config.jsonds_z2_config.jsonds_z2_offload_config.jsonds_z3_config.jsonds_z3_offload_config.jsonEvaluation & Deployment
模型训练完后,需要对模型在测试集上进行评估。这里的评估指标更多的是我们定义的业务指标,如模型回答的格式是否正确,回答内容的准确率等等。不同也不差异较大,这里就不详细介绍了。
下面主要介绍如何部署模型,让我们能通过API请求模型。
LLaMA Factory API
可以通过 LLaMA Factory 实现 API 部署,如下所示,将模型使用 GPU0 部署起来:
API_PORT=8000 CUDA_VISIBLE_DEVICES=0 llamafactory-cli api \ --model_name_or_path saves/qwen2.5-32b_instruct/lora_sft/merge/ \ --template qwen可以通过 Requets 来请求模型:
defcall_llamafactory_api(prompt): url = 'http://localhost:8000/v1/chat/completions' headers = { 'accept': 'application/json', 'Content-Type': 'application/json' } payload = { "model": "qwen", "messages": [{ "role": "user", "content": prompt}], "do_sample": True, "temperature": 0.7, "top_p": 0.9, "n": 1, "max_tokens": 200, "stream": False } try: response = requests.post(url, headers=headers, data=json.dumps(payload)) if response.status_code == 200: rsp_json = response.json() messages = [] for chs in rsp_json.get('choices', []): msg = chs['message'] messages.append(msg['content']) return messages except requests.exceptions.RequestException as e: print(f"请求发生异常: {e}")return NoneOllama API
此外,还可以使用 Ollama 来部署,主要流程如下:
在合并(Merge)后的 Hugging Face 格式模型之后,我们可以通过如下步骤来将模型部署之 Ollama 中:
转成 GGUF 格式:
python3 tools/llama.cpp/convert_hf_to_gguf.py \ /data/LLamaFactory/saves/qwen2.5-32b_instruct/lora_sft/merge/\ --outtype auto \ --outfile /data/LLamaFactory/saves/qwen2.5-32b_instruct_lora_sft.gguf创建 Modelfile: 在包含 GGUF 文件的目录下,创建一个名为 Modelfile 的文件(无扩展名):
FROMqwen2.5-32b_instruct_lora_sft.ggufPARAMETERnum_ctx4096创建/导入模型:使用 Ollama CLI 创建或导入模型
ollama create my-llm-model -f Modelfile# my-llm-model 给模型起的名字运行模型:一旦导入完成,可以启动 Ollama 服务:
OLLAMA_MODELS=/usr/share/ollama/.ollama/models \ OLLAMA_HOST=0.0.0.0:6006 \ OLLAMA_ORIGINS=* \ ollama serveAPI调用:通过 Requests 来请求 ollama api,实现模型调用
OLLAMA_URL = "http://localhost:6006/v1/chat/completions"MODEL_NAME = "my-llm-model "defcall_ollama(prompt): data = { "model": MODEL_NAME, "messages": [{"role": "user", "content": prompt}], "stream": False } try: response = requests.post(OLLAMA_URL, json=data) response.raise_for_status() rsp = response.json() results = [] for chs in rsp['choices']: if chs['message']['role'] == 'assistant': result.append(chs['message']['content']) return results except Exception as e: result = None至此,我们成功将模型部署上线,并可以通过 API 请求模型,实现模型的在线服务。
Conclusion
本文提供了一份详尽且高度可操作的 LLMs 指令监督微调(SFT)实践指南,系统性地涵盖了从构建和格式化专业数据集到选择合适的训练策略(Full FT 或 PEFT),再到最终实现模型 API 部署上线的完整链路。
文中的每个关键环节都贴心地附带了必要的配置示例与核心代码片段,旨在帮助读者快速掌握端到端的微调技术,将基础 LLM 高效转化为解决特定业务问题的定制化智能体。
想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享!
👇👇扫码免费领取全部内容👇👇
一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势
想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI:
1. 100+本大模型方向电子书
2. 26 份行业研究报告:覆盖多领域实践与趋势
报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:
- 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
- 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
- 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
- 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。
3. 600+套技术大会 PPT:听行业大咖讲实战
PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:
- 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
- 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
- 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
- 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。
二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走
想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!
1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位
面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析:
2. 102 道 AI 大模型真题:直击大模型核心考点
针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:
3. 97 道 LLMs 真题:聚焦大型语言模型高频问题
专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:
![]()
三、路线必明: AI 大模型学习路线图,1 张图理清核心内容
刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!
路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。
L1阶段:启航篇丨极速破界AI新时代
L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。
L2阶段:攻坚篇丨RAG开发实战工坊
L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。
L3阶段:跃迁篇丨Agent智能体架构设计
L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。
L4阶段:精进篇丨模型微调与私有化部署
L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。
L5阶段:专题集丨特训篇 【录播课】
![]()
四、资料领取:全套内容免费抱走,学 AI 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇
2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!