

# Amazon Nova モデルのトレーニング
<a name="smtj-training"></a>

SageMaker トレーニングジョブ での Amazon Nova モデルのトレーニングは、教師ありファインチューニング (SFT) と強化ファインチューニング (RFT) をサポートしています。各手法はさまざまなカスタマイズニーズに対応し、さまざまな Amazon Nova モデルバージョンに適用できます。

**Topics**
+ [

# Nova 2.0 をファインチューニングする
](nova-fine-tune-2.md)
+ [

# Amazon Nova モデルによる強化ファインチューニング (RFT)
](nova-reinforcement-fine-tuning.md)

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

## 前提条件
<a name="nova-model-training-jobs-prerequisites2"></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)」を参照してください。

## SFT とは?
<a name="nova-2-what-is-sft"></a>

教師ありファインチューニング (SFT) は、ラベル付き入出力ペアを使用して言語モデルをトレーニングします。このモデルは、プロンプトとレスポンスで構成されるデモンストレーションの例から学習し、特定のタスク、指示、または望ましい動作に合わせて機能を改善します。

## データ準備
<a name="nova-2-data-preparation"></a>

### 概要
<a name="nova-2-data-overview"></a>

Nova 2.0 SFT データは、Nova 1.0 と同じ Converse API 形式を使用し、オプションの推論コンテンツフィールドが追加されています。完全な形式の仕様については、以下を参照してください。
+ 推論コンテンツ: [ReasoningContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ReasoningContentBlock.html)
+ Converse API スキーマ: [Converse API](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-call.html)
+ データセット制約: [データセット制約](https://docs.aws.amazon.com/nova/latest/userguide/fine-tune-prepare-data-understanding.html)

### サポートされている機能
<a name="nova-2-supported-features"></a>
+ **入力タイプ** – ユーザーコンテンツブロック内のテキスト、画像、または動画
+ **アシスタントコンテンツ** – テキストのみのレスポンスと推論コンテンツ
+ **データセット構成** – 同種である必要があります。次のいずれかを選択します。
  + テキストのみのターン
  + テキストと画像のターン
  + テキストと動画のターン (ドキュメントの理解をサポート)

**重要**  
同じデータセット内または異なるターン間で画像と動画を混在させることはできません。

### 現在の制限事項
<a name="nova-2-current-limitations"></a>
+ **マルチモーダル推論コンテンツ** – Converse 形式は画像ベースの推論コンテンツをサポートしていますが、Nova 2.0 SFT は reasoningText フィールドのテキストベースの推論コンテンツのみをサポートしています。
+ **検証セット** – Nova 2.0 で SFT の検証データセットを指定することはできません。検証データセットを指定すると、トレーニング中は無視されます。この制限は、UI ベースのジョブ送信とプログラムによるジョブ送信の両方に適用されます。

### サポートされているメディア形式
<a name="nova-2-supported-media"></a>
+ **画像** – PNG、JPEG、GIF
+ **動画** – MOV、MKV、MP4

### データ形式の例
<a name="nova-2-data-examples"></a>

------
#### [ Text-only (Nova 1.0 compatible) ]

```
{  
  "schemaVersion": "bedrock-conversation-2024",  
  "system": [  
    {  
      "text": "You are a digital assistant with a friendly personality"  
    }  
  ],  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "text": "What country is right next to Australia?"  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {  
          "text": "The closest country is New Zealand"  
        }  
      ]  
    }  
  ]  
}
```

------
#### [ Text with reasoning (Nova 2.0) ]

```
{  
  "schemaVersion": "bedrock-conversation-2024",  
  "system": [  
    {  
      "text": "You are a digital assistant with a friendly personality"  
    }  
  ],  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "text": "What country is right next to Australia?"  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {  
          "reasoningContent": {  
            "reasoningText": {  
              "text": "I need to use my world knowledge of geography to answer this question"  
            }  
          }  
        },  
        {  
          "text": "The closest country to Australia is New Zealand, located to the southeast across the Tasman Sea."  
        }  
      ]  
    }  
  ]  
}
```

------
#### [ Image \$1 text input ]

```
{  
  "schemaVersion": "bedrock-conversation-2024",  
  "system": [  
    {  
      "text": "You are a helpful assistant."  
    }  
  ],  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "image": {  
            "format": "jpeg",  
            "source": {  
              "s3Location": {  
                "uri": "s3://your-bucket/your-path/your-image.jpg",  
                "bucketOwner": "your-aws-account-id"  
              }  
            }  
          }  
        },  
        {  
          "text": "Which country is highlighted in the image?"  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {  
          "reasoningContent": {  
            "reasoningText": {  
              "text": "I will determine the highlighted country by examining its location on the map and using my geographical knowledge"  
            }  
          }  
        },  
        {  
          "text": "The highlighted country is New Zealand"  
        }  
      ]  
    }  
  ]  
}
```

------
#### [ Video \$1 text input ]

```
{  
  "schemaVersion": "bedrock-conversation-2024",  
  "system": [  
    {  
      "text": "You are a helpful assistant."  
    }  
  ],  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "video": {  
            "format": "mp4",  
            "source": {  
              "s3Location": {  
                "uri": "s3://your-bucket/your-path/your-video.mp4",  
                "bucketOwner": "your-aws-account-id"  
              }  
            }  
          }  
        },  
        {  
          "text": "What is shown in this video?"  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {  
          "reasoningContent": {  
            "reasoningText": {  
              "text": "I will analyze the video content to identify key elements"  
            }  
          }  
        },  
        {  
          "text": "The video shows a map with New Zealand highlighted"  
        }  
      ]  
    }  
  ]  
}
```

------

## ツール呼び出し
<a name="nova-2-tool-calling"></a>

Nova 2.0 SFT は、ツール呼び出しパターンに関するモデルのトレーニングをサポートしているため、モデルは外部ツールまたは関数を呼び出すタイミングと方法を学習できます。

### ツール呼び出しのデータ形式
<a name="nova-2-tool-calling-format"></a>

ツール呼び出しのトレーニングデータには、使用可能なツールを定義する `toolConfig` セクションと、ツールの使用パターンを示す会話ターンが含まれます。

**入力例**

```
{  
  "schemaVersion": "bedrock-conversation-2024",  
  "system": [  
    {  
      "text": "You are an expert in composing function calls."  
    }  
  ],  
  "toolConfig": {  
    "tools": [  
      {  
        "toolSpec": {  
          "name": "getItemCost",  
          "description": "Retrieve the cost of an item from the catalog",  
          "inputSchema": {  
            "json": {  
              "type": "object",  
              "properties": {  
                "item_name": {  
                  "type": "string",  
                  "description": "The name of the item to retrieve cost for"  
                },  
                "item_id": {  
                  "type": "string",  
                  "description": "The ASIN of item to retrieve cost for"  
                }  
              },  
              "required": [  
                "item_id"  
              ]  
            }  
          }  
        }  
      },  
      {  
        "toolSpec": {  
          "name": "getItemAvailability",  
          "description": "Retrieve whether an item is available in a given location",  
          "inputSchema": {  
            "json": {  
              "type": "object",  
              "properties": {  
                "zipcode": {  
                  "type": "string",  
                  "description": "The zipcode of the location to check in"  
                },  
                "quantity": {  
                  "type": "integer",  
                  "description": "The number of items to check availability for"  
                },  
                "item_id": {  
                  "type": "string",  
                  "description": "The ASIN of item to check availability for"  
                }  
              },  
              "required": [  
                "item_id", "zipcode"  
              ]  
            }  
          }  
        }  
      }  
    ]  
  },  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "text": "I need to check whether there are twenty pieces of the following item available. Here is the item ASIN on Amazon: id-123. Please check for the zipcode 94086"  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {  
          "reasoningContent": {  
            "reasoningText": {  
              "text": "The user wants to check how many pieces of the item with ASIN id-123 are available in the zipcode 94086"  
            }  
          }  
        },  
        {  
          "toolUse": {  
            "toolUseId": "getItemAvailability_0",  
            "name": "getItemAvailability",  
            "input": {  
              "zipcode": "94086",  
              "quantity": 20,  
              "item_id": "id-123"  
            }  
          }  
        }  
      ]  
    },  
    {  
      "role": "user",  
      "content": [  
        {  
          "toolResult": {  
            "toolUseId": "getItemAvailability_0",  
            "content": [  
              {  
                "text": "[{\"name\": \"getItemAvailability\", \"results\": {\"availability\": true}}]"  
              }  
            ]  
          }  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {  
          "text": "Yes, there are twenty pieces of item id-123 available at 94086. Would you like to place an order or know the total cost?"  
        }  
      ]  
    }  
  ]  
}
```

### ツール呼び出しの要件
<a name="nova-2-tool-calling-requirements"></a>

ツール呼び出しのトレーニングデータを作成するときは、次の要件に従ってください。


| 要件 | 説明 | 
| --- | --- | 
| ToolUse 配置 | ToolUse はアシスタントターンにのみ表示する必要があります | 
| ToolResult の配置 | ToolResult はユーザーターンにのみ表示する必要があります | 
| ToolResult 形式 | ToolResult はテキストまたは JSON のみである必要があります。Nova モデルでは他のモダリティはサポートされていません | 
| inputSchema 形式 | toolSpec 内の inputSchema は有効な JSON Schema オブジェクトである必要があります | 
| toolUseId マッチング | 各 ToolResult は、前述のアシスタント ToolUse の有効な toolUseId を参照し、各 toolUseId は会話ごとに 1 回だけ使用する必要があります | 

### 重要な注意事項
<a name="nova-2-tool-calling-notes"></a>
+ ツール定義がすべてのトレーニングサンプルで一貫しているようにしてください
+ このモデルは、提供するデモンストレーションからツール呼び出しパターンを学習します
+ 各ツールを使用するタイミングと使用しないタイミングのさまざまな例を含めます

## ドキュメント理解
<a name="nova-2-document-understanding"></a>

Nova 2.0 SFT はドキュメントベースのタスクのトレーニングをサポートしているため、モデルは PDF ドキュメントに関する質問を分析して回答する方法を学習できます。

### ドキュメントを理解するためのデータ形式
<a name="nova-2-document-format"></a>

ドキュメント理解のトレーニングデータには、ユーザーコンテンツブロック内のドキュメント参照が含まれ、モデルがドキュメントコンテンツを抽出して内容について推論することを学習するためのものです。

**入力例**

```
{  
{  
  "schemaVersion": "bedrock-conversation-2024",  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "text": "What are the ways in which a customer can experience issues during checkout on Amazon?"  
        },  
        {  
          "document": {  
            "format": "pdf",  
            "source": {  
              "s3Location": {  
                "uri": "s3://my-bucket-name/path/to/documents/customer_service_debugging.pdf",  
                "bucketOwner": "123456789012"  
              }  
            }  
          }  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {
          "reasoningContent": {  
            "reasoningText": {  
              "text": "I need to find the relevant section in the document to answer the question."  
            }  
          }
        },
        {  
          "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?"  
        }   
      ]
    }  
  ]  
}
}
```

### ドキュメント理解の制限事項
<a name="nova-2-document-limitations"></a>


| 制限 | 詳細 | 
| --- | --- | 
| サポートされる形式 | PDF ファイルのみ | 
| 最大ドキュメントサイズ | 10 MB | 
| モダリティミキシング | サンプルにはドキュメントとテキストを含めることができますが、ドキュメントを他のモダリティ (画像、動画) と混ぜ合わせることはできません | 

### ドキュメント理解のためのベストプラクティス
<a name="nova-2-document-best-practices"></a>
+ ドキュメントが明確にフォーマットされ、テキストが抽出可能であることを確認します
+ さまざまなドキュメントタイプと質問形式をカバーするさまざまな例を提供します
+ モデルがドキュメント分析パターンを学習するのに役立つ推論コンテンツを含めます

## 動画理解
<a name="nova-2-video-understanding"></a>

Nova 2.0 SFT は動画ベースのタスクのトレーニングをサポートし、モデルが動画コンテンツに関する質問を分析して応答する方法を学習できるようにします。

### 動画を理解するためのデータ形式
<a name="nova-2-video-format"></a>

動画理解のトレーニングデータには、ユーザーコンテンツブロック内の動画参照が含まれ、モデルが動画コンテンツから情報を抽出して内容について推論することを学習するためのものです。

**入力例**

```
  
{  
  "schemaVersion": "bedrock-conversation-2024",  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "text": "What are the ways in which a customer can experience issues during checkout on Amazon?"  
        },  
        {  
          "video": {  
            "format": "mp4",  
            "source": {  
              "s3Location": {  
                "uri": "s3://my-bucket-name/path/to/videos/customer_service_debugging.mp4",  
                "bucketOwner": "123456789012"  
              }  
            }  
          }  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {
          "reasoningContent": {  
            "reasoningText": {  
              "text": "I need to find the relevant section in the video to answer the question."  
            }  
          }
        },
        {  
          "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?"  
        }   
      ]  
    }  
  ]  
}
```

### 動画理解の制限事項
<a name="nova-2-video-limitations"></a>


| 制限 | 詳細 | 
| --- | --- | 
| 動画の最大サイズ | 50 MB | 
| 最大動画再生時間 | 15 分 | 
| サンプルあたりの動画数 | サンプルごとに許可される動画は 1 つだけです。同じサンプル内で複数の動画はサポートされていません | 
| モダリティミキシング | サンプルには動画とテキストを含めることができますが、動画を他のモダリティ (画像、ドキュメント) と組み合わせることはできません | 

### サポートされている動画形式
<a name="nova-2-video-formats"></a>
+ MOV
+ MKV
+ MP4

### 動画理解のベストプラクティス
<a name="nova-2-video-best-practices"></a>
+ 動画を簡潔に保ち、タスクに関連するコンテンツに集中させる
+ モデルが意味のある情報を抽出するのに動画の品質が十分であることを確認します
+ 動画コンテンツの特定の側面を参照する明確な質問を提供します
+ さまざまな動画タイプと質問形式をカバーするさまざまな例を含めます

## 推論モードと非推論モード
<a name="nova-2-reasoning-modes"></a>

### 推論コンテンツについて
<a name="nova-2-understanding-reasoning"></a>

推論コンテンツ (思考の連鎖とも呼ばれます) は、最終的な回答を生成する前に、モデルの中間思考ステップをキャプチャします。`assistant` ターンでは、`reasoningContent` フィールドを使用して推論トレースを含めます。

**損失の計算方法**
+ **推論コンテンツあり** – トレーニング損失には、推論トークンと最終出力トークンの両方が含まれます
+ **推論コンテンツなし** – トレーニング損失は最終的な出力トークンでのみ計算されます

マルチターン会話では、複数のアシスタントターンにまたがって `reasoningContent` を含めることができます。

**形式ガイドライン**
+ 推論コンテンツにプレーンテキストを使用します
+ タスクで特に必要な場合を除いて、`<thinking>` や `</thinking>` などのマークアップタグは避けてください
+ 推論の内容が明確で、問題解決プロセスに関連していることを確認します

### 推論モードを有効にする場合
<a name="nova-2-when-enable-reasoning"></a>

次の場合にトレーニング設定で `reasoning_enabled: true` を設定します。
+ トレーニングデータに推論トークンがある場合
+ 最終的な出力を生成する前に、モデルで思考トークンを生成したい場合
+ 複雑な推論タスクのパフォーマンスを向上させる必要がある場合

`reasoning_enabled = true` を使用して推論なしのデータセットで Nova をトレーニングすることは許可されています。ただし、Nova は主に推論を適用せずにデータに表示されるレスポンスを生成することを学習するため、モデルが推論機能を失う可能性があります。非推論データセットで Nova をトレーニングしたいが、推論時にも推論機能を使用したい場合は、トレーニング中は推論を無効にし (`reasoning_enabled = false`)、推論時には有効にすることができます。このアプローチでは推論時に推論機能を使用できますが、推論なしの推論と比較してパフォーマンスが向上することは保証されません。一般的に、推論データセットを使用する場合はトレーニングと推論の両方で推論を有効にし、非推論データセットを使用する場合は両方で推論を無効にします。

次の場合に `reasoning_enabled: false` を設定します。
+ トレーニングデータに推論トークンがない場合
+ 明示的な推論ステップの恩恵を受けない単純なタスクをトレーニングしている場合
+ 速度を最適化し、トークン使用量を削減したい場合

### 推論データの生成
<a name="nova-2-generating-reasoning"></a>

データセットに推論トレースがない場合は、Nova Premier のような推論可能なモデルを使用して作成できます。入力と出力のペアをモデルに提供し、推論プロセスを取得して推論拡張データセットを構築します。

### トレーニングに推論トークンを使用する
<a name="nova-2-using-reasoning-training"></a>

推論モードを有効にしてトレーニングすると、モデルは内部推論を最終回答から分離することを学習します。トレーニングプロセス:
+ データを入力、推論、回答のセットで整理します
+ 推論トークンと回答トークンの両方からの標準 next-token 予測損失を使用して最適化します
+ レスポンスを生成する前に、モデルに内部的に推論するよう促します

### 効果的な推論コンテンツ
<a name="nova-2-effective-reasoning"></a>

高品質の推論コンテンツには、以下を含める必要があります。
+ 中間的な思考と分析
+ 論理的な演繹と推論ステップ
+ 段階的な問題解決アプローチ
+ ステップと結論の明示的な関係

これは、モデルが「回答する前に考える」能力を開発するのに役立ちます。

## データセット準備ガイドライン
<a name="nova-2-dataset-preparation"></a>

### サイズと品質
<a name="nova-2-size-quality"></a>
+ **推奨サイズ** – 2,000～10,000 サンプル
+ **最小サンプル** – 200
+ **優先** – 数量よりも品質。例が正確で適切に注釈が付けられているようにします
+ **アプリケーションの連携** – データセットは本番環境のユースケースを厳密に反映する必要があります

### 多様性
<a name="nova-2-diversity"></a>

次のようなさまざまな例を含めます。
+ 予想される入力の全範囲をカバーする
+ さまざまな難易度を表す
+ エッジケースとバリエーションを含む
+ 狭いパターンへのオーバーフィットを防止する

### 出力フォーマット
<a name="nova-2-output-formatting"></a>

アシスタントレスポンスで目的の出力形式を明確に指定します。
+ JSON の構造
+ テーブル
+ CSV 形式
+ アプリケーションに固有のカスタム形式

### マルチターンの会話
<a name="nova-2-multi-turn"></a>

マルチターンデータセットの場合、次の点に注意してください。
+ 損失は、ユーザーのターンではなく、アシスタントのターンでのみ計算されます
+ 各アシスタントレスポンスは適切にフォーマットする必要があります
+ 会話のターン全体で一貫性を維持します

### 品質チェックリスト
<a name="nova-2-quality-checklist"></a>
+ 十分なデータセットサイズ (2K～10K サンプル)
+ すべてのユースケースをカバーするさまざまな例
+ 明確で一貫した出力フォーマット
+ 正確なラベルと注釈
+ 本番シナリオを代表する内容であること
+ 矛盾やあいまいさがない

### データのアップロード
<a name="nova-2-uploading-data"></a>

データセットは、SageMaker トレーニングジョブがアクセスできるバケットにアップロードする必要があります。必要な許可の設定の詳細については、「[前提条件](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-model-general-prerequisites.html)」を参照してください。

## トレーニングジョブを開始する
<a name="nova-2-starting-training"></a>

### ハイパーパラメータの選択とレシピの更新
<a name="nova-2-selecting-hyperparameters"></a>

Nova 2.0 のセットアップは、Nova 1.0 のセットアップとほぼ同じです。入力データが S3 にアップロードされたら、ファインチューニングフォルダの [SageMaker HyperPod レシピ](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/fine-tuning/nova)のレシピを使用します。Nova 2.0 では、ユースケースに基づいて更新できる主要なハイパーパラメータの一部を以下に示します。以下は、Nova 2.0 SFT PEFT レシピの例です。コンテナ画像 URI の場合、`708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-SFT-V2-latest` を使用して SFT ファインチューニングジョブを実行します。

Nova トレーニングとの厳密な互換性のために、SageMaker AI PySDK の v2.254.1 を使用してください。SDK を v3.0 バージョンにアップグレードすると、重大な変更が発生します。SageMaker AI PySDK の v3 のサポートが間もなく開始されます。

**入力例**

```
!pip install sagemaker==2.254.1
```

```
run:  
  name: {peft_recipe_job_name}  
  model_type: amazon.nova-2-lite-v1:0:256k  
  model_name_or_path: {peft_model_name_or_path}  
  data_s3_path: {train_dataset_s3_path} # SageMaker HyperPod (SMHP) only and not compatible with SageMaker Training jobs. Note replace my-bucket-name with your real bucket name for SMHP job  
  replicas: 4                      # Number of compute instances for training, allowed values are 4, 8, 16, 32  
  output_s3_path: ""               # Output artifact path (Hyperpod job-specific; not compatible with standard SageMaker Training jobs). Note replace my-bucket-name with your real bucket name for SMHP job  
  
training_config:  
  max_steps: 10                   # Maximum training steps. Minimal is 4.  
  save_steps: 10                      # How many training steps the checkpoint will be saved. Should be less than or equal to max_steps  
  save_top_k: 1                    # Keep top K best checkpoints. Note supported only for SageMaker HyperPod jobs. Minimal is 1.  
  max_length: 32768                # Sequence length (options: 8192, 16384, 32768 [default], 65536)  
  global_batch_size: 32            # Global batch size (options: 32, 64, 128)  
  reasoning_enabled: true          # If data has reasoningContent, set to true; otherwise False  
  
  lr_scheduler:  
    warmup_steps: 15               # Learning rate warmup steps. Recommend 15% of max_steps  
    min_lr: 1e-6                   # Minimum learning rate, must be between 0.0 and 1.0  
  
  optim_config:                    # Optimizer settings  
    lr: 1e-5                       # Learning rate, must be between 0.0 and 1.0  
    weight_decay: 0.0              # L2 regularization strength, must be between 0.0 and 1.0  
    adam_beta1: 0.9                # Exponential decay rate for first-moment estimates, must be between 0.0 and 1.0  
    adam_beta2: 0.95               # Exponential decay rate for second-moment estimates, must be between 0.0 and 1.0  
  
  peft:                            # Parameter-efficient fine-tuning (LoRA)  
    peft_scheme: "lora"            # Enable LoRA for PEFT  
    lora_tuning:  
      alpha: 64                    # Scaling factor for LoRA weights ( options: 32, 64, 96, 128, 160, 192),  
      lora_plus_lr_ratio: 64.0
```

レシピには、Nova 1.0 とほぼ同じハイパーパラメータも含まれています。注目すべきハイパーパラメータは次のとおりです。
+ `max_steps` – ジョブを実行するステップの数。通常、1 つのエポック (データセット全体で 1 回実行) の場合、ステップ数 = データサンプル数/グローバルバッチサイズ。ステップ数が多く、グローバルバッチサイズが小さいほど、ジョブの実行に時間がかかります。
+ `reasoning_enabled` – データセットの推論モードを制御します。オプション:
  + `true`: 推論モードを有効にします (高推論に相当)
  + `false`: 推論モードを無効にします

  注: SFT の場合、推論の労力レベルをきめ細かく制御することはできません。`reasoning_enabled: true` を設定すると、完全な推論機能が有効になります。
+ `peft.peft_scheme` – これを「lora」に設定すると、PEFT ベースのファインチューニングが有効になります。null (引用符なし) に設定すると、フルランクのファインチューニングが有効になります。

### トレーニングジョブの開始
<a name="nova-2-start-job"></a>

```
from sagemaker.pytorch import PyTorch  
  
# define OutputDataConfig path  
if default_prefix:  
    output_path = f"s3://{bucket_name}/{default_prefix}/{sm_training_job_name}"  
else:  
    output_path = f"s3://{bucket_name}/{sm_training_job_name}"  

output_kms_key = "<KMS key arn to encrypt trained model in Amazon-owned S3 bucket>" # optional, leave blank for Amazon managed encryption
  
recipe_overrides = {  
    "run": {  
        "replicas": instance_count,  # Required  
        "output_s3_path": output_path  
    },  
}  
  
estimator = PyTorch(  
    output_path=output_path,  
    base_job_name=sm_training_job_name,  
    role=role,  
    disable_profiler=True,  
    debugger_hook_config=False,  
    instance_count=instance_count,  
    instance_type=instance_type,  
    training_recipe=training_recipe,  
    recipe_overrides=recipe_overrides,  
    max_run=432000,  
    sagemaker_session=sagemaker_session,  
    image_uri=image_uri,
    output_kms_key=output_kms_key,
    tags=[  
        {'Key': 'model_name_or_path', 'Value': model_name_or_path},  
    ]  
)  
  
print(f"\nsm_training_job_name:\n{sm_training_job_name}\n")  
print(f"output_path:\n{output_path}")
```

```
from sagemaker.inputs import TrainingInput  
  
train_input = TrainingInput(  
    s3_data=train_dataset_s3_path,  
    distribution="FullyReplicated",  
    s3_data_type="Converse",  
)  
  
estimator.fit(inputs={"validation": val_input}, wait=False)
```

**注記**  
検証データセットの受け渡しは、Nova 2.0 の教師ありファインチューニングではサポートされていません。

ジョブを開始するには:
+ データセットパスとハイパーパラメータを使用してレシピを更新します
+ ノートブックで指定されたセルを実行してトレーニングジョブを送信します

ノートブックがジョブの送信を処理し、ステータスの追跡を行います。

# Amazon Nova モデルによる強化ファインチューニング (RFT)
<a name="nova-reinforcement-fine-tuning"></a>

## 概要
<a name="nova-rft-overview"></a>

**RFT とは?**

強化ファインチューニング (RFT) は、正確な回答ではなく、モデルのパフォーマンスを示す測定可能なスコアや報酬などのフィードバックシグナルでトレーニングすることで、モデルのパフォーマンスを向上させます。入出力ペアから学習する教師ありファインチューニングとは異なり、RFT は報酬関数を使用してモデルレスポンスを評価し、モデルを繰り返し最適化してこれらの報酬を最大化します。このアプローチは、正確な正解出力を定義することが難しいものの、レスポンスの品質を確実に測定できる場合に優れた効果を発揮します。

**RFT はどのような場合に使用するか**

明確で測定可能な成功基準を定義できるが、トレーニング用に正確な出力を提供することに苦労している場合は、RFT を使用します。これは、以下に最適です。
+ 品質が主観的または多面的であるタスク (創造的な記述、コードの最適化、複雑な推論)
+ 複数の有効なソリューションがあり、一部のソリューションが他のソリューションよりも明らかに優れているシナリオ
+ 反復的な改善、パーソナライゼーション、または複雑なビジネスルールの遵守を必要とするアプリケーション
+ 高品質のラベル付き例の収集が高価または実用的でないケース

**最適なユースケース**

RFT は、出力品質を客観的に測定できるが、最適なレスポンスを事前に定義することが難しいドメインに優れています。
+ 数学的な問題解決とコード生成
+ 科学的推論と構造化データ分析
+ 段階的な推論または複数ターンの問題解決を必要とするタスク
+ 複数の目標 (精度、効率、スタイル) のバランスを取るアプリケーション
+ 実行結果またはパフォーマンスメトリクスを通じてプログラムで成功を検証できるシナリオ

**サポートされているモデル**

Nova Lite 2.0

## データ形式の概要
<a name="nova-rft-data-format"></a>

RFT トレーニングデータは、OpenAI の強化ファインチューニング[形式](https://platform.openai.com/docs/api-reference/fine-tuning/reinforcement-input)に従う必要があります。各トレーニング例は、以下を含む JSON オブジェクトです。
+ `system` および `user` ロールを使用した会話ターンの `messages` 配列
+ 報酬計算に期待される出力または評価基準を含む `reference_answer` フィールド

**現在の制限事項**
+ テキストのみ

### データ形式の例
<a name="nova-rft-data-examples"></a>

各例は、JSONL ファイルの 1 行上にあり、1 行に 1 つの JSON オブジェクトが必要です。

------
#### [ Chemistry problem ]

```
{
  "id": "chem-01",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful chemistry assistant"
    },
    {
      "role": "user",
      "content": "Calculate the molecular weight of caffeine (C8H10N4O2)"
    }
  ],
  "reference_answer": {
    "molecular_weight": 194.19,
    "unit": "g/mol",
    "calculation": "8(12.01) + 10(1.008) + 4(14.01) + 2(16.00) = 194.19"
  }
}
```

------
#### [ Math problem ]

```
{
  "id": "sample-001",  // Optional
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  }
}
```

------
#### [ Code problem ]

```
{
  "id": "code-002",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful programming assistant"
    },
    {
      "role": "user",
      "content": "Write a Python function that reverses a string without using built-in reverse methods"
    }
  ],
  "reference_answer": {
    "code": "def reverse_string(s):  \n    result = ''  \n    for i in range(len(s) - 1, -1, -1):  \n        result += s[i]  \n    return result",
    "test_cases": [
      {
        "input": "hello",
        "expected_output": "olleh"
      },
      {
        "input": "",
        "expected_output": ""
      },
      {
        "input": "a",
        "expected_output": "a"
      },
      {
        "input": "Python123",
        "expected_output": "321nohtyP"
      }
    ],
    "all_tests_pass": true
  }
}
```

------

`reference_answer` フィールドには、報酬関数がモデルのレスポンスをスコアリングするために使用する期待される出力または評価基準が含まれます。構造化された出力に限定されず、報酬関数が品質を評価するのに役立つ任意の形式を含めることができます。

## データセットサイズの推奨事項
<a name="nova-rft-dataset-size"></a>

**開始点**
+ 最小 100 個のトレーニング例
+ 最小 100 個の評価例

**評価優先アプローチ**

大規模な RFT トレーニングに投資する前に、モデルのベースラインパフォーマンスを評価します。
+ **高パフォーマンス (95% を超える報酬)** – RFT は不要な場合があり、モデルのパフォーマンスは既に良好
+ **パフォーマンスが非常に低い (0% の報酬)**: まず SFT に切り替えて基本的な機能を確立する
+ **中程度のパフォーマンス** – RFT が適切である可能性が高い

小さいデータセットから始めると、次のことが可能になります。
+ 報酬関数にバグがないことを検証する
+ RFT がユースケースに適したアプローチであることを確認する
+ 問題を早期に特定して修正する
+ スケールアップする前にワークフローをテストする

検証後、より大きなデータセットに拡張してパフォーマンスをさらに向上させることができます。

## 効果的なトレーニングデータの特徴
<a name="nova-rft-effective-data"></a>

**明確性と一貫性**

優れた RFT の例には、さまざまなモデル出力にわたって正確な報酬計算を可能にする明確かつ曖昧ではない入力データが必要です。以下を含むデータのノイズを避けます。
+ 不整合なフォーマット
+ 矛盾するラベルまたは指示
+ あいまいなプロンプト
+ 参照回答の競合

あいまいさがあると、トレーニングプロセスが誤った方向に導かれ、モデルが意図しない動作を学習します。

**多様性**

データセットは、堅牢な実際のパフォーマンスを確保するために、本番稼働用ユースケースの完全な多様性をキャプチャする必要があります。以下が含まれます:
+ さまざまな入力形式とエッジケース
+ ログとユーザー分析から実際の本番稼働用使用パターンをマッピングする
+ ユーザータイプ、地理的リージョン、季節的変動をまたいでサンプリングする
+ 単純な問題から複雑な問題まで、難易度レベルを含める

**報酬関数に関する考慮事項**

効率的なトレーニングのために以下のように報酬関数を設計します。
+ (数分ではなく) 数秒以内に実行する
+ Lambda と効果的に並列化する
+ 一貫性のある信頼できるスコアを返す
+ さまざまなタイプのモデル出力を適切に処理する

高速でスケーラブルな報酬関数により、迅速なイテレーションと費用対効果の高い実験が行えます。

## その他のプロパティ
<a name="nova-rft-additional-properties"></a>

RFT データ形式は、コアスキーマ要件 (`messages` および `reference_answer`) を超えるカスタムフィールドをサポートします。この柔軟性により、報酬関数が適切な評価に必要な追加データを追加できます。

**注記**  
レシピでこれを設定する必要はありません。データ形式は本質的に追加のフィールドをサポートします。トレーニングデータ JSON に含めるだけで、`metadata` フィールドの報酬関数に渡されます。

**その他の一般的なプロパティ**

メタデータフィールドの例:
+ `task_id` – 追跡用の一意の識別子
+ `difficulty_level` – 問題の複雑さインジケータ
+ `domain` – サブジェクトエリアまたはカテゴリ
+ `expected_reasoning_steps` – ソリューションのステップ数

**追加プロパティの例**

```
{
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  },
  "task_id": "algebra_001",
  "difficulty_level": "easy",
  "domain": "algebra",
  "expected_reasoning_steps": 3
}
```

これらの追加フィールドは評価中に報酬関数に渡されるため、特定のユースケースに合わせた高度なスコアリングロジックが可能になります。

## トレーニング設定
<a name="nova-rft-training-config"></a>

**サンプルレシピ**

```
# Note:
# This recipe can run on p5.48xlarge and p5en.48xlarge instance types.
run:
  name: "my-rft-run"                           # Unique run name (appears in logs/artifacts).
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  data_s3_path: s3://<bucket>/<data file>      # Training dataset in JSONL;
  replicas: 4
  reward_lambda_arn: arn:aws:lambda:<region>:<account-id>:function:<function-name>

  ## MLFlow configs
  mlflow_tracking_uri: "" # Required for MLFlow
  mlflow_experiment_name: "my-rft-experiment" # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-rft-run" # Optional for MLFlow. Note: leave this field non-empty

## SMTJ GRPO Training specific configs
training_config:
  max_length: 8192                              # Context window (tokens) for inputs+prompt;
  global_batch_size: 16                         # Total samples per optimizer step across all replicas (16/32/64/128/256).
  reasoning_effort: high                        # Enables reasoning mode high / low / or null for non-reasoning

  rollout:                                      # How responses are generated for GRPO/advantage calc.
    advantage_strategy:
      number_generation: 2                      # N samples per prompt to estimate advantages (variance vs cost).
    generator:
      max_new_tokens: 6000                      # Cap on tokens generated per sample
      set_random_seed: true                     # Seed generation for reproducibility across runs.
      temperature: 1                            # Softmax temperature;
      top_k: 1                                  # Sample only from top-K logits
    rewards:
      preset_reward_function: null              # Usage of preset reward functions [exact_match]
      api_endpoint:
        lambda_arn: arn:aws:lambda:<region>:<account-id>:function:<function-name>
        lambda_concurrency_limit: 12             # Max concurrent Lambda invocations (throughput vs. throttling).

  trainer:
    max_steps: 2                                 # Steps to train for. One Step = global_batch_size
    save_steps: 5
    test_steps: 1

    # RL parameters
    ent_coeff: 0.0                              # A bonus added to the policy loss that rewards higher-output entropy.
    kl_loss_coef: 0.001                         # Weight on the KL penalty between the actor (trainable policy) and a frozen reference model

    optim_config:                    # Optimizer settings
        lr: 5e-5                       # Learning rate
        weight_decay: 0.0              # L2 regularization strength (0.0–1.0)
        adam_beta1: 0.9
        adam_beta2: 0.95

    peft:                            # Parameter-efficient fine-tuning (LoRA)
        peft_scheme: "lora"            # Enable LoRA for PEFT
        lora_tuning:
            alpha: 32
            lora_plus_lr_ratio: 64.0     # LoRA+ learning rate scaling factor (0.0–100.0)
```

## LLM-as-a-judge を使用した RFT トレーニング
<a name="nova-rft-llm-judge"></a>

### 概要
<a name="nova-rft-llm-judge-overview"></a>

大規模言語モデル (LLM) は、強化ファインチューニング (RFT) ワークフローのジャッジとしてますます使用され、モデルの最適化をガイドする自動報酬シグナルを提供します。このアプローチでは、LLM は、正確性、品質、スタイルの準拠性、セマンティック同等性など、指定された基準に照らしてモデル出力を評価し、強化学習プロセスを推進する報酬を割り当てます。

これは、従来の報酬関数をプログラムで定義することが難しいタスクに特に役立ちます。これには、さまざまな表現 (「1/3」、「0.333」、「3 分の 1」など) が意味的に同等かどうかを判断するタスク、一貫性や関連性などの微妙な性質を評価するタスクなどがあります。LLM ベースのジャッジを報酬関数として使用することで、広範な人間の注釈を必要とせずに RFT を複雑なドメインにスケールできるため、従来のアラインメントの問題を超えたさまざまなユースケースでモデルの迅速なイテレーションと継続的な改善が可能になります。

### 推論モードの選択
<a name="nova-rft-reasoning-mode"></a>

**利用可能なモード**
+ none – 推論なし (reasoning\$1effort フィールドを省略)
+ low – 最小限の推論オーバーヘッド
+ high – 最大限の推論機能 (reasoning\$1effort が指定されている場合のデフォルト)

**注記**  
RFT には中程度のオプションはありません。reasoning\$1effort フィールドが設定にない場合、推論は無効になります。推論が有効になっている場合は、拡張推論出力に対応するように `max_new_tokens` を 32768 に設定する必要があります。

**各モードを使用するタイミング**

次の場合は、高い推論を使用します。
+ 複雑な分析タスク
+ 数学的な問題解決
+ 複数ステップの論理的演繹
+ ステップバイステップの思考が価値を追加するタスク

以下には、推論なし (reasoning\$1effort を省略) または低い推論を使用します。
+ 単純な事実のクエリ
+ 直接的な分類
+ 速度とコストの最適化
+ 簡単な質問への回答

**コストとパフォーマンスのトレードオフ**

高い推論モードは以下を増加させます。
+ トレーニング時間とコスト
+ 推論のレイテンシーとコスト
+ 複雑な推論タスクのモデル機能

### LLM ジャッジの検証
<a name="nova-rft-validating-judge"></a>

LLM-as-a-judge を本番環境にデプロイする前に、ジャッジモデルの評価が人間の判断と一致していることを確認します。これには以下が含まれます。
+ タスクの代表的なサンプルに関する LLM ジャッジと人間の評価者間の合意率を測定する
+ LLM の人間との合意が人間間の合意レート以上であることを確認する
+ ジャッジモデルの潜在的なバイアスを特定する
+ 報酬シグナルがモデルを意図した方向に導くという信頼を構築する

この検証ステップは、自動評価プロセスが本番品質基準を満たすモデルを生成するのに役立ちます。

### LLM ジャッジ向けの Lambda 設定
<a name="nova-rft-lambda-config"></a>

LLM-as-a-judge の使用は、検証可能な報酬による強化学習（RLVR）に Lambda 関数を使用する手法を発展させたものです。Lambda 関数内で、Amazon Bedrock でホストされているいずれかのモデルを呼び出します。

**重要な設定要件:**


| 設定 | 要件 | 詳細 | 
| --- | --- | --- | 
| Amazon Bedrock スループット | 十分なクォータ | 使用する Amazon Bedrock モデルのスループットクォータがトレーニングワークロードに十分であることを確認します | 
| Lambda タイムアウト | 延長タイムアウト | Lambda 関数のタイムアウトを最大 15 分に設定します。デフォルト設定は 3 秒で、Amazon Bedrock モデルレスポンスでは不十分です | 
| Lambda の同時実行 | 同時実行数の増加 | Lambda はトレーニング中に並行して呼び出されます。同時実行数を増やして利用可能なスループットを最大化する | 
| レシピ設定 | Lambda 設定の一致 | 同時実行制限はレシピで設定する必要があります | 

## ジョブの作成と実行
<a name="nova-rft-creating-jobs"></a>

**トレーニングジョブを開始する**

SageMaker トレーニングジョブノートブックテンプレートを使用します: [https://docs.aws.amazon.com/sagemaker/latest/dg/nova-fine-tuning-training-job.html#nova-model-training-jobs-notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-fine-tuning-training-job.html#nova-model-training-jobs-notebook)

**インスタンスの要件**

コンテナは、フルランクトレーニングと LoRA トレーニングの両方をサポートしています。
+ **LoRA トレーニング** – 2/4/6/8 × p5.48xlarge または p5en.48xlarge インスタンス
+ **フルランクトレーニング** – 2/4/6/8 × p5.48xlarge インスタンス (必須)

## トレーニングのモニタリング
<a name="nova-rft-monitoring"></a>

トレーニングログには、各ステップの包括的なメトリクスが含まれています。主要なメトリクスカテゴリ:

**報酬メトリクス**
+ `critic/rewards/mean`、`critic/rewards/max`、 `critic/rewards/min` – 報酬ディストリビューション
+ `val-score/rewards/mean@1` – 検証報酬

**モデルの動作**
+ `actor/entropy` – ポリシーのバリエーション (高 = 探索的)

**トレーニングの状態**
+ `actor/pg_loss` – ポリシーグラデーション損失
+ `actor/pg_clipfrac` – クリップされた更新の頻度
+ `actor/grad_norm` – グラデーションの大きさ

**レスポンスの特性**
+ `prompt_length/mean`、`prompt_length/max`、 `prompt_length/min` – 入力トークン統計
+ `response_length/mean`、`response_length/max`、 `response_length/min` – 出力トークン統計
+ `response/aborted_ratio` – 不完全な生成レート (0 = すべて完了)

**パフォーマンス**
+ `perf/throughput` – トレーニングスループット
+ `perf/time_per_step` – トレーニングステップあたりの時間
+ `timing_per_token_ms/*` – トークンごとの処理時間

**リソースの使用状況**
+ `perf/max_memory_allocated_gb`、`perf/max_memory_reserved_gb` – GPU メモリ
+ `perf/cpu_memory_used_gb` – CPU メモリ

## ファインチューニングされたモデルの使用
<a name="nova-rft-using-models"></a>

トレーニングが完了すると、最終的なモデルチェックポイントが指定された出力場所に保存されます。チェックポイントパスは、次の場所で使用できます。
+ トレーニングログ
+ 出力 Amazon S3 の場所の `manifest.json` ファイル (ノートブックの `output_s3_uri` で定義)

## 制限事項とベストプラクティス
<a name="nova-rft-limitations"></a>

**制限事項**
+ **Lambda タイムアウト** – 報酬関数は 15 分以内に完了する必要があります (暴走プロセスを防ぎ、コストを管理します)
+ **シングルターンのみ** – マルチターン会話はサポートされていません
+ **データ要件** – 十分な多様性が必要で、まばらな報酬で困難 (5% 未満の肯定的な例)
+ **計算コスト** – 教師ありファインチューニングよりも高価
+ **マルチモーダルデータなし** – テキストデータ型のみをサポート

**ベストプラクティス**

**小規模に始める**
+ 100～200 の例から始める
+ 報酬関数の正確性を検証する
+ 結果に基づいて徐々にスケールする

**トレーニング前評価**
+ RFT の前にベースラインモデルのパフォーマンスをテストする
+ 報酬が一貫して 0% の場合、まず SFT を使用して基本的な機能を確立する
+ 報酬が 95% を超えている場合、RFT は不要である可能性あり

**トレーニングのモニタリング**
+ 平均報酬スコアと分布を追跡する
+ オーバーフィットに注意する (トレーニング報酬は増加する一方、検証報酬は減少)
+ 問題のあるパターンを探します:
  + 報酬が 0.15 を下回ったまま横ばいになる
  + 時間の経過に伴い報酬分散が増加する
  + 検証パフォーマンスが低下する

**報酬関数の最適化**
+ (数分ではなく) 数秒以内に実行する
+ 外部 API コールを最小化する
+ 効率的なアルゴリズムを使用する
+ 適切なエラー処理を実装する
+ Lambda の並列スケーリングを活用する

**イテレーション戦略**

報酬が改善されない場合:
+ 報酬関数の設計を調整する
+ データセットの多様性を高める
+ その他の代表的な例を追加する
+ 報酬シグナルが明確で一貫性があることを確認する

## 高度な機能: Nova Forge
<a name="nova-rft-advanced"></a>

標準の RFT 制限を超える高度な機能を必要とするユーザー向けに、Nova Forge は有料サブスクリプションサービスとして利用できます。
+ マルチターンの会話のサポート
+ 報酬関数の実行時間が 15 分を超える
+ 追加のアルゴリズムと調整オプション
+ カスタムトレーニングレシピの変更
+ 最新の AI 手法

Nova Forge は SageMaker HyperPod で実行され、エンタープライズのお客様が独自のフロンティアモデルを構築できるように設計されています。

## 便利なコマンドとヒント
<a name="nova-rft-useful-commands"></a>

[オブザーバビリティスクリプト](https://github.com/aws-samples/amazon-nova-samples/tree/main/customization/SageMakerUilts/SageMakerJobsMonitoring)のコレクションは、トレーニングジョブのステータスと進行状況のモニタリングに役立ちます。

使用可能なスクリプトは次のとおりです。
+ トレーニングジョブのステータス更新の E メール通知の有効化
+ ジョブ設定に基づいてトレーニング時間の見積もりを取得する
+ 進行中のジョブのトレーニングにかかると予想される時間の近似値を取得する

**インストール**

**注記**  
以下のスクリプトを使用する前に、必ず AWS 認証情報を更新してください。

```
pip install boto3
git clone https://github.com/aws-samples/amazon-nova-samples.git
cd amazon-nova-samples/customization/SageMakerUilts/SageMakerJobsMonitoring/
```

**基本的な使用法**

```
# Enabling email notifications for training job status updates
python enable_sagemaker_job_notifs.py --email test@amazon.com test2@gmail.com --region us-east-1 --platform SMTJ

Creating resources........
Please check your email for a subscription confirmation email, and click 'Confirm subscription' to start receiving job status email notifications!
You'll receive the confirmation email within a few minutes.
```

```
# Obtaining training time estimates based on job configurations
python get_training_time_estimate.py
```

```
# Obtaining approximations for how long training is expected to take for in-progress jobs
python get-training-job-progress.py --region us-east-1 --job-name my-training-job --num-dataset-samples 1000
```

その他の詳細と例については、[こちら](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/SageMakerUilts/SageMakerJobsMonitoring/README.md)を参照してください。