

# Nova 2.0 での RFT
<a name="nova-hp-rft-nova2"></a>

RFT トレーニングデータは OpenAI 会話形式に従います。各トレーニング例は、メッセージ、リファレンス回答、オプションのツール定義を含む JSON オブジェクトです。このセクションでは、Nova 2.0 での RFT の効果的なトレーニングデータを準備するためのガイダンスを提供します。

**Topics**
+ [

## データ形式と構造
](#nova-hp-rft-data-format)
+ [

## フィールドの説明
](#nova-hp-rft-field-descriptions)
+ [

## ハイパーパラメータガイダンス
](#nova-hp-rft-monitoring-hyperparams)
+ [

## その他のプロパティ
](#nova-hp-rft-additional-properties)
+ [

## データセットサイズの推奨事項
](#nova-hp-rft-dataset-size)
+ [

## 効果的なトレーニングデータの特徴
](#nova-hp-rft-effective-data)
+ [

# RFT トレーニングのモニタリング
](nova-hp-rft-monitoring.md)

## データ形式と構造
<a name="nova-hp-rft-data-format"></a>

各トレーニング例は、以下を含む JSON オブジェクトです。
+ **messages**: システム、ユーザー、オプションでアシスタントロールを使用した会話ターンの配列
+ **reference\$1answer**: 報酬計算に期待される出力または評価基準
+ **tools** (オプション): モデルで使用できる関数定義の配列
+ **id** (オプション): 追跡と重複排除のための一意の識別子

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

### 例 1: 化学の問題
<a name="nova-hp-rft-example-chemistry"></a>

次の例は、グラウンドトゥルース値を含む参照回答が付いた化学問題を示しています。

```
{  
  "id": "chem-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful chemistry assistant"  
    },  
    {  
      "role": "user",  
      "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C"  
    }  
  ],  
  "reference_answer": {  
    "donor_bond_counts": 2,  
    "acceptor_bond_counts": 4,  
    "explanation": "Calculated using Lipinski's rule of five: N-H groups (2 donors), N and O atoms with lone pairs (4 acceptors)"  
  }  
}
```

**注記**  
reference\$1answer には、ドメイン固有のルールを使用して計算されたグラウンドトゥルース値が含まれています。報酬関数は、モデルの予測値をこれらの参照値と比較して、報酬スコアを計算します。

### 例 2: 数学の問題
<a name="nova-hp-rft-example-math"></a>

次の例は、ソリューションステップを含む数学の問題を示しています。

```
{  
  "id": "math-001",  
  "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"]  
  }  
}
```

### 例 3: ツールの使用
<a name="nova-hp-rft-example-tool"></a>

次の例は、期待される動作が記載されたツールの使用方法を示しています。

```
{  
  "id": "tool-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful game master assistant"  
    },  
    {  
      "role": "user",  
      "content": "Generate a strength stat for a warrior character. Apply a +2 racial bonus modifier."  
    }  
  ],  
  "tools": [  
    {  
      "type": "function",  
      "function": {  
        "name": "StatRollAPI",  
        "description": "Generates character stats by rolling 4d6, dropping the lowest die result, and applying a modifier.",  
        "parameters": {  
          "type": "object",  
          "properties": {  
            "modifier": {  
              "description": "An integer representing the modifier to apply to the total of the stat roll.",  
              "type": "integer"  
            }  
          },  
          "required": ["modifier"]  
        }  
      }  
    }  
  ],  
  "reference_answer": {  
    "tool_called": "StatRollAPI",  
    "tool_parameters": {  
      "modifier": 2  
    },  
    "expected_behavior": "Call StatRollAPI with modifier=2 and return the calculated stat value"  
  }  
}
```

## フィールドの説明
<a name="nova-hp-rft-field-descriptions"></a>


| フィールド | 説明 | 追加のメモ | 必須 | 
| --- |--- |--- |--- |
| id | この RFT 例の一意の識別子 | 文字列 (「sample-001」など)。追跡と重複排除に役立ちます。 | いいえ | 
| メッセージ | プロンプトとコンテキストを定義するチャットメッセージの順序付きリスト | オブジェクトの配列。モデルはそれらを順番に表示します。通常、システムメッセージで始まり、ユーザーが続きます。 | はい | 
| messages[].role | メッセージで話している人 | 一般的な値:「system」、「user」 (他のコンテキストでは「assistant」になることも) | いいえ | 
| messages[].content | メッセージのテキストコンテンツ | プレーン文字列。システムの場合は手順、ユーザーの場合はタスクまたは入力です。 | いいえ | 
| ツール | この例でモデルで使用できるツール仕様 | 配列。各項目は、ツールのインターフェイスとメタデータを定義します。タイプには、「関数」または「内部」を含めることができます。 | いいえ | 
| reference\$1answer | この例で予想されるモデル出力 | タスクに応じて文字列またはオブジェクト。評価またはトレーニングのターゲットとして使用されます。 | いいえ | 

**注記**  
追加のカスタムフィールド (Task\$1id、 difficulty\$1level、context\$1data など) は検証されず、メタデータとして報酬関数に渡されます。

## ハイパーパラメータガイダンス
<a name="nova-hp-rft-monitoring-hyperparams"></a>

トレーニングアプローチに基づいて、次の推奨ハイパーパラメータを使用します。

**全般:**
+ エポック: 1
+ 学習レート (lr): 1e-7
+ 世代数: 8
+ 新しいトークンの最大数: 8192
+ バッチサイズ: 256

**LoRA (低ランク適応):**
+ LoRA ランク: 32

**注記**  
データセットのサイズと検証パフォーマンスに基づいてこれらの値を調整します。トレーニングメトリクスをモニタリングして、オーバーフィットを防止します。

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

「additionalProperties」: true 設定では、コアスキーマ要件を超えるカスタムフィールドを含めることができ、報酬関数が適切な評価に必要なデータを柔軟に追加できます。

### 一般的な追加フィールド
<a name="nova-hp-rft-common-fields"></a>

追加フィールドの以下のタイプを含めることができます。

**メタデータ:**
+ task\$1id: 追跡用の一意の識別子
+ difficulty\$1level: 問題の複雑さインジケータ
+ domain: サブジェクトエリアまたはカテゴリ
+ expected\$1reasoning\$1steps: ソリューションのステップ数

**評価の基準:**
+ evaluation\$1criteria: 特定のグレーディングルーブリック
+ custom\$1scoring\$1weights: さまざまな側面の相対的な重要性
+ context\$1data: 問題の背景情報
+ external\$1references: 関連するドキュメントまたはリソースへのリンク

### 追加プロパティの例
<a name="nova-hp-rft-additional-example"></a>

次の例には、カスタムメタデータフィールドが含まれています。

```
{  
  "id": "algebra_001",  
  "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-hp-rft-dataset-size"></a>

### 開始点
<a name="nova-hp-rft-starting-point"></a>

次の最小データセットサイズから始めます。
+ 最小 100 個のトレーニング例
+ 最小 100 個の評価例

モデルレスポンスで一貫して実行される高品質の入力データと信頼性の高い報酬関数を優先します。

### 評価優先アプローチ
<a name="nova-hp-rft-evaluation-first"></a>

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

この評価優先アプローチにより、報酬関数にバグがなく、RFT がユースケースに適した方法かどうかを判断できます。小規模から始めると、RFT ワークフローに慣れ、問題を早期に特定して修正し、スケールアップ前にアプローチを検証し、報酬関数の信頼性をテストできます。検証後、より大きなデータセットに拡張してパフォーマンスをさらに向上させることができます。

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

### 明確性と一貫性
<a name="nova-hp-rft-clarity"></a>

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

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

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

データセットは、堅牢な実際のパフォーマンスを確保するために、本番稼働用ユースケースの完全な多様性をキャプチャする必要があります。以下が含まれます:
+ さまざまな問題タイプと難易度
+ さまざまな入力形式とエッジケース
+ 予想されるすべてのシナリオの代表的なサンプル

この多様性は、オーバーフィットを防ぎ、モデルが不慣れな入力を適切に処理するのに役立ちます。

### 報酬関数に関する考慮事項
<a name="nova-hp-rft-reward-considerations"></a>

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

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

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

トレーニング中に主要なメトリクスをモニタリングして効果的な学習となるようにし、潜在的な問題を早期に特定します。

**Topics**
+ [

## 追跡する主要なメトリクス
](#nova-hp-rft-monitoring-metrics)
+ [

## RFT 後の評価
](#nova-hp-rft-monitoring-evaluation)
+ [

## ファインチューニングされたモデルの使用
](#nova-hp-rft-monitoring-checkpoints)
+ [

## 制限事項とベストプラクティス
](#nova-hp-rft-monitoring-limitations)
+ [

## トラブルシューティング
](#nova-hp-rft-monitoring-troubleshooting)

## 追跡する主要なメトリクス
<a name="nova-hp-rft-monitoring-metrics"></a>

トレーニング中に MlFlow を使用して次のメトリクスをモニタリングします。

**報酬メトリクス**
+ **平均報酬スコア**: モデルレスポンスの全体的な品質 (時間の経過とともに増加)
+ **報酬分布**: 高、中、低の報酬を受け取るレスポンスの割合
+ **トレーニングと検証の報酬**: 比較してオーバーフィットを検出する

**トレーニングメトリクス:**
+ **ポリシーの更新**: 正常な重みの更新の数
+ **ロールアウト完了率**: 正常に評価されたサンプルの割合

**懸念されるパターン:**
+ 報酬のプラトーイング (学習不足を示す)
+ トレーニング報酬の増加中に検証報酬がドロップする (オーバーフィット)
+ 報酬の変動が時間の経過とともに大幅に増加 (不安定)
+ 報酬関数エラーの割合が高い (実装の問題)

**トレーニングを停止するタイミング:**
+ 目標パフォーマンスメトリクスが達成される
+ 報酬が停滞し、改善しなくなった
+ 検証パフォーマンスが低下した (オーバーフィットが検出された)
+ 最大トレーニング予算に達した

## RFT 後の評価
<a name="nova-hp-rft-monitoring-evaluation"></a>

トレーニングが完了したら、ファインチューニングされたモデルを評価してパフォーマンスの向上を評価します。
+ **RFT 評価ジョブを実行する**: RFT トレーニングのチェックポイントをモデルとして使用する
+ **ベースラインと比較する**: 同じテストセットでベースモデルとファインチューニングされたモデルの両方を評価する
+ **メトリクスを分析する**: タスク固有のメトリクス (精度、報酬スコアなど) を確認する
+ **定性的レビューを実施する**: サンプル出力の品質を手動で検査する

詳細な評価手順については、「評価」セクションを参照してください。

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

**チェックポイントへのアクセス:**

トレーニングが完了したら、チェックポイントを見つけます。

1. S3 で `output_path` に移動します

1. `output.tar.gz` をダウンロードおよび抽出します

1. `manifest.json` を開きます

1. `checkpoint_s3_bucket` 値をコピーします

**推論のためのデプロイ:**

推論や追加のトレーニングにはチェックポイント S3 パスを使用します。

```
run:
    model_type: amazon.nova-2-lite-v1:0:256k
    model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<job-name>"
```

デプロイと推論の手順については、「推論」セクションを参照してください。

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

**現在の制限事項:**

**ベータ版の制限事項:**
+ RFT 用の新しい RIG グループを作成する必要があります。この制限は GA までに解決されます。
+ インスタンスタイプの要件: P5 インスタンスのみがサポートされています (最小 8x P5.48xlarge)。近日公開: 小規模なインスタンスタイプのサポート (ETA: 2025 年 1 月中旬)。

**機能的制限**
+ 15 分の Lambda タイムアウト: 報酬関数は 15 分以内に完了する必要があります
+ シングルターンのみ: マルチターン会話はサポートされていません
+ 検証データセット: トレーニング中はサポートされていません。個別の評価ジョブを使用して、トレーニングの進行状況を評価します。

**トレーニングに関する考慮事項:**
+ 低報酬シナリオ: 肯定的な報酬を受け取る例が 5% 未満の場合、問題が発生する可能性があります。まず SFT を検討してください
+ データ要件: 効果的に学習するには十分な多様性が必要です
+ 計算コスト: 教師ありファインチューニングよりも高価

**Nova Forge は、以下のようにこのような制限の一部をなくします。**
+ マルチターン会話をサポート
+ 15 分のタイムアウトを超える報酬関数を許可
+ 高度なアルゴリズムと調整オプションを提供
+ フロンティアモデルを構築するように特別に調整された、複雑なエンタープライズユースケース向けに設計

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

**小規模から始めてスケールする:**
+ 最小限のデータセット (100～200 サンプル) と少数のトレーニングエポックから始める
+ スケールアップする前にアプローチを検証する
+ 結果に基づいてデータセットのサイズとトレーニングステップを徐々に増やす

**最初に SFT を使用するベースライン:**
+ 報酬スコアが一貫して低い場合 (例: 常に 0)、RFT の前に SFT を実行します
+ RFT では、効果的に改善するために合理的なベースラインパフォーマンスが必要です

**次のように、効率的な報酬関数を設計します。**
+ 数分ではなく秒単位で実行する
+ 外部 API コールを最小化する
+ 効率的なアルゴリズムとデータ構造を使用する
+ 適切なエラー処理を実装する
+ トレーニング前に徹底的にテストする
+ Lambda の並列スケーリング機能を活用する

**次のように、トレーニングをアクティブにモニタリングします。**
+ 平均報酬スコアを経時的に追跡する
+ サンプル間の報酬分布を監視する
+ トレーニングと検証の報酬を比較する
+ 関連するパターン (プラトー、オーバーフィット、不安定性) を探す

**次のように、結果に基づいて反復処理します。**
+ 何度か繰り返しても報酬が改善しない場合は、報酬関数の設計を調整する
+ データセットの多様性を高めて、より明確な学習シグナルを提供する
+ 報酬がゼロに近いままの場合は、SFT に切り替えることを検討する
+ さまざまなハイパーパラメータ (学習レート、バッチサイズ) を試す

**次のように、データ品質を最適化します。**
+ 多様で代表的なサンプルとなるようにする
+ エッジケースと難しいサンプルを含める
+ 報酬関数がすべてのサンプルタイプを正しくスコアリングすることを確認する
+ 報酬関数を混乱させるサンプルを削除または修正する

## トラブルシューティング
<a name="nova-hp-rft-monitoring-troubleshooting"></a>

**報酬関数のエラー:**

症状: トレーニング中の報酬関数呼び出しのエラー率が高い


| 問題 | 症状 | 解決策 | 
| --- |--- |--- |
| Lambda タイムアウト | 15 分後の頻繁なタイムアウト | 関数のパフォーマンスを最適化する。複雑な評価には Nova Forge を検討する | 
| 同時実行が不十分 | Lambda スロットリングエラー | lambda\$1concurrency\$1limit を増やすか、クォータの引き上げをリクエストする | 
| 戻り形式が無効 | トレーニングが形式エラーで失敗する | 戻り構造が必須のインターフェイス形式と一致することを確認する | 
| 処理されない例外 | 断続的なエラー | 包括的なエラー処理とログ記録を追加する | 
| 外部 API の障害 | スコアリングの不整合 | 再試行ロジックとフォールバック戦略を実装する | 

**トレーニングパフォーマンスの低下:**

症状: 報酬が改善しないか、低値で停滞する

解決策:
+ **報酬関数の正確性を検証する**: 既知の良い例と悪い例でテストする
+ **ベースラインパフォーマンスを確認する**: ベースモデルを評価します。精度がゼロに近い場合は、最初に SFT を実行します
+ **データの多様性を高める**: さまざまなシナリオをカバーするより多様な例を追加する
+ **ハイパーパラメータを調整する**: さまざまな学習レートまたはバッチサイズを試す
+ **報酬シグナルの品質を確認する**: 良いレスポンスと悪いレスポンスで報酬が区別されるようにする

**オーバーフィット:**

症状: トレーニング報酬は増加し、検証報酬は減少する

解決策:
+ **トレーニングステップを減らす**: トレーニングを早期に停止する
+ **データセットサイズを増やす**: トレーニング例をさらに追加する
+ **正規化の追加**: `weight_decay` または `entropy_coeff` を調整する
+ **データの多様性を高める**: トレーニングセットが完全なディストリビューションを表していることを確認する