

# Nova 1.0 をファインチューニングする
<a name="nova-fine-tune-1"></a>

**注記**  
教師ありファインチューニング (SFT) と直接選好最適化を使用して、Amazon Nova 1.0 シリーズのモデルをファインチューニングできます。Nova 2.0 モデルのファインチューニングについては、「[Nova 2.0 をファインチューニングする](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-fine-tune-2.html)」を参照してください。

## 前提条件
<a name="nova-model-training-jobs-prerequisites"></a>

トレーニングジョブを始める前に、以下の要件を確認してください。
+ トレーニングジョブの入力データと出力を格納する Amazon S3 バケット。両方に 1 つのバケットを使用することも、データタイプごとに個別のバケットを使用することもできます。トレーニング用の他のすべてのリソースを作成する AWS リージョンと同じ場所にバケットがあることを確認します。詳細については、「[汎用バケットの作成](https://docs.aws.amazon.com//AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。
+ トレーニングジョブを実行するアクセス許可がある IAM ロール。必ず IAM ポリシーを `AmazonSageMakerFullAccess` にアタッチしてください。詳細については、「[SageMaker AI 実行ロールの使用方法](https://docs.aws.amazon.com//sagemaker/latest/dg/sagemaker-roles.html)」を参照してください。
+ Amazon Nova の基本レシピについては、「[Amazon Nova レシピの取得](nova-model-recipes.md#nova-model-get-recipes)」を参照してください。

## データ準備
<a name="nova-model-training-prepare-data"></a>

高品質で適切にフォーマットされたデータを準備することは、大規模言語モデルのファインチューニングプロセスにおける重要な最初のステップです。教師ありファインチューニング (SFT) と直接選好最適化 (DPO) のどちらを Full-Rank または Low-Rank adaptation (LoRA) アプローチで使用する場合でも、モデルトレーニングを成功させるには、データで特定のフォーマット要件に従う必要があります。このセクションでは、Amazon Nova モデルのファインチューニングのためにデータセットを効果的に準備するうえで必要なデータ形式、検証方法、ベストプラクティスの概要を説明します。

### データ形式の要件
<a name="nova-model-training-prepare-data-format"></a>

**SFT**

SFT データ形式の要件 - フルランク SFT および LoRA SFT のいずれの場合も、データは以下に示す形式に従う必要があります。この形式の例と制約については、「[マルチモーダルファインチューニングのためのデータの準備](fine-tune-prepare-data-understanding.md)」を参照してください。

SFT データ検証 - 送信前にデータセット形式を検証するには、[Amazon Bedrock サンプルリポジトリ](https://github.com/aws-samples/amazon-bedrock-samples/blob/main/custom-models/bedrock-fine-tuning/nova/understanding/dataset_validation/nova_ft_dataset_validator.py)から次の検証スクリプトを使用することをお勧めします。この検証ツールは、ファインチューニングジョブを送信する前に、`jsonl` ファイルが必須の形式仕様に準拠していることを確認し、潜在的な問題を特定するのに役立ちます。

**DPO**

DPO データ形式の要件 - フルランクの DPO および LoRA の DPO のいずれの場合も、データは以下に示す形式に従う必要があります。また、データセットは SFT と同様の形式にする必要があります。ただし、最後のターンにはプリファレンスペアが必要です。

DPO データセットのその他の制約 - データセットのその他の制約は SFT でも同じです。詳細については、「[マルチモーダルファインチューニングのためのデータの準備](fine-tune-prepare-data-understanding.md)」を参照してください。トレーニング用の 1 つの JSONL ファイルと検証用の 1 つの JSONL ファイルが必要です。検証セットは必須ではありません。

DPO データセットの推奨事項 - 効果的なトレーニングのために最低 1,000 個のプリファレンスペア。高品質のプリファレンスデータを使用すると、より効率的な結果が得られます。

### 例
<a name="nova-model-training-prepare-data-example"></a>

**サンプル DPO データ形式**

```
// N-1 turns same as SFT format
{
    "role": "assistant",
    "candidates": [
        {
            "content": [
                {
                    "text": "..."
                } // content list can contain multiple 'text' objects
            ],
            "preferenceLabel": "preferred"
        },
        {
            "content": [
                {
                    "text": "..."
                } // content list can contain multiple 'text' objects
            ],
            "preferenceLabel": "non-preferred"
        }
    ]
}
```

**サンプル DPO データ形式 (マルチターン)**

```
{
    "system": [
        {
            "text": "..."
        }
    ],
    "messages":[
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "assistant",
            "candidates": [
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "preferred"
                },
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "non-preferred"
                }
            ]
        }
    ],
}
```

**サンプル DPO データ形式 (画像あり)**

```
{
    "system": [
        {
            "text": "..."
        }
    ],
    "messages":[
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                },
                {
                    "text": "..."
                },
                {
                    "image": {
                        "format": "jpeg",
                        "source": {
                            "s3Location": {
                                "uri": "s3://your-bucket/your-path/your-image.jpg",
                                "bucketOwner": "your-aws-account-id"
                            }
                        }
                    }
                } // "content" can have multiple "text" and "image" objects.
                 // max image count is 10
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                },
                {
                    "text": "..."
                },
                {
                    "image": {
                        "format": "jpeg",
                        "source": {
                            "s3Location": {
                                "uri": "s3://your-bucket/your-path/your-image.jpg",
                                "bucketOwner": "your-aws-account-id"
                            }
                        }
                    }
                } // "content" can have multiple "text" and "image" objects.
                 // max image count is 10
            ]
        },
        {
            "role": "assistant",
            "candidates": [
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "preferred"
                },
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "non-preferred"
                }
            ]
        }
    ],
}
```

### データセットの制限
<a name="nova-model-training-prepare-data-limits"></a>

トレーニングジョブのデフォルトは 1 日間の時間制限ですが、以下の表の見積もりでは、わかりやすくするために 5 日間のトレーニング期間を想定しています。ベストプラクティスとして、より長いトレーニングワークロードに対応するために、トレーニング時間の制限を最大 28 日間に増やすことをお勧めします。制限の引き上げをリクエストするには、「[クォータ引き上げのリクエスト](https://docs.aws.amazon.com//servicequotas/latest/userguide/request-quota-increase.html)」を参照してください。

**SFT データセットの制限**



- ** 32,000 コンテキスト長ジョブ **
  - **モデル:** Amazon Nova Micro / **方法:** フルランクと LoRA / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 100,000 件のレコードしか作成できません。
  - **モデル:** Amazon Nova Lite / **方法:** フルランク / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 100,000 件のレコードを作成できます。
  - **データセット:** 画像と動画 / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 50,000 件のレコードを作成できます。
  - **方法:** LoRA / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 100,000 件のレコードを作成できます。
  - **データセット:** 画像と動画 / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 90,000 件のレコードを作成できます。
  - **モデル:** Amazon Nova Pro / **方法:** フルランク / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 40,000 件のレコードを作成できます。
  - **データセット:** 画像と動画 / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 30,000 件のレコードを作成できます。
  - **方法:** LoRA / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 40,000 件のレコードを作成できます。
  - **データセット:** 画像と動画 / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 35,000 件のレコードを作成できます。

- ** 64,000 コンテキスト長ジョブ **
  - **モデル:** Amazon Nova Micro / **方法:** フルランクと LoRA / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 64,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 50,000 件のレコードしか作成できません。
  - **モデル:** Amazon Nova Lite / **方法:** フルランク / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 64,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 50,000 件のレコードを作成できます。
  - **データセット:** 画像と動画 / **説明:** すべてのレコードでコンテキスト長が 64,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 30,000 件のレコードを作成できます。
  - **方法:** LoRA / **データセット:** - / **説明:** LoRA は、Nova Lite の 64,000 ではサポートされていません。
  - **モデル:** Amazon Nova Pro / **方法:** フルランクと LoRA / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 64,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 17,000 件のレコードを作成できます。
  - **データセット:** 画像と動画 / **説明:** すべてのレコードでコンテキスト長が 64,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 15,000 件のレコードを作成できます。



DPO データセットの制限



- ** 16,000 コンテキスト長ジョブ **
  - **モデル:** Amazon Nova Micro / **方法:** フルランク / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 16,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 120,000 件のレコードしか作成できません。
  - **方法:** LoRA / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 16,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 125,000 件のレコードしか作成できません。
  - **モデル:** Amazon Nova Lite / **方法:** フルランク / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 16,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 130,000 件のレコードを作成できます。
  - **データセット:** 画像 / **説明:** すべてのレコードでコンテキスト長が 16,000 のデータセットを使用し、例えば 5 エポックで実行する場合、2 日以内に 20,000 件のサンプルを完了できます。
  - **方法:** LoRA / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 16,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 140,000 件のレコードを作成できます。
  - **データセット:** 画像 / **説明:** すべてのレコードでコンテキスト長が 16,000 のデータセットを使用し、例えば 5 エポックで実行する場合、2 日以内に 20,000 件のサンプルを完了できます。
  - **モデル:** Amazon Nova Pro / **方法:** フルランク / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 16,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 45,000 件のレコードを作成できます。
  - **データセット:** 画像 / **説明:** すべてのレコードでコンテキスト長が 16,000 のデータセットを使用し、例えば 5 エポックで実行する場合、4 日以内に 20,000 件のサンプルを完了できます。
  - **方法:** LoRA / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 16,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 55,000 件のレコードを作成できます。
  - **データセット:** 画像 / **説明:** すべてのレコードでコンテキスト長が 16,000 のデータセットを使用し、例えば 5 エポックで実行する場合、4 日以内に 20,000 件のサンプルを完了できます。

- ** 32,000 コンテキスト長ジョブ **
  - **モデル:** Amazon Nova Micro / **方法:** フルランク / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 45,000 件のレコードしか作成できません。
  - **方法:** LoRA / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 50,000 件のレコードしか作成できません。
  - **モデル:** Amazon Nova Lite / **方法:** フルランク / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 55,000 件のレコードを作成できます。
  - **データセット:** 画像 / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 35,000 件のレコードを作成できます。
  - **方法:** LoRA / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 60,000 件のレコードを作成できます。
  - **データセット:** 画像 / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 35,000 件のレコードを作成できます。
  - **モデル:** Amazon Nova Pro / **方法:** フルランク / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 20,000 件のレコードを作成できます。
  - **データセット:** 画像 / **説明:** すべてのレコードでコンテキスト長が 64,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 16,000 件のレコードを作成できます。
  - **方法:** LoRA / **データセット:** テキストのみ / **説明:** すべてのレコードでコンテキスト長が 32,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 22,000 件のレコードを作成できます。
  - **データセット:** 画像 / **説明:** すべてのレコードでコンテキスト長が 64,000 のデータセットを使用し、例えば 5 エポックで実行する場合、最大 18,000 件のレコードを作成できます。



エポックの数やレコードのコンテキスト長を減らすことで、より多くのレコードを提供できます。

## フルランク SFT と LoRA PEFT の設定
<a name="nova-model-training-jobs-recipe-config"></a>

このセクションでは、フルランクの教師ありファインチューニング (SFT) アプローチと 低ランク適応パラメータ効率ファインチューニング (LoRA PEFT) アプローチの両方のレシピ設定に関するガイダンスについて説明します。これらのレシピファイルは、モデルカスタマイズジョブのブループリントとして機能し、モデルがデータから学習する方法を決定するトレーニングパラメータ、ハイパーパラメータ、およびその他の重要な設定を指定できます。ハイパーパラメータを調整するには、「[ハイパーパラメータの選択](https://docs.aws.amazon.com//nova/latest/userguide/customize-fine-tune-hyperparameters.html)」のガイドラインに従います。

### ファインチューニング設定 (フルランク SFT と LoRA PEFT)
<a name="nova-model-training-jobs-recipe-config-1"></a>

レシピの点でフルランク SFT と LoRA PEFT の唯一の違いは LoRA PEFT 設定です。これはフルランクの場合は「null」に設定され、LoRA PEFT ベースのファインチューニングを使用する場合は適切な値に設定されます。サンプルレシピは[レシピ](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes) GitHub リポジトリにあります。次の表は、役に立つ可能性のある詳細な設定をまとめたものです。

**「run」設定**について。


|  | キー | 定義 | Micro | Lite | Pro | 
| --- | --- | --- | --- | --- | --- | 
| 実行設定 | model\_type | 使用する Nova モデルバリアントを指定します。このフィールドは変更しないでください。 | "amazon.nova-micro-v1:0:128k" | "amazon.nova-lite-v1:0:300k" | "amazon.nova-pro-v1:0:300k" | 
|  | model\_name\_or\_path | ベースモデルへのパス。 | "nova-micro/prod" | "nova-lite/prod" | "nova-pro/prod" | 
|  | レプリカ | 分散トレーニングに使用するコンピューティングインスタンスの数。 | 2、4、または 8 | 4、8、または 16 | 6、12、または 24 | 

**「training\_config」設定**について。



- ****
  - **ルートキー:** 
  - **子キー:** max\_length
  - **定義:** トークンの最大シーケンス長。これにより、トレーニングのコンテキストウィンドウのサイズが決まります。最も近い 1024 倍に調整可能で最大値は 65536 (Lite Lora の場合は 32768)。
  - **最小:** 1024
  - **最大:** 65536 (32768 をサポートする Lite LoRA を除く)。

- ****
  - **ルートキー:** 
  - **子キー:** global\_batch\_size
  - **定義:** ステップあたりのサンプルの合計。使用できる値は 16、32、64 です。最大値: Nova Pro の場合は 32、Nova Lite および Micro の場合は 64。
  - **最小:** 16
  - **最大:** Nova Pro の場合は 32、Nova Lite および Micro の場合は 64。

- ****トレーナー設定****
  - **ルートキー:** trainer
  - **子キー:** max\_epochs
  - **定義:** トレーニングデータセットの完全なパスの数。ほとんどのカスタマイズタスクでは、通常は 1～5 エポックで十分です。最大 5 つまで保持することをお勧めします。
  - **最小:** 1
  - **最大:** -

- ****モデル設定****
  - **ルートキー:** モデル / **子キー:** hidden\_dropout / **定義:** 隠れ状態の出力をドロップする確率。(0.0～0.2) を増やして、小さいデータセットのオーバーフィットを減らします。範囲は 0～1 です。 / **最小:** 0 / **最大:** 1
  - **ルートキー:** モデル / **子キー:** attention\_dropout / **定義:** アテンション重みをドロップする確率。一般化に役立つ場合があります。範囲は 0～1 です。 / **最小:** 0 / **最大:** 1
  - **ルートキー:** モデル / **子キー:** ffn\_dropout / **定義:** フィードフォワードネットワーク出力を削除する確率。範囲は 0～1 です。 / **最小:** 0 / **最大:** 1

- ****オプティマイザー設定****
  - **ルートキー:** model.optim / **子キー:** lr / **定義:** 最適化中のステップサイズを制御する学習率。制限は 0～1 です。通常は、パフォーマンスを高めるために 1e-6 から 1e-4 の間で設定します。 / **最小:** 0 / **最大:** 1
  - **ルートキー:** model.optim / **子キー:** 名前 / **定義:** オプティマイザーアルゴリズム。現在は、`distributed_fused_adam` のみがサポートされます。 / **最小:** - / **最大:** -
  - **ルートキー:** model.optim / **子キー:** adam\_w\_mode / **定義:** AdamW モード (true/false) を有効にします。 / **最小:** - / **最大:** -
  - **ルートキー:** model.optim / **子キー:** eps / **定義:** 数値安定性のためのイプシロン。 / **最小:**  / **最大:** 
  - **ルートキー:** model.optim / **子キー:** weight\_decay / **定義:** L2 正則化の強度は 0.0 から 1.0 の間で指定する必要があります。 / **最小:** 0 / **最大:** 1
  - **ルートキー:** model.optim / **子キー:** betas / **定義:** Adam オプティマイザーのベータは 0.0 から 1.0 の間で指定する必要があります。 / **最小:** 0 / **最大:** 1
  - **ルートキー:** model.optim / **子キー:** sched\_warmup\_steps / **定義:** 学習率を徐々に増やすステップの数。これにより、トレーニングの安定性が向上します。1～20 の範囲で指定します。 / **最小:** 1 / **最大:** 20
  - **ルートキー:** model.optim / **子キー:** sched\_constant\_steps / **定義:** 一定の学習率でのステップ。 / **最小:** 1.00E-10 / **最大:** 1.00E-06
  - **ルートキー:** model.optim / **子キー:** sched.min\_lr / **定義:** 減衰終了時の最小学習率。制限は 0～1 ですが、学習率より小さくする必要があります。 / **最小:** 0 / **最大:** 1

- ** **LoRA PEFT 設定** **
  - **ルートキー:** model.peft / **子キー:** peft\_scheme / **定義:** 「lora」か「null」を使用します。「lora」はパラメータ効率の高いファインチューニングで LoRA PEFT 手法を使用します。「null」はフルランクのファインチューニングを開始します。 / **最小:** - / **最大:** -
  - **ルートキー:** model.peft / **子キー:** lora\_tuning.loraplus\_lr\_ratio / **定義:** LoRA\+ 学習率スケーリング係数は 0.0～100.0 の間で指定する必要があります。 / **最小:** 0 / **最大:** 100
  - **ルートキー:** model.peft / **子キー:** lora\_tuning.alpha / **定義:** LoRA 重みのスケーリング係数。使用できる値は 32、64、96、128、160、192 です。 / **最小:** 32 / **最大:** 192
  - **ルートキー:** model.peft / **子キー:** lora\_tuning.adapter\_dropout / **定義:** LoRA パラメータの正則化。0.0 から 1.0 の間で指定する必要があります。 / **最小:** 0 / **最大:** 1



### 特定の設定のファインチューニング (DPO)
<a name="nova-model-training-jobs-recipe-config-2"></a>

LoRA PEFT および FullRank SFT と比較した直接選好最適化 (DPO) の違いは、dpo\_cfg 設定と許容値のみです。DPO 専用として許可されている値については、例の下の表を参照してください。サンプルレシピは[レシピ](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes) GitHub リポジトリにあります。次の表は、役に立つ可能性のある詳細な設定をまとめたものです。



- ****
  - **ルートキー:** 
  - **子キー:** max\_length
  - **定義:** トークンの最大シーケンス長。これにより、トレーニングのコンテキストウィンドウのサイズが決まります。最も近い 1024 倍に調整可能で最大値は 32,768。
  - **最小:** 1024
  - **最大:** 32768

- ****
  - **ルートキー:** 
  - **子キー:** global\_batch\_size
  - **定義:** グローバルバッチサイズ、指定できる値は {16, 32, 64, 128, 256} です。
  - **最小:** 16
  - **最大:** 256

- ****トレーナー設定****
  - **ルートキー:** trainer
  - **子キー:** max\_epochs
  - **定義:** トレーニングデータセットの完全なパスの数。ほとんどのカスタマイズタスクでは、通常は 1～5 エポックで十分です。最大エポックは 5 です。
  - **最小:** 1
  - **最大:** 5

- ****モデル設定****
  - **ルートキー:** モデル / **子キー:** hidden\_dropout / **定義:** 隠れ状態の出力をドロップする確率。(0.0～0.2) を増やして、小さいデータセットのオーバーフィットを減らします。範囲は 0～1 です。 / **最小:** 0 / **最大:** 1
  - **ルートキー:** モデル / **子キー:** attention\_dropout / **定義:** アテンション重みをドロップする確率。一般化に役立つ場合があります。範囲は 0～1 です。 / **最小:** 0 / **最大:** 1
  - **ルートキー:** モデル / **子キー:** ffn\_dropout / **定義:** フィードフォワードネットワーク出力を削除する確率。範囲は 0～1 です。 / **最小:** 0 / **最大:** 1

- ****オプティマイザー設定****
  - **ルートキー:** model.optim / **子キー:** lr / **定義:** 最適化中のステップサイズを制御する学習率。制限は 0～1 です。通常は、パフォーマンスを高めるために 1e-6 から 1e-4 の間で設定します。 / **最小:** 0 / **最大:** 1
  - **ルートキー:** model.optim / **子キー:** 名前 / **定義:** オプティマイザーアルゴリズム。現在は、`distributed_fused_adam` のみがサポートされます。 / **最小:** - / **最大:** -
  - **ルートキー:** model.optim / **子キー:** adam\_w\_mode / **定義:** AdamW モード (true/false) を有効にします。 / **最小:** - / **最大:** -
  - **ルートキー:** model.optim / **子キー:** eps / **定義:** 数値安定性のためのイプシロン。 / **最小:** 1.00E-10 / **最大:** 1.00E-06
  - **ルートキー:** model.optim / **子キー:** weight\_decay / **定義:** L2 正則化の強度は 0.0 から 1.0 の間で指定する必要があります。 / **最小:** 0 / **最大:** 1
  - **ルートキー:** model.optim / **子キー:** betas / **定義:** Adam オプティマイザーのベータは 0.0 から 1.0 の間で指定する必要があります。 / **最小:** 0 / **最大:** 1
  - **ルートキー:** model.optim / **子キー:** sched\_warmup\_steps / **定義:** 学習率を徐々に増やすステップの数。これにより、トレーニングの安定性が向上します。1～20 の範囲で指定します。 / **最小:** 1 / **最大:** 20
  - **ルートキー:** model.optim / **子キー:** sched\_constant\_steps / **定義:** 一定の学習率でのステップ。 / **最小:**  / **最大:** 
  - **ルートキー:** model.optim / **子キー:** sched.min\_lr / **定義:** 減衰終了時の最小学習率。制限は 0～1 ですが、学習率より小さくする必要があります。 / **最小:** 0 / **最大:** 1

- ** **LoRA PEFT 設定** **
  - **ルートキー:** model.peft / **子キー:** peft\_scheme / **定義:** 「lora」か「null」を使用します。「lora」はパラメータ効率の高いファインチューニングで LoRA PEFT 手法を使用します。「null」はフルランクのファインチューニングを開始します。 / **最小:** - / **最大:** -
  - **ルートキー:** model.peft / **子キー:** lora\_tuning.loraplus\_lr\_ratio / **定義:** LoRA\+ 学習率スケーリング係数は 0.0～100.0 の間で指定する必要があります。 / **最小:** 0 / **最大:** 100
  - **ルートキー:** model.peft / **子キー:** lora\_tuning.alpha / **定義:** LoRA 重みのスケーリング係数。使用できる値は 32、64、96、128、160、192 です。 / **最小:** 32 / **最大:** 192
  - **ルートキー:** model.peft / **子キー:** lora\_tuning.adapter\_dropout / **定義:** LoRA パラメータの正規化。0.0～1.0 の間で指定する必要があります。 / **最小:** 0 / **最大:** 1

- ****DPO 設定****
  - **ルートキー:** model-dpo\_cfg
  - **子キー:** beta
  - **定義:** 優先適用の強さ。
  - **最小:** 0.001
  - **最大:** 0.1



## SageMaker トレーニングジョブでカスタマイズされた Nova モデルを実行する
<a name="nova-model-training-jobs-notebook"></a>

このセクションでは、Jupyter Notebook 環境を通じて SageMaker トレーニングジョブでカスタマイズされた Nova モデルを実行する方法を紹介します。トレーニングジョブの設定と起動のプロセスを説明する完全な例と、適切なコンテナイメージ URI とインスタンス設定を選択するためのリファレンステーブルが用意されています。このアプローチにより、SageMaker AI のマネージドインフラストラクチャを活用してモデルをカスタマイズしながら、ファインチューニングワークフローをプログラムで制御できます。詳細については、「[SageMaker AI 推定器を使用したトレーニングジョブの実行](https://docs.aws.amazon.com//sagemaker/latest/dg/docker-containers-adapt-your-own-private-registry-estimator.html)」を参照してください。

### リファレンステーブル
<a name="nova-model-training-jobs-reference-table"></a>

サンプルノートブックを実行する前に、次の表を参照して、適切なコンテナイメージ URI とインスタンス設定を選択してください。

**画像 URI の選択**


| レシピ | イメージ URI | 
| --- | --- | 
| SFT イメージ URI | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-SFT-latest | 
| DPO イメージ URI | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest | 

**インスタンスタイプとカウントの選択**


| モデル | ファインチューニングジョブのタイプ | 手法タイプ | インスタンスタイプ | 推奨インスタンスカウント | 許可されるインスタンス数 | 
| --- | --- | --- | --- | --- | --- | 
| Amazon Nova Micro | SFT | LoRA | g5.12xlarge, g6.12xlarge, g5.48xlarge, g6.48xlarge | 1 | 1 | 
|  |  | LoRA \+ フルランク | g5.48xlarge, g6.48xlarge | 1 | 1 | 
|  |  |  | p4d.24xlarge | 2 | 2、4、8 | 
|  |  |  | p5.48xlarge, p5en.48xlarge | 1 | 1、2、4、8 | 
|  | DPO | LoRA | g5.12xlarge, g6.12xlarge, g5.48xlarge, g6.48xlarge | 1 | 1 | 
|  |  | LoRA \+ フルランク | p4d.24xlarge, p5.48xlarge, p5en.48xlarge | 2 | 2、4、8 | 
| Amazon Nova Lite | SFT | LoRA | g5.12xlarge, g6.12xlarge, g5.48xlarge, g6.48xlarge | 1 | 1 | 
|  |  |  | p5.48xlarge, p5en.48xlarge | 1 | 1、4、8、16 | 
|  |  | LoRA \+ フルランク | p4d.24xlarge | 4 | 4、8、16 | 
|  |  |  | p5.48xlarge, p5en.48xlarge | 2 | 2、4、8、16 | 
|  | DPO | LoRA | g5.48xlarge, g6.48xlarge | 1 | 1 | 
|  |  | LoRA \+ フルランク | p4d.24xlarge, p5.48xlarge, p5en.48xlarge | 4 | 4、8、16 | 
| Amazon Nova Pro | SFT | LoRA | p4d.24xlarge | 6 | 6、12、24 | 
|  |  |  | p5.48xlarge, p5en.48xlarge | 3 | 3、6、12、24 | 
|  |  | LoRA \+ フルランク | p5.48xlarge, p5en.48xlarge | 6 | 6、12、24 | 
|  | DPO | LoRA | p4d.24xlarge | 6 | 6、12、24 | 
|  |  | LoRA \+ フルランク | p4d.24xlarge | 12 | 12、24 | 
|  |  |  | p5.48xlarge, p5en.48xlarge | 4 | 4、8、16 | 

### サンプルノートブック
<a name="nova-model-training-jobs-notebook"></a>

次のサンプルノートブックは、トレーニングジョブを実行する方法を示したものです。SageMaker トレーニングジョブを使用して Nova モデルをカスタマイズする方法に関するその他の入門ノートブックについては、「[SageMaker AI 推定器を使用したトレーニングジョブの実行](https://docs.aws.amazon.com//sagemaker/latest/dg/docker-containers-adapt-your-own-private-registry-estimator.html)」を参照してください。

```
# 1. Install dependencies

!pip install sagemaker==2.254.1

# 2. Import dependencies and initialize sagemaker session

import sagemaker,boto3

sm = boto3.client('sagemaker', region_name='us-east-1')
sagemaker_session = sagemaker.session.Session(boto_session=boto3.session.Session(), sagemaker_client=sm)

# 3. Configure your job
# Define the core configuration for launching a SageMaker Training Job. This includes input/output S3 URIs, container image, hardware setup, and other runtime parameters. Update the placeholders below before submitting the job.

job_name = "<Your Job Name>"

input_s3_uri = "<S3 path to input data>"
validation_s3_uri = "<S3 path to validation data>" # optional, leave blank if no validation data

output_s3_uri = "<S3 path to output location>"

image_uri = "<Image URI from documentation>" # you can choose the image for SFT/DPO
instance_type = "ml.p5.48xlarge" # do not change
instance_count = <Integer number of hosts> # change hosts as needed. Refer to documentation for allowed values based on model type.
role_arn = "<IAM Role you want to use to run the job>"
recipe_path = "<Local path to the recipe file>"
output_kms_key = "<KMS key arn to encrypt trained model in Amazon-owned S3 bucket>" # optional, leave blank for Amazon managed encryption

# 4. Launch SageMaker Training Job
# This block sets up and runs the SageMaker training job using the PyTorch estimator. It configures the training image, hardware, input channels, and TensorBoard integration. Validation data is included if provided.

from sagemaker.debugger import TensorBoardOutputConfig
from sagemaker.pytorch import PyTorch
from sagemaker.inputs import TrainingInput

tensorboard_output_config = TensorBoardOutputConfig(
    s3_output_path=output_s3_uri,
)

estimator = PyTorch(
    output_path=output_s3_uri,
    base_job_name=job_name,
    role=role_arn,
    instance_count=instance_count,
    instance_type=instance_type,
    training_recipe=recipe_path,
    sagemaker_session=sagemaker_session,
    image_uri=image_uri,
    tensorboard_output_config=tensorboard_output_config, # Add the setting for using TensorBoard.
    disable_profiler=True,
    debugger_hook_config=False,
    output_kms_key=output_kms_key
)

trainingInput = TrainingInput(
    s3_data=input_s3_uri,
    distribution='FullyReplicated',
    s3_data_type='Converse'
)

if (validation_s3_uri):
    validationInput = TrainingInput(
        s3_data=validation_s3_uri,
        distribution='FullyReplicated',
        s3_data_type='Converse'
    )

    estimator.fit(inputs={"train": trainingInput, "validation": validationInput}) # inputs must be called "train" and "validation", do not change
else:
    estimator.fit(inputs={"train": trainingInput})
```

## ハイパーパラメータの最適化に関するガイダンス
<a name="nova-model-hyperparameter"></a>

Nova LLM モデルを効果的にファインチューニングするには、ハイパーパラメータを慎重に選択する必要があります。このセクションでは基本的なレシピ構造とコンポーネントについて説明しますが、特定のユースケースに合わせてハイパーパラメータを最適化するには、追加のガイダンスが必要になることがよくあります。ハイパーパラメータの選択、ベストプラクティス、最適化戦略に関する包括的な推奨事項については、「[ハイパーパラメータの選択](https://docs.aws.amazon.com//nova/latest/userguide/customize-fine-tune-hyperparameters.html)」を参照してください。このリソースでは、データセットの特性とトレーニング目標に基づいて、適切な学習率、バッチサイズ、トレーニングエポック、その他の重要なパラメータを選択するための詳細なガイダンスを提供しています。最適なモデルパフォーマンスを実現するためにレシピ設定をファインチューニングする場合は、このガイドを参照することをお勧めします。

エポック、学習率、学習ウォームアップステップの最小値、最大値、デフォルト値の詳細については、「[理解モデルのハイパーパラメータ](https://docs.aws.amazon.com//nova/latest/userguide/fine-tune-hyperparameters-understanding-models.html)」を参照してください。

**一般的なレシピの変更**

特定のユースケースに基づく一般的なレシピ調整は次のとおりです。
+ **小さいデータセットの場合 (例が 1,000 個未満)**

  ```
  training_config:
      max_epochs: 2  # More passes through a smaller dataset
  model:
      hidden_dropout: 0.1  # Increase regularization
      weight_decay: 0.01   # Increase regularization
  ```
+ **コンピューティングが制限されている効率性の場合**

  ```
  peft:
      peft_scheme: "lora"
      lora_tuning:
  ```
+ **複雑な命令チューニングの場合**

  ```
  optim:
      lr: 5e-6  # Lower learning rate for more stable learning
      sched:
          warmup_steps: 100  # Longer warmup for stability
  ```