> ## Documentation Index
> Fetch the complete documentation index at: https://docs.siliconflow.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 模型微调

## 1. 模型微调简介

模型微调是一种在已有预训练模型的基础上，通过使用特定任务的数据集进行进一步训练的技术。这种方法允许模型在保持其在大规模数据集上学到的通用知识的同时，适应特定任务的细微差别。使用微调模型，可以获得以下好处：

* 提高性能：微调可以显著提高模型在特定任务上的性能。
* 减少训练时间：相比于从头开始训练模型，微调通常需要较少的训练时间和计算资源。
* 适应特定领域：微调可以帮助模型更好地适应特定领域的数据和任务。

**SiliconFlow 平台提供高效的模型微调能力，目前有以下模型支持微调**：

* 对话模型已支持：
  * Qwen/Qwen2.5-7B-Instruct
  * Qwen/Qwen2.5-14B-Instruct
  * Qwen/Qwen2.5-32B-Instruct
  * Qwen/Qwen2.5-72B-Instruct

最新支持的模型参考[模型微调](https://cloud.siliconflow.cn/fine-tune)

## 2. 使用流程

### 2.1 准备数据

#### 2.2.1 语言模型数据准备

仅支持 `.jsonl` 文件，且需符合以下要求：

1. 每行是一个独立的 `JSON` 对象；
2. 每个对象必须包含键名为 `messages` 的数组，数组不能为空；
3. `messages` 中每个元素必须包含 `role` 和 `content` 两个字段；
4. `role` 只能是 `system`、`user` 或 `assistant`；
5. 如果有 `system` 角色消息，必须在数组首位；
6. 第一条非 `system` 消息必须是 `user` 角色；
7. `user` 和 `assistant` 角色的消息应当交替、成对出现，不少于 `1` 对

如下为数据示例：

```json theme={null}
{"messages": [{"role": "system", "content": "你是客服助手"}, {"role": "user", "content": "如何修改收货地址？"}, {"role": "assistant", "content": "您可以按以下步骤修改：\n1. 进入订单详情\n2. 点击'修改地址'\n3. 输入新地址信息\n4. 保存修改"}]}
{"messages": [{"role": "system", "content": "你是客服助手"}, {"role": "user", "content": "如何指定收获时间"}, {"role": "assistant", "content": "您可以按以下步骤修改：\n1. 进入订单详情\n2. 点击'修改送货时间'\n3. 输入新收获时间\n4. 保存修改"}]}
```

### 2.2 新建并配置微调任务

* 选择 `对话模型微调` 或者 `生图模型微调`
* 填写任务名称
* 选择基础模型
* 上传或选取已上传的训练数据
* 设置验证数据，支持训练集按比例切分（默认 10%），或单独选定验证集
* 配置训练参数

### 2.3 开始训练

* 点击"开始微调"
* 等待任务完成
* 获取模型标识符

### 2.4 调用微调模型

#### 2.4.1 对话微调模型调用

* 复制模型标识符
  在[模型微调页](https://cloud.siliconflow.cn/fine-tune)复制对应的模型标识符。

<Frame>
  <img src="https://mintcdn.com/siliconflow-37161621/avRxNd36OE2uuCpS/images/guides/fine-tuning/fine-tuning-models.jpeg?fit=max&auto=format&n=avRxNd36OE2uuCpS&q=85&s=4a28def503acd4916c6cdd2bc93abf5b" width="1200" height="377" data-path="images/guides/fine-tuning/fine-tuning-models.jpeg" />
</Frame>

* 通过 `/chat/completions` API 即可直接调用微调后的模型

下面是基于 OpenAI 的chat.completions 接口访问微调后模型的例子：

```python theme={null}
from openai import OpenAI
client = OpenAI(
    api_key="您的 APIKEY", # 从https://cloud.siliconflow.cn/account/ak获取
    base_url="https://api.siliconflow.cn/v1"
)

messages = [
    {"role": "user", "content": "用当前语言解释微调模型流程"},
]

response = client.chat.completions.create(
    model="您的微调模型名",
    messages=messages,
    stream=True,
    max_tokens=4096
)

for chunk in response:
    print(chunk.choices[0].delta.content, end='')
```

## 3. 参数配置详解

1. 基础训练参数

|        参数名       |   说明  |  取值范围  |   建议值  |     使用建议     |
| :--------------: | :---: | :----: | :----: | :----------: |
|   Learning Rate  |  学习速率 |  0-0.1 | 0.0001 |              |
| Number of Epochs |  训练轮数 |  1-10  |    3   |              |
|    Batch Size    |  批次大小 |  1-32  |    8   |              |
|    Max Tokens    | 最大标记数 | 0-4096 |  4096  | 根据实际对话长度需求设置 |

2. LoRA参数

|      参数名     |   说明  |  取值范围 |  建议值 | 使用建议 |
| :----------: | :---: | :---: | :--: | :--: |
|   LoRA Rank  |  矩阵秩  |  1-64 |   8  |      |
|  LoRA Alpha  |  缩放因子 | 1-128 |  32  |      |
| LoRA Dropout | 随机丢弃率 | 0-1.0 | 0.05 |      |

3. 场景化配置方案

**对话模型**

|  场景  | Learning Rate | Epochs | Batch Size | LoRA Rank | LoRA Alpha | Dropout |
| :--: | :-----------: | :----: | :--------: | :-------: | :--------: | :-----: |
| 标准方案 |     0.0001    |    3   |      8     |     8     |     32     |   0.05  |
| 效果优先 |     0.0001    |    5   |     16     |     16    |     64     |   0.1   |
| 轻量快速 |     0.0001    |    2   |      8     |     4     |     16     |   0.05  |

## 4. 基于SiliconFlow微调服务来优化业务实战

之前硅基流动开发了[智说新语](https://mp.weixin.qq.com/s/5KXjWwAXT-LfjGVJDE4Eiw)应用，我们通过提示词工程提供一个复杂的提示词来让大模型生成“金句”风格的描述语句。
现在，我们可通过平台的微调功能来压缩提示词并提升效果，让整个的文本生成风格更统一，速度更快，且进一步优化成本。

### 4.1 在平台上使用“智说新语”的语料按照上述进行微调。

步骤见[模型微调使用流程](/guides/fine-tune#2)<br />
详细语料和测试代码见[siliconcloud-cookbook](https://github.com/siliconflow/siliconcloud-cookbook/tree/main/examples/fine-tune)

### 4.2 对比微调前后的效果

使用方式见[模型微调调用模型](/guides/fine-tune#2-4)

#### 4.2.1 模型输入

* 微调前：
  Qwen2.5-7B-Instruct 系统Prompt:
  ```json theme={null}
  Qwen2.5-7B-Instruct 系统Prompt
  # 角色
  你是一位新潮评论家，你年轻、批判，又深刻；
  你言辞犀利而幽默，擅长一针见血得表达隐喻，对现实的批判讽刺又不失文雅；
  你的行文风格和"Oscar Wilde" "鲁迅" "林语堂"等大师高度一致；
  从情感上要是对输入的否定。
  # 任务
  ## 金句诠释
  用特殊视角来全新得诠释给定的汉语词汇；
  敏锐得抓住给定的词汇的本质，用“辛辣的讽刺”“一针见血的评论”的风格构造包含隐喻又直达本质的「金句」
  例如：
  "合伙人"： "一同下海捞金时，个个都是乘风破浪的水手，待到分金之际，方知彼此是劫财的海盗。"
  "大数据"： "看似无所不能的数字神明，实则不过是现代社会的数字鸦片，让人沉溺于虚幻的精准，却忽略了人性的复杂与多变。"
  "股市"： "万人涌入的淘金场，表面上是财富的摇篮，实则多数人成了填坑的沙土。"
  "白领"： "西装革履，看似掌握命运的舵手，实则不过是写字楼里的高级囚徒。"
  "金融家"： "在金钱的海洋中遨游，表面上是操纵风浪的舵手，实则不过是随波逐流的浮萍。"
  "城市化"： "乡村的宁静被钢铁森林吞噬，人们在追逐繁华的幻影中，遗失了心灵的田园。"
  "逃离北上广"： "逃离繁华的都市牢笼，看似追逐自由的灵魂，实则不过是换个地方继续画地为牢。"
  "基金"： "看似为财富增值保驾护航的金融巨轮，实则多数人不过是随波逐流的浮萍，最终沦为填补市场波动的牺牲品。"
  # 输入
  用户直接输入词汇。
  # 输出
  严格输出JSON格式，包括两个字段，“prompt”为用户的输入；“output”为用户的金句内容，不额外输出额外任何其他内容，不要输出引号，严格限制用户的输入的词汇绝对不能出现在输出中，注意突出转折和矛盾，输出内容为一句话，最后以“。”结束，中间的停顿使用“，”分隔。例如 
  {
    "prompt": "合伙人",
    "output": "一同下海捞金时，个个都是乘风破浪的水手，待到分金之际，方知彼此是劫财的海盗。"
  }
  ```

* Qwen2.5-7B-Instruct+智说新语微调后的Prompt:
  ```json theme={null}
  你是智说新语生成器
  ```

#### 4.2.2 模型输出

| 输入   | Qwen2.5-7B-Instruct 模型                                                                                                                   | Qwen2.5-7B-Instruct 微调模型                             |
| ---- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| 五道口  | VLG，不过是知识的轻轨与资本的交汇站，文青与土豪在此擦肩而过，孰是求知的信徒，孰是逐利的信徒，全凭幸存者的微笑。                                                                                | 知识的殿堂与商业的洪流交织，学人的笔记与商人的谈资齐飞，地名犹在，荣光已非。               |
| 新时代  | claimed to break旧 mold yet still clings to the stirring rhetoric of progress, like a fashion plate who ignores the evolution of fashion。 | 新时代的号角已吹响，然砥砺前行时，方显初心易失之难。                           |
| 创新   | 看似凤凰涅槃的奇迹，实则多数人不过是换汤不换药的换皮游戏。                                                                                                            | 标新立异本是勇气的象征，却在同质化的社会中成了猎奇的代名词。                       |
| 降维打击 | 所谓降维打击，实则是现代文明中的一种高级愚民术，用高深莫测的科技iscard，让普通人以为自己正生活在理性与进步之中，却不知已在智力与道德的低维空间中遭受碾压。。                                                        | 高维智慧轻而易举地碾压低维凡尘，却不知低维众生早已习于在自己的平庸中寻觅慰藉，哪里还懂得高维打击的意义。 |
| 基金   | 看似为财富增值保驾护航的金融巨轮，实则多数人不过是随波逐流的浮萍，最终沦为填补市场波动的牺牲品。                                                                                         | 投资者的白日梦，用钱铺路，却常跌入夜的陷阱。                               |

#### 4.2.3 微调总结

1. 微调后的输出内容风格更统一，输出效果更稳定可控。
2. 微调后整个输入长度大大降低，从原始的553个token，降低至8个token，显著降低了输入tokens长度，速度更快，成本得以进一步优化。
