

# 模型合并
<a name="nova-model-merge"></a>

**重要**  
 本文档内提及的“基础模型”为参与合并的两类模型之一：若未执行[迭代训练](nova-iterative-training.md)，则指原生基础模型（如 Nova Lite 2.0）；若已执行[迭代训练](nova-iterative-training.md)，则为上一轮迭代训练产出的模型。

微调完成后，可按需执行由**用户自定义配置**的模型合并流程。该流程将新习得的知识与基础模型原有能力相融合，确保最终模型既能保留基础模型的通用能力，又能吸收本轮微调训练习得的专项行为特征。模型合并可有效缓解*灾难性遗忘*问题：即模型在新数据上微调后，丢失此前已学习知识的现象。

## 按训练类型划分的模型合并适用规则
<a name="nova-model-merge-applicability"></a>

仅 SFT 支持配置模型合并功能。下表汇总各类训练类型的模型合并行为：


| 训练类型 | 模型合并行为 | 
| --- | --- | 
| [监督式微调（SFT）](nova-fine-tune.md) | 支持用户自定义配置模型合并。可按本文档说明调整经过微调的模型与基础模型之间的合并权重。 | 
| [持续预训练（CPT）](nova-cpt.md) | 不执行模型合并。训练产出的模型检查点直接作为最终模型输出。合并流程不涉及基础模型。 | 

## 建议启用模型合并的场景
<a name="nova-model-merge-when-to-use"></a>

满足以下条件时，建议启用模型合并：
+ **微调后通用能力出现退化：**若经过微调的模型在训练数据以外的任务（如数学计算、逻辑推理、代码生成）上表现下滑，可通过模型合并重新融合基础模型的原有知识，以恢复这类通用能力。
+ **迭代/持续训练：**基于先前自定义的模型检查点开展新一轮微调时，必须启用模型合并，才能保留前序轮次习得的能力。若未启用，每一轮新微调都可能导致此前习得的能力被覆盖。

通常**无需**启用模型合并的场景：
+ **仅关注目标任务性能最大化**，无需在意通用能力的保留。
+ **爬坡迭代调优：**计划在同一数据集上多轮迭代，持续提升评测指标表现。
+ **基于推理的微调：**相关研究表明，基于推理的 SFT 可显著缓解灾难性遗忘问题。

## 如何配置模型合并权重
<a name="nova-model-merge-how-to-configure"></a>

 `model_importance_score.fine_tuned_model` 的默认值为 1.0，代表训练产出的模型检查点将完全采用微调权重，不会融合基础模型参数。若训练数据集覆盖全面、且高度贴合目标业务任务，使用该默认参数即可取得理想效果。

您可通过配置[超参数](nova-fine-tune-1.md#nova-model-hyperparameter) `model_importance_score`，控制最终模型在专项能力与通用知识之间的权重配比。例如：

```
    training_config:
    # ...
      model_importance_score:
        fine_tuned_model: 0.75 # set value between 0.0 to 1.0 inclusive
```

 `model_importance_score.fine_tuned_model` 取值越接近 1.0，模型越偏向适配微调数据集；取值越接近 0.0，则保留更多基础模型的通用能力。以上示例中，最终模型融合了 75% 在特定数据集上经过微调的模型与 25% 基础模型。

 若发现经过微调的模型通用能力出现退化（例如在训练数据以外的任务上表现下滑），可降低 ` model_importance_score.fine_tuned_model` 的取值，引入更多基础模型的知识参与融合。

**注意**  
 用户虽可自定义模型合并流程的权重参数，但无法自由选择参与合并的模型对象。也就是说，合并操作仅会在基础模型与本轮训练产出的经过微调的模型二者间执行。其中基础模型既可以是原生基础模型（如 Nova Lite 2.0），也可以是上一轮[迭代训练](nova-iterative-training.md)输出的模型。

## 选择模型合并权重
<a name="nova-model-merge-choosing-weights"></a>

参数 `model_importance_score.fine_tuned_model` 用于调节经过微调的模型与基础模型的权重配比。建议参考以下准则作为起点：


| 场景 | 推荐初始权重 | 理由 | 
| --- | --- | --- | 
| 单轮 SFT，训练数据集覆盖全面 | 1.0（默认值，不合并） | 训练数据可充分覆盖目标任务；合并会稀释已习得的专项能力，无明显增益。 | 
| 单轮 SFT，通用能力出现退化 | 0.7–0.9 | 融入基础模型知识以恢复数学计算、逻辑推理、代码生成等通用能力，同时最大限度保留微调后的任务性能。 | 
| 迭代/持续 SFT（基于历史检查点） | 0.3–0.7 | 降低权重可保留更多前序轮次习得的能力；若不合并，后续微调会覆盖前期习得技能。 | 
| 探索性调试/无明确调参方向 | 0.7 | 均衡折中的初始值，可根据评测结果调整。 | 

**通用原则：**权重越高（越接近 1.0），模型在目标任务上的效果越好，但更容易丢失通用能力；权重越低（越接近 0.0），越能保留基础模型的通用能力，但专项能力会有所下降。不存在适用于所有场景的最优权重，合适的取值取决于数据集规模、数据领域与基础模型的重合度，以及您需要保留的模型能力类型。

**提示**  
若训练数据包含推理链（CoT，即思维链），通常可以设置更高的合并权重（或直接设为 1.0，不进行合并），因为包含推理链的数据具有正则化效果，有助于模型维持通用能力。

## 模型合并权重效果评测
<a name="nova-model-merge-evaluating"></a>

训练完成后，需评测融合后的模型，验证合并权重取值是否合适。无需多次训练，仅一轮评测即可判断是否需要调整。
+ **目标任务性能校验**：使用预留测试集运行领域专属评测指标（准确率、F1 值、抽取得分等）。与未经微调的基础模型结果进行对比，确认微调带来了性能提升。若相对基础模型的提升幅度低于预期，说明合并权重过低，基础模型参数稀释了本轮微调学到的专项知识。
+ **通用能力抽样检查：**向融合后模型输入若干训练领域外的任务提示（例如数学应用题、文本摘要需求、代码编写问题）。将输出结果与基础模型进行定性对比。若融合后模型表现明显劣于基础模型（如逻辑混乱、拒绝作答），或在基础模型可正常处理的任务上输出无意义内容，则说明合并权重过高，模型已丢失大量通用能力。

## 模型合并原理：全秩微调
<a name="nova-model-merge-full-rank"></a>

 全秩训练会生成完整的模型权重集。在合并阶段，每个参数均通过加权融合计算得出：

```
# Weighted interpolation
Merged Model = (1 - model_importance_score.fine_tuned_model) * Base Model + model_importance_score.fine_tuned_model * Fine-Tuned Model
```

 例如，若 `model_importance_score.fine_tuned_model = 0.3`，则融合后模型包含 70% 基础模型知识与 30% 微调模型习得知识。

## 模型合并原理：LoRA 微调
<a name="nova-model-merge-lora"></a>

 LoRA（低秩适配）训练出一组精简的低秩矩阵对（矩阵 A 与 B），以低秩更新的形式承载模型适配能力。模型合并时，所有 LoRA 矩阵 A、B 均通过 ` model_importance_score.fine_tuned_model` 进行系数缩放，计算公式如下。公式中，` alpha` 为 LoRA 缩放系数（对应训练配方中的 `peft.lora_tuning.alpha`），`rank` 为 LoRA 秩。有关 ` alpha` 的可用值，请参阅 [LoRA SFT 训练配方](https://github.com/aws/sagemaker-hyperpod-recipes/blob/main/recipes_collection/recipes/fine-tuning/nova/nova_2_0/nova_lite/SFT/nova_lite_2_0_p5_gpu_lora_sft.yaml)。

 请注意，此时矩阵 A 与 B 仅包含本轮微调习得的知识，不包含过往轮次的信息。先前轮次的知识将通过基础模型合并或下文介绍的上一阶段 LoRA 适配器合并引入。

```
Scaled_A = sqrt(model_importance_score.fine_tuned_model) * sqrt(alpha/rank) * A
Scaled_B = sqrt(model_importance_score.fine_tuned_model) * sqrt(alpha/rank) * B
```

 **LoRA 训练会输出两类模型构件：完整融合模型与融合后的 LoRA 适配器**。下面分别介绍。

 **完整融合模型** 

将缩放后的 LoRA 更新与基础模型相加，计算公式如下：

```
Merged Model = Base Model + (Scaled_B @ Scaled_A)
```

 `Merged Model` 同时包含本轮微调习得的知识，并根据 `model_importance_score.fine_tuned_model` 的取值，继承相应比例的 `Base Model` 知识。

 **融合后的 LoRA 适配器** 

LoRA 适配器的合并方式取决于当前采用单阶段训练还是迭代式训练。
+  单阶段 LoRA 训练（无迭代训练）：直接保存经微调生成的 LoRA 适配器，不进行合并，因为该场景下无前序 LoRA 适配器可供合并。
+  [迭代式 LoRA 训练](nova-iterative-training.md#nova-iterative-technique-consistency)：各阶段产出的适配器合并为一组适配器，计算公式如下：

  ```
  Merged = Stage1_Scaled_B @ Stage1_Scaled_A + Stage2_Scaled_B @ Stage2_Scaled_A
  ```

  `Merged` LoRA 适配器会依据用户配置的 `model_importance_score.fine_tuned_model` 参数，同时包含历史迭代训练知识与本轮微调知识。

  另请注意关于 LoRA 全秩训练混用的[迭代训练限制](nova-iterative-training.md#nova-iterative-technique-consistency)。

最终融合矩阵 `Merged_B` 与 `Merged_A` 完整记录全部训练历史，可直接用于[按需推理](deploy-custom-model.md)。