

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

**重要**  
 在本文件中，我們將參考「基礎模型」作為兩個模型之一。如果未執行[反覆訓練](nova-iterative-training.md)，或先前[反覆訓練](nova-iterative-training.md)執行的輸出，則可能是原始的基礎模型 （例如 Nova Lite 2.0)。

微調完成後，您的自訂模型會經歷**選用的使用者可設定**模型合併步驟，將新學到的知識與「基礎模型」的功能混合。此程序可確保您的最終模型保留「基礎模型」的原始智慧，同時整合在最新微調訓練執行期間學到的特殊行為。模型合併可減輕稱為*災難性忘記的*現象，其中模型在微調新資料後會失去先前學到的知識。

## 依訓練類型的模型合併適用性
<a name="nova-model-merge-applicability"></a>

模型合併僅適用於 SFT 訓練。下表摘要說明每種訓練類型的模型合併行為：


| 訓練類型 | 模型合併行為 | 
| --- | --- | 
| [受管微調 (SFT)](nova-fine-tune.md) | 套用使用者可設定的模型合併。您可以控制微調模型與基礎模型之間的合併權重，如本文件所述。 | 
| [強化微調 (RFT)](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-reinforcement-fine-tuning.html) | 無模型合併。訓練過的模型檢查點會直接輸出為最終模型。合併步驟中沒有涉及的基礎模型。 | 
| [持續訓練前 (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-2.md#nova-2-selecting-hyperparameters)`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) 可保留基礎模型的廣泛技能，但可減少專業化。沒有全域的最佳值 — 正確的權重取決於您的資料集大小、網域與基礎模型重疊，以及您需要保留的功能。

**提示**  
如果您的訓練資料包含推理追蹤 (chain-of-thought)，您通常可以使用較高的合併權重 （或完全略過 1.0 的合併），因為推理擴增資料可作為保留一般功能的規則化工具。

## 評估合併權重
<a name="nova-model-merge-evaluating"></a>

訓練完成後，請評估合併模型以確認合併權重是否適當。您不需要多個訓練執行 — 單一評估通過可以告訴您是否進行調整。
+ **目標任務效能** — 在保留的測試集中執行您的網域特定評估 （準確性、F1、擷取分數等）。與基本模型 （在任何微調之前） 進行比較，以確認微調效能改善。如果基礎模型的增益小於預期，您的合併權重可能太低 — 基礎模型的權重正在排除訓練期間學到的內容。
+ **一般功能 spot-check** — 使用訓練網域以外的一些任務提示合併模型 （例如數學字詞問題、摘要請求或編碼問題）。以定性方式將回應與基礎模型進行比較。如果合併模型的回應明顯比基礎模型差—不連貫、拒絕回答或對基礎模型處理良好的任務產生 Gibberish—您的合併權重太高，且模型失去一般功能。

## 合併的運作方式：全階微調
<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)，以低排名更新表示適應。在模型合併過程中，每個 A 和 B LoRA 矩陣都會由 縮放` 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`具備目前訓練執行的知識，以及`Base Model`根據使用者設定的 從 繼承一些知識`model_importance_score.fine_tuned_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`反映完整的訓練歷史記錄，並用於[隨需推論](nova-model-bedrock-inference.md#custom-fine-tune-odi)。