## 一、什么是微调（Fine-tuning）

预训练模型通常在海量通用数据上训练，具备广泛的语言理解能力。

模型微调是指在预训练的大型语言模型基础上，使用特定领域或任务的数据进行进一步训练，使模型能够更好地适应特定应用场景的过程。

## 二、微调的作用

1.  **提高准确性：**使用垂直领域（如医疗、金融行业）的数据微调后，模型在该领域的准确率和可靠性会显著提升。
    
2.  **增强可控性：**通过微调可以调整模型的行为模式、输出格式和回答风格，使其更符合预期。
    

## 三、微调的场景

1.  尽力优化提示词工程，但模型效果仍不理想，或提示词本身变得过于复杂。
    
2.  对模型输出有特定的格式要求，但它有时无法稳定地满足要求。
    
3.  希望精简提示词，以加快线上推理速度或降低Token。
    

## 四、如何进行微调

可通过【火山方舟】或者【阿里云百炼】进行模型的微调

<br>

### （一）准备阶段

1.  **明确目标**
    

首先要确定你希望模型微调后具备什么能力。比如：

-   **知识注入**：让模型学会公司内部的规章制度。
    
-   **格式对齐**：让模型严格按照 JSON 格式输出结果。
    
-   **风格迁移**：让模型用特定的语气（如客服语气）进行回复。
    

2.  **收集与构建数据集**
    

微调需要成对的 `(指令/问题, 预期回答)` 数据。通常格式如下（通常保存为 JSONL 文件）：

```bash
{"messages":[{"role":"user","content":"请根据古诗内容，仅回复作者的名字：姑苏城外寒山寺，夜半钟声到客船"},{"role":"assistant","reasoning_content":"用户让我根据古诗内容回复作者名字，诗句是“姑苏城外寒山寺，夜半钟声到客船”。首先，我需要确定这句诗出自哪首诗。这句诗很有名，应该是张继的《枫桥夜泊》。记得以前学过，这首诗的作者是唐代诗人张继。用户要求仅回复作者名字，所以不需要其他内容。检查一下搜索到的信息，虽然这里显示没有具体资源，但根据已有的知识，确定作者是张继没错。所以直接回复名字即可，不用多余的解释。","content":"张继","loss_weight":1}]}
{"messages":[{"role": "user", "content": "什么时候需要SFT？"}, {"role": "assistant", "content": "通过 prompt engineering 无法解决或 prompt 中描述过于复杂时；对大模型输出内容有格式要求时，而模型仍有部分 case 不符合要求；期望通过 SFT 来减少 prompt 中的内容，加速线上推理的耗时。"}]}
```

**数据的质量远比数量重要**。几千条人工精编、高质量的问答数据，微调效果往往好于几十万条粗糙拼凑的数据。

> **数据量级建议**

起初不需要构建大量 SFT 数据集，建议优先采用少量数据（50条~100条）对模型做 SFT 后观察真实评估是否有收益。如果有收益，可以尝试以部分数据为种子数据集继续扩充以优化表现。如果无明显作用，建议检查 SFT 数据集的质量。

-   **针对不同场景下，数据量级的建议：**
    
    -   文案生成，剧本创作，小说续写等生成类任务：2～3k。
        
    -   参考问答：2k ~ 1w。
        
    -   文本分类：1～3k，和类别数量以及任务难易度强相关，类别较多/任务较难的场景可能需要1w条以上。
        
-   **如何扩充SFT数据：**
    
    -   明确数据扩充任务的输入输出映射关系，选用适配模型，通过前缀提示（PE）+ 小样本示例（Few Shots） 策略构建提示词。
        
    -   驱动模型生成补充样本，将其纳入 SFT 数据集候选池。
        
    -   校验生成样本与人工标注样本的风格、精度一致性；若不达标，迭代优化提示词并重新生成。
        

**数据质量判断**

-   Badcase 的覆盖度：SFT 核心目标是解决已知 Badcase，需确保数据集充分覆盖存量 Badcase 场景，为模型优化提供明确优化目标。
    
-   贴合真实应用场景：示例的提示词与输出需与实际应用场景一致，尽可能贴近真实需求。
    
-   保证问答质量：问题与答案需具体、清晰。
    
-   高质量数据源：优选历史数据、专家标注数据、业务日志数据。
    

* * *

### （二）技术与方案选型阶段

针对你手头的预算和目标，选择合适的微调策略。

1.  **选择基座模型 (Base Model)**
    

挑选一个经过预训练的开源模型。常见的有 Llama-3、Qwen (通义千问)、GLM-4 等。如果你想在普通电脑上跑，可能选 7B（70亿）或 8B 量级的参数；如果在服务器上，可能选 70B 或更大。

2.  **选择微调方法**
    

这是技术核心所在。目前主流有两类：

-   **全参数微调 (Full Parameter SFT)**：
    
    -   把模型里所有的参数（几十到几千亿个）全都解冻，根据新数据重新训练一遍。
        
    -   **缺点**：极其烧钱，需要巨量显存（GPU），普通人玩不起。
        
    -   **优点**：模型吸收新知识非常通透，能力天花板高。
        
-   **高效参数微调 (PEFT, Parameter-Efficient Fine-Tuning) —— 以 LoRA 为代表**：
    
    -   **LoRA (Low-Rank Adaptation)** 的原理是：冻结原模型所有的巨大参数网，不改变它。而在它旁边挂载一个**非常小的附加网络（补丁）**。训练时，只更新这个“补丁”里的参数。 比喻：就像你买了一本昂贵的《辞海》（预训练模型），你不想在书上乱画（全参数微调），所以你拿了一本小小的便利贴（LoRA），把笔记写在便利贴上，贴在书旁边。
        
    -   **QLoRA (Quantized LoRA)**：进一步把原模型的数据精度压缩（从32位浮点数压到4位），极大地降低显存占用。现在甚至可以在单张普通游戏显卡（如 RTX 4090）上微调几十亿参数的大模型。
        

* * *

### （三）训练阶段

在这个阶段，让机器开始“啃教材”。现在开源社区有很多傻瓜式的框架（如 **LLaMA-Factory**），懂一点点参数配置就能跑起来。

1.  **设置超参数**
    

你需要像老中医配药一样，调整模型学习的参数，决定它如何学习：

-   **学习率 （Learning Rate）**：模型更新知识的跨度。设置过高可能导致陷入局部最优或过拟合，设置过低则会减慢训练速度或导致训练难以收敛。 **经验参考值**：
    
    -   **LORA 训练**：建议设置为 1e-5 到 5e-5。
        
    -   **全量 SFT**：建议设置为 1e-5 到 2e-5。
        
-   **批次大小（Batch Size）**：模型一次看多少道题。
    
-   **训练轮数（Epoch）**：这套教材让模型反复读几遍。读少了没学会（欠拟合），读多了会死记硬背变成了书呆子（过拟合）。
    
    -   **通用建议**：通常设置为 2 到 5 轮。
        
    -   **判断方法**：可以通过观察 loss 曲线来判断是否需要调整：
        
        -   **过拟合**：如果训练集 loss 下降而验证集 loss 上升，说明模型已过拟合，应停止训练。
            
        -   **未收敛**：如果训练集和验证集 loss 都在缓慢下降，说明模型尚未收敛，可以继续训练。
            
    -   **特殊场景**：对于文案生成、小说创作等生成类任务，loss 无法完全反映上下文逻辑和风格。根据经验，可将 epoch 适当增大，例如设置为 5 到 10 轮。
        

2.  **开始训练**
    

点击运行后，紧紧盯着一张叫做 **Loss（损失函数）下降曲线** 的图表。Loss 分数代表着“模型当前回答跟标准答案的差距”。

理想状态下，Loss 线会平稳下降，最终稳定在一个低水平。

![](../../.resources/image-1778904494574.png)

3.  **警惕“灾难性遗忘”**
    

如果在微调时喂了太多某一领域的特定数据（比如一直让它背法律条文），模型可能会把原来预训练时学到的常识给忘了（比如忘记了基本运算或者无法正常对话）。这就叫灾难性遗忘。通常通过在微调数据中混入一些通用对话数据来缓解。

* * *

### （四）效果评估阶段

1.  **确定性任务：**
    
    Label 标注准确、输出结果唯一的任务，如分类、实体抽取、信息提取等任务。
    
    核心评估依据为**训练集与验证集的 loss 指标**，重点关注两点：
    
    -   训练集与验证集的损失是否同步下降；
        
    -   多轮 epoch 训练后，loss 是否趋于收敛。
        
2.  **生成式任务：** 输出结果多样、无固定标准答案的任务，如问答、文案生成、角色扮演对话等任务。
    
    采用**训练集 loss 参考 + 真实评估集业务指标主导**的评估策略：
    
    -   **训练集 loss 仅作参考**：验证集 loss 计算依赖 token 级 KL 散度损失，与真实业务场景的输出要求不完全匹配，可能出现验证集 loss 无明显下降但业务指标提升的情况；
        
    -   **真实评估集指标为核心**：服务发布后，基于真实评估集的业务指标（如内容相关性、流畅度、用户满意度等）判定最终微调效果。
        

## 五、微调的价格

[https://www.volcengine.com/docs/82379/1544106?lang=zh#b3a42676](https://www.volcengine.com/docs/82379/1544106?lang=zh#b3a42676)