

# モデルマージ
<a name="nova-model-merge"></a>

**重要**  
 このドキュメントでは、2 つのモデルのいずれかを「ベースモデル」として参照します。[反復トレーニング](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 です。つまり、トレーニング出力チェックポイントではファインチューニングされた重みを完全に使用し、「ベースモデル」からのブレンドはありません。デフォルトでは、トレーニングデータが包括的で、ターゲットタスクを厳密に表す場合にうまく機能します。

`model_importance_score` [ハイパーパラメータ](nova-fine-tune-1.md#nova-model-hyperparameter)で を設定することで、最終的なモデルが専門分野と一般知識のバランスを取る方法を制御できます。例えば、次のようになります。

```
    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>

トレーニングが完了したら、マージされたモデルを評価して、マージの重みが適切であることを確認します。複数のトレーニング実行は必要ありません。1 回の評価パスで調整するかどうかを判断できます。
+ **ターゲットタスクのパフォーマンス** – ホールドアウトテストセットでドメイン固有の評価 (精度、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) を学習します。モデルマージプロセス中、各 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 アダプターのセットの 2 つのモデルアーティファクトが生成されます**。それぞれを個別に見てみましょう。

 **完全にマージされたモデル** 

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)では、各ステージのアダプターが 1 つのセットにマージされます。

  ```
  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)に使用されます。