

# 教師ありファインチューニング
<a name="nova-forge-sft"></a>

## 序章
<a name="introduction"></a>

教師ありファインチューニングでは、目的のタスクの入力と出力のペアを持つデータセットを使用します。つまり、プロンプト (質問、指示など) の例を正しいレスポンスや望ましいレスポンスと共に提供し、それらに関するモデルのトレーニングを続けます。モデルの重みは、教師あり損失 (通常は予測とターゲットレスポンストークン間のクロスエントロピー) を最小限に抑えるように調整されます。

## SFT はどのような場合に使用するか
<a name="when-to-use-sft"></a>

SFT は、明確に定義されたタスクがあり、望ましい出力が明確である場合に最適です。「入力が X の場合、正しい/望ましい出力は Y である」と明示的に言うことができ、このような XY マッピングの例を収集できる場合は、教師ありファインチューニングが適しています。SFT が優れているシナリオには、以下のようなものがあります。
+ **構造化または複雑な分類タスク**: 例 - 内部ドキュメントや契約書を多数のカスタムカテゴリに分類します。SFT を使用すると、モデルは、プロンプトのみの場合よりも、これらの特定のカテゴリをはるかにうまく学習できます。
+ **既知の回答がある質疑応答または変換タスク**: 例 - 企業のナレッジベースからの質問に答えたり、各入力が正しい応答を持つ形式間でデータを変換したりするためにモデルをファインチューニングします。
+ **フォーマットとスタイルの一貫性**: モデルが常に特定の形式またはトーンで応答する必要がある場合は、正しい形式/トーンの例に基づいてファインチューニングできます。例えば、特定のブランドボイスやスタイルを示すプロンプトとレスポンスのペアでトレーニングすると、出力にそのスタイルが組み込まれるモデルをトレーニングできます。指示追従型動作は、多くの場合、最初は SFT を介して優れたアシスタント動作の厳選された例に基づいてトレーニングされます。

SFT は、適切な動作がどのようなものかを指定できる場合に、LLM に新しいスキルや動作をトレーニングする最も直接的な方法です。モデルの既存の言語理解を活用し、それをタスクに集中させます。ギャップが動作ではなく知識である場合は SFT を使用しないでください。モデルが新しい事実、専門用語、最近のイベントを学習することはありません。このような場合は、推論時に外部知識を取り込むために、大規模なドメイン内コーパスまたは検索拡張生成での継続的な事前トレーニングを優先します。品質を測定できるものの、1 つの正しい回答にラベルを付けることができない場合は、検証可能な報酬または LLM-as-judge による強化ファインチューニングが SFT よりも望ましい場合があります。

タスクの複雑さと、チューニングなしの Nova モデルのパフォーマンスに応じて、タスクごとに数千から数万のデモンストレーションを計画します。データ品質、一貫性、多様性は raw ボリュームよりも重要になります。

## パラメータ効率化とフルランク SFT はいつ使用するか
<a name="parameter-efficient-vs-full-rank"></a>

Nova カスタマイズレシピを使用すると、パラメータ効率化 (特に LoRA) またはフルランク SFT を実行できます。シンプルでコスト効率の高いモデル更新が必要な場合、またはデータが非常に少ない場合は、パラメータ効率の高い方法をお勧めします。これにより、ほとんどのバックボーンをそのままにして小さなアダプターをトレーニングできます (フルランク SFT はすべてのモデルパラメータを更新します)。

## SFT のデータミキシング
<a name="data-mixing"></a>

データミキシングを使用すると、カスタムトレーニングデータセットを Nova 独自のトレーニングデータと組み合わせることができます。この機能は、Nova 1.0 モデルと Nova 2.0 モデルの両方で使用できます。

**Nova 所有データ型**: Nova は、テキストとマルチモーダル SFT データ型の両方をサポートしています。複数のデータカテゴリに分類され、それぞれに、対応するカテゴリに関連するタスクのブレンドが含まれています。

**Nova 所有データカテゴリ**: テキストデータセットには、自律的意思決定、タスク完了、目標指向データセット (エージェント)、推論と非推論の両方の正確なタスク実行データセット (推論指示追従型、指示追従型)、戦略的思考と段階的なタスク分割を示すシーケンス (計画)、責任ある AI (RAI)、長いコンテキスト、事実性、数学、語幹など、さまざまなカテゴリが含まれます。同様に、マルチモーダルデータセットには、動画、スクリーンショット、グラフなどが含まれます。

データミキシング機能を使用すると、独自のファインチューニングトレーニングサンプルを、Nova のファインチューニングに使用される Nova データセットのサンプルとブレンドできます。これにより、カスタムトレーニングのオーバーフィットや Nova 機能の「壊滅的な忘却」を防止したり、新しい事前トレーニング済みチェックポイントからトレーニングを行う際に機能を構築したりすることができます。

Nova データを混合させるには、レシピ YAML ファイルの training\_config セクションに data\_mixing ブロックを追加するだけです。テキストとマルチモーダルのデータミキシングブロックの内容は異なり、データミキシングブロックは Nova 1.0 と Nova 2.0 では多少異なります。対応するレシピを参照してください。

### サポートされているモデル
<a name="supported-models"></a>
+ Nova 1.0 (Micro、Lite、Pro)
+ Nova 2.0 Lite

### サポートされているモダリティ
<a name="supported-modality"></a>
+ テキスト
+ マルチモーダル

## YAML の設定例
<a name="yaml-configuration-examples"></a>

### Nova 1.0 テキストミキシングのデータミキシングブロックの例
<a name="nova-1-text-mixing"></a>

```
## Run config
run:
  name: "my-lora-run"             # A descriptive name for your training job
  model_type: "amazon.nova-lite-v1:0:300k"  # Model variant specification, do not change
  model_name_or_path: "nova-lite/prod"      # Base model path, do not change
  replicas: 4                     # Number of compute instances for training, allowed values are 4, 8, 16
  data_s3_path: ""                # Customer data path
  output_s3_path: ""              # Output artifact path, SageMaker HyperPod job-specific configuration - not compatible with standard SageMaker Training jobs

  ## MLFlow configs
  mlflow_tracking_uri: "" # Required for MLFlow
  mlflow_experiment_name: "my-lora-experiment" # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-lora-run" # Optional for MLFlow. Note: leave this field non-empty
  
## Training specific configs
training_config:
  max_length: 32768               # Maximum context window size (tokens).
  global_batch_size: 64           # Global batch size, allowed values are 16, 32, 64

  trainer:
    max_epochs: 2                # Number of training epochs

  model:
    hidden_dropout: 0.0          # Dropout for hidden states, must be between 0.0 and 1.0
    attention_dropout: 0.0       # Dropout for attention weights, must be between 0.0 and 1.0
    ffn_dropout: 0.0             # Dropout for feed-forward networks, must be between 0.0 and 1.0

    optim:
      lr: 1e-5                 # Learning rate
      name: distributed_fused_adam  # Optimizer algorithm, do not change
      adam_w_mode: true        # Enable AdamW mode
      eps: 1e-06               # Epsilon for numerical stability
      weight_decay: 0.0        # L2 regularization strength, must be between 0.0 and 1.0
      betas:                   # Adam optimizer betas, must be between 0.0 and 1.0
        - 0.9
        - 0.999
      sched:
        warmup_steps: 10     # Learning rate warmup steps
        constant_steps: 0    # Steps at constant learning rate
        min_lr: 1e-6         # Minimum learning rate

    peft:
      peft_scheme: "lora"      # Enable LoRA for parameter-efficient fine-tuning
      lora_tuning:
        loraplus_lr_ratio: 8.0  # LoRA+ learning rate scaling factor, must be between 0.0 and 100.0
        alpha: 32            # Scaling factor for LoRA weights. Allowed values are 32, 64, 96, 128, 160 and 192
        adapter_dropout: 0.01  # Regularization for LoRA parameters. Must be between 0.0 and 1.0

data_mixing:
  dataset_catalog: sft_text       # Nova text dataset catalog
  sources:
    customer_data:
      percent: 50                 # Percent of overall mix to draw from customer data
    nova_data:                    # The remainder will be drawn from Nova data. The categories below must add to 100
      agents: 1                   # autonomous decision-making, task completion, goal-oriented behavior in AI systems
      chat: 51                    # Conversational exchanges demonstrating natural dialogue flow
      code: 8                     # Programming examples and solutions spanning multiple languages
      rai: 1                      # ethical AI principles, safety considerations, and responsible technology deployment
      instruction-following: 13   # precise task execution based on varying levels of user prompts and directives
      stem: 6                     # science, technology, engineering, and mathematics content
      planning: 2                 # sequences demonstrating strategic thinking and step-by-step task breakdown
      reasoning: 8                # logical problem-solving and analytical thinking demonstrations
      rag: 1                      # retrieval-augmented generation examples
      translation: 9              # language translation tasks
```

### Nova 2.0 の設定例
<a name="nova-2-configuration"></a>

```
run:
  name: my-lora-sft-run
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  data_s3_path: s3://my-bucket-name/train.jsonl
  replicas: 4
  output_s3_path: s3://my-bucket-name/outputs/
  mlflow_tracking_uri: ""
  mlflow_experiment_name: "my-lora-sft-experiment"
  mlflow_run_name: "my-lora-sft-run"
  
training_config:
  max_steps: 100
  save_steps: 10
  save_top_k: 5
  max_length: 32768
  global_batch_size: 32
  reasoning_enabled: true
  lr_scheduler:
    warmup_steps: 15
    min_lr: 1e-6
  optim_config:
    lr: 1e-5
    weight_decay: 0.0
    adam_beta1: 0.9
    adam_beta2: 0.95
  peft:
    peft_scheme: "lora"
    lora_tuning:
      alpha: 64
      lora_plus_lr_ratio: 64.0
```

### Nova 2.0 テキストデータミキシング
<a name="nova-2-text-mixing"></a>

```
data_mixing:
  dataset_catalog: sft_1p5_text_chat
  sources:
    customer_data:
      percent: 50
    nova_data:
      agents: 1
      baseline: 10
      chat: 0.5
      code: 10
      factuality: 0.1
      identity: 1
      long-context: 1
      math: 2
      rai: 1
      instruction-following: 13
      stem: 0.5
      planning: 10
      reasoning-chat: 0.5
      reasoning-code: 0.5
      reasoning-factuality: 0.5
      reasoning-instruction-following: 45
      reasoning-math: 0.5
      reasoning-planning: 0.5
      reasoning-rag: 0.4
      reasoning-rai: 0.5
      reasoning-stem: 0.4
      rag: 1
      translation: 0.1
```

### Nova 1.0 マルチモーダルデータミキシング
<a name="nova-1-multimodal-mixing"></a>

```
data_mixing:
  dataset_catalog: sft_mm
  sources:
    customer_data:
      percent: 50
    nova_data:
      agents: 11
      docs: 17
      perception: 10
      rag: 4
      rai: 3
      reasoning: 10
      stem: 17
      text: 10
      video: 18
```

### Nova 2.0 マルチモーダルデータミキシング
<a name="nova-2-multimodal-mixing"></a>

```
data_mixing:
  dataset_catalog: sft_1p5_mm_chat
  sources:
    customer_data:
      percent: 50
    nova_data:
      charts: 1
      chat: 38
      code: 20
      docs: 3
      general: 2
      grounding: 1
      rag: 4
      screenshot: 4
      text: 8
      translation: 4
      video: 15
```

## モデルのチェックポイント
<a name="model-checkpoints"></a>

### Nova 1.0 チェックポイント
<a name="nova-1-checkpoints"></a>
+ **事前トレーニング済み** [`nova-<micro/lite/pro>/pretraining-text-partial`]: Nova 事前トレーニングの一定の学習率のステージの後のチェックポイントで、モデルは数兆のテキストトークンでトレーニングされます。[ステージ 1 の結果]
+ **中間トレーニング済み** [`nova-<micro/lite/pro>/pretraining-text-full`]: 数兆のテキストトークンを使用した Nova の事前トレーニングと中間トレーニングのすべてのステージの後のテキストのみのチェックポイント。モデルにマルチモーダルデータを見せたくない場合に使用します。[ステージ 3 の結果]
+ **中間トレーニング済み** [`nova-<lite/pro>/pretraining-mm-full`]: 数兆のトークンを使用した、マルチモーダルデータを含む Nova の事前トレーニングと中間トレーニングのすべてのステージの後のチェックポイント。[マルチモーダルデータを使用したステージ 3 の結果]
+ **最終** [`nova-<micro/lite/pro>/prod`]: 事前トレーニングと事後トレーニングのすべてのステップを経た、完全に調整された最終チェックポイント。[ステージ 4 の結果]

### Nova 2.0 チェックポイント
<a name="nova-2-checkpoints"></a>
+ **事前トレーニング済み** [`nova-lite-2/pretraining-text-RD`]: 一定の学習率およびランプダウンステージの後のチェックポイントで、モデルは数兆のトークンでトレーニングされます。[ステージ 2 の結果]
+ **中間トレーニング済み** [`nova-lite-2/pretraining-text-CE`]: 中間量の非構造化データを持つお客様は、事前トレーニングよりも控えめな学習率でデータを導入し、壊滅的な忘却を回避しながらドメイン固有の知識を吸収できます。[ステージ 3 の結果]
+ **最終** [`nova-lite-2/prod`]: 事前トレーニングと事後トレーニングのすべてのステップを経た、完全に調整された最終チェックポイント。[ステージ 4 の結果]

**トレーニングステージ:**
+ ステージ 1: PT チェックポイント、一定の学習率での初期の事前トレーニング
+ ステージ 2: PT チェックポイント、学習率のランプダウン
+ ステージ 3: PT チェックポイント、コンテキスト拡張トレーニング
+ ステージ 4: 指示追従型調整と安全トレーニング

## トレーニングアプローチ
<a name="training-approaches"></a>


**トレーニングアプローチ選択ガイド**  

| データタイプ | データボリューム | 実行 | 使用チェックポイント | 
| --- | --- | --- | --- | 
| 大規模な非構造化 raw ドメインデータ (ドキュメント、ログ、記事、コードなど) | 1T トークン以上 | 継続的な事前トレーニング | 一定の学習率 (CLR) の終了 | 
| 大規模な非構造化 raw ドメインデータ | 100B トークン以上 | 中間トレーニング | CLR の終了 | 
| 少量の非構造化 raw データ、構造化推論トレース/CoT データ | 1B トークン以上 | 中間トレーニング | Nova ベースモデル | 
| 構造化デモンストレーション (高品質の入出力ペア、厳選されたタスク手順、マルチターン対話) | 1K 以上の例 | 教師ありファインチューニング (SFT) | Nova ベースモデル | 

## 開始する前の前提条件
<a name="prerequisites"></a>
+ アクティブなキャパシティを持つ制限付きインスタンスグループ (RIG) で SMHP クラスターを既にセットアップしていることを前提としています。まだセットアップしていない場合は、こちらを参照して SMHP クラスターと RIG のセットアップを完了してください [[ドキュメントリンク](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-forge.html)、[ワークショップリンク](https://catalog.us-east-1.prod.workshops.aws/workshops/dcac6f7a-3c61-4978-8344-7535526bf743/en-US)]。
+ このレシピを実行するには、**p5.48xlarge** EC2 インスタンスが必要です。このレシピを効率的に実行するために必要なインスタンスの最小数は次のとおりです。
  + **Nova Lite 2.0 - 4 p5.48xlarge**
  + **Nova Lite 1.0 – 4 p5.48xlarge**
  + **Nova Micro 1.0 – 4 p5.48xlarge**
  + **Nova Pro 1.0 – 6 p5.48xlarge**
+ [ここ](https://catalog.us-east-1.prod.workshops.aws/workshops/dcac6f7a-3c61-4978-8344-7535526bf743/en-US)に記載されている手順に従って、Forge 固有の SageMaker HyperPod CLI をインストールします。
+ `hyperpod get-clusters` を使用してクラスターに接続できることを確認します。
  + このコマンドは、アカウント内のすべての SMHP クラスターを一覧表示することに注意してください。
+ トレーニングと、必要に応じて検証データが、SMHP クラスターの実行ロールでアクセスできる S3 バケットで使用可能であることを確認します。データの準備については、次のセクションを参照してください。
+ AWS CLI のセットアップを完了させます。セットアップが完了していない場合は、以下の[ガイド](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)に従ってください。
+ **検証**: セットアップが完了したら、以下のコマンドを正常に実行できることを確認します。

  ```
  aws sagemaker describe-cluster --cluster-name <cluster-name> --region <region>
  
  hyperpod connect-cluster --cluster-name cluster-name
  ```

## SFT を成功させるための体系的なアプローチ
<a name="systematic-approach"></a>
+ **データ準備**: 確立されたガイドラインに従って、データセットを作成、クリーンアップ、または必要な構造に再フォーマットします。入力、出力、補助情報 (推論トレースやメタデータなど) が適切に整列され、フォーマットされていることを確認します。
+ **トレーニング設定**: モデルのトレーニング方法を定義します。Amazon SageMaker HyperPod を使用する場合、この設定は以下を含む YAML レシピファイルに書き込まれます。
  + データソースパス (トレーニングデータセットと検証データセット)
  + 主要なハイパーパラメータ (トレーニングステップの数、学習率、バッチサイズ)
  + オプションのコンポーネント (分散トレーニングパラメータなど)
  + データミキシング設定 (お客様と Nova のデータカテゴリの比率を定義)
+ **SFT ハイパーパラメータの最適化**: 推奨される SFT レシピパラメータ値は、優れた出発点であり、堅牢な選択肢です。ユースケースに合わせてさらに最適化する場合は、さまざまなパラメータの組み合わせで複数回 SFT を実行し、最適なものを選択します。選択したハイパーパラメータ最適化方法に従って、パラメータの組み合わせを選択できます。簡単な方法は、1 つのパラメータの値 (デフォルト\*0.5、デフォルト、デフォルト\*2) を変更しながら、他のパラメータの他のデフォルト値を維持し、最適化するパラメータごとにこれを繰り返して、必要に応じて反復することです。LoRA の最も関連性の高いパラメータは、学習率、アルファ (スケーリングパラメータ)、トレーニングするエポック数、ウォームアップステップです。フルランクの場合は、主に学習率、エポック数、ウォームアップステップです。

## 実験の順序付けとデータミキシング
<a name="experiment-sequencing"></a>
+ 一連のタスクの SFT データ (トレーニング/開発/テスト) のみがあり、これらのタスクのテストパフォーマンスのみを重視する場合
  + [最終] Nova チェックポイントで混合せずに SFT を実行します。デフォルトの SFT ハイパーパラメータを使用し、必要に応じてユースケースに合わせて最適化します。検証メトリクスを監視したり、大規模なデータセットの中間チェックポイントを評価したりします。
+ 一連のタスクの SFT データ (トレーニング/開発/テスト) のみがあり、これらのタスクのテストパフォーマンスと対象ドメインの一般的なベンチマークを重視する場合
  + まず、事前トレーニングのチェックポイント (最終チェックポイントではなく、事前トレーニング済みまたは中間トレーニング済みチェックポイント) で Nova データミキシングを使用して SFT を実行します。中間チェックポイントを使用すると、モデルは強力な一般機能を維持しながら、カスタムデータを Nova の所有データとより適切に統合できます。
  + 混合におけるさまざまな量の Nova データ (例: 10%、25%、50%、75%) と、ユースケースを補完する Nova データカテゴリの選択 (例: 一般的な指示追従型機能を重視する場合は、指示追従型カテゴリを選択する) を使用して、短い SFT トレーニングを実行します。検証メトリクスを監視し、混合が一般的なベンチマークのパフォーマンスに役立つかどうかを評価します。タスクのパフォーマンスと一般的なパフォーマンスの最適な組み合わせにつながる、トレーニングの混合とチェックポイントを選択します。ユースケースによっては、強化ファインチューニング (RFT) を使用して、タスクのパフォーマンスと一般的なパフォーマンスの両方をさらに向上させることができます。

## SFT 用のデータセットの準備
<a name="dataset-preparation"></a>

**Nova 1.0**: データの準備については、[https://docs.aws.amazon.com/sagemaker/latest/dg/nova-fine-tune.html](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-fine-tune.html) を参照してください。

**Nova 2.0**: Nova 1.0 と同様に Converse API 形式を使用します: [https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-call.html](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-call.html) Nova 2.0 データ形式には、追加の推論フィールドを含めることができます: [https://docs.aws.amazon.com/bedrock/latest/APIReference/API\_runtime\_ReasoningContentBlock.html](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ReasoningContentBlock.html)

推論コンテンツは、最終的な回答を生成する前に、モデルの中間思考ステップをキャプチャします。`assistant` ターンでは、`reasoningContent` フィールドを使用して推論トレースを含めます。推論コンテンツにはプレーンテキストを使用し、タスクで特に必要な場合を除いて、`<thinking>` や `</thinking>` などのマークアップタグは避けます。推論コンテンツが明確で、問題解決プロセスに関連していることを確認します。

## 責任ある AI ツールキットとコンテンツモデレーション
<a name="responsible-ai"></a>

**コンテンツモデレーション設定**: Nova Forge のお客様は、Nova Lite 1.0 および Pro 1.0 モデルのカスタマイズ可能なコンテンツモデレーション設定 (CCMS) にアクセスできます。CCMS を使用すると、責任ある AI の基本的な保護を維持しながら、特定のビジネス要件に合わせてコンテンツモデレーションコントロールを調整できます。ビジネスユースケースが CCMS の対象となるかどうかを判断するには、Amazon Web Services アカウントマネージャーにお問い合わせください。

Nova Forge には、モデルを Nova の責任ある AI ガイドラインに合わせるのに役立つトレーニングデータ、評価ベンチマーク、ランタイムコントロールを含む責任ある AI ツールキットが用意されています。

**トレーニングデータ**: データミキシングの「RAI」カテゴリには、責任ある AI の原則、安全上の考慮事項、責任あるテクノロジーのデプロイに焦点を当てたケースとシナリオが含まれています。これらを使用して、継続的な事前トレーニング中にモデルを責任を持って調整します。

**評価**: ベンチマークタスクは、不適切、有害、または誤ったコンテンツを検出して拒否するモデルの能力をテストするために使用できます。これらの評価を使用して、ベースモデルのパフォーマンスとカスタムモデルのパフォーマンスの違いを測定します。

**ランタイムコントロール**: デフォルトでは、Nova のランタイムは推論中に中程度のモデルレスポンスを制御します。特定のビジネスケースでこれらのコントロールを変更するには、Amazon Web Services アカウントマネージャーに連絡して、カスタマイズ可能なコンテンツモデレーション設定 (CCMS) をリクエストします。

### 安全性に対する責任の共有
<a name="shared-responsibility"></a>

安全性は、Amazon Web Services とお客様の双方が共有する責任です。ベースモデルを変更するか、継続的な事前トレーニングを使用して特定のユースケースのパフォーマンスを向上させると、新しいモデルの安全性、公平性、その他の特性に影響を与える可能性があります。

基本モデルに組み込まれている安全性、公平性、その他の保護への変更を最小限に抑えつつ、モデルがカスタマイズされていないタスクに対するパフォーマンスへの影響も最小限にするために、堅牢な適応方法を使用しています。

以下の責任はユーザーにあります:
+ ユースケースを代表するデータセットを用いた、アプリケーションのエンドツーエンドテスト
+ テスト結果が安全性、公平性、その他の特性、および全体的な有効性に対する特定の期待を満たしているかどうかを判断する

詳細については、「Amazon Web Services の責任ある AI 使用ガイド」、「Amazon Web Services の責任ある AI ポリシー」、「AWS 利用規定ポリシー」、および使用する予定のサービスの「AWS サービス規約」を参照してください。

### カスタマイズ可能なコンテンツモデレーション設定 (CCMS)
<a name="ccms"></a>

CCMS を使用すると、AI の責任ある使用を保証する必須で設定不可能なコントロールを維持しながら、ビジネス要件に関連するコントロールを調整できます。

これらの設定では、以下の 3 つの使用可能な設定を使用してコンテンツを生成できます。
+ セキュリティのみ
+ 安全、機密性の高いコンテンツ、公平性の組み合わせ
+ すべてのカテゴリの組み合わせ

4 つのコンテンツモデレーションカテゴリは以下のとおりです。

1. **安全** — 危険な活動、武器、規制物質をカバーします

1. **機密性の高いコンテンツ** — 冒涜、ヌード、いじめが含まれます

1. **公平性** — バイアスと文化的考慮事項を扱います

1. **セキュリティ** — サイバー犯罪、マルウェア、悪意のあるコンテンツが含まれます

CCMS の設定に関係なく、Amazon Nova は、児童への危害を防ぎ、プライバシーを維持するためのコントロールなど、AI の責任ある使用を確保するために、必須で設定不可能なコントロールを適用します。

#### CCMS の使用に関する推奨事項
<a name="ccms-recommendations"></a>

CCMS を使用する場合は、継続的事前トレーニング (CPT) を使用し、GA/FINAL チェックポイントではなく、RAI 前のアライメントチェックポイント (PRE-TRAINING-Early、PRE-TRAINING-Mid、または PRE-TRAINING-Final) から開始することをお勧めします。これらのチェックポイントは、安全トレーニングを受けたり、特定の RAI 動作に誘導されたりしていないため、コンテンツモデレーション要件に合わせてより効率的にカスタマイズできます。

**ヒント**: データミキシングで CCMS を使用する場合は、特定のコンテンツモデレーション要件に合わせて nova\_data 設定の「RAI」カテゴリの割合を調整することを検討してください。

#### 可用性
<a name="ccms-availability"></a>

CCMS は現在、以下を使用する承認済みのお客様にご利用いただけます。
+ Nova Lite 1.0 および Pro 1.0 モデル
+ Amazon Bedrock オンデマンド推論
+ us-east-1 (バージニア北部) リージョン

Forge モデルの CCMS を有効にするには、Amazon Web Services アカウントマネージャーにお問い合わせください。

## 評価方法
<a name="evaluation"></a>

### 前提条件
<a name="evaluation-prerequisites"></a>
+ トレーニングジョブの `manifest.json` ファイルからのチェックポイント S3 URI (トレーニング済みモデルの場合)
+ S3 に正しい形式でアップロードされた評価データセット
+ 評価結果の出力 S3 パス

**すぐに使えるベンチマーク**: すぐに使えるベンチマークを使用して、一般的なタスクのパフォーマンスを検証します。詳細については、以下を参照してください: [https://docs.aws.amazon.com/sagemaker/latest/dg/nova-hp-evaluate.html](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-hp-evaluate.html)

### 独自のデータを使用する
<a name="bring-your-own-data"></a>

以下の形式でフォーマットし、以下のコンテナを使用してカスタムデータを提供し、必要に応じてキャリブレーションのログ確率と共に推論結果を取得することもできます。

次の構造でタスクごとに jsonl を作成します。

```
{
  "metadata": "{key:4, category:'apple'}",
  "system": "arithmetic-patterns, please answer the following with no other words: ",
  "query": "What is the next number in this series? 1, 2, 4, 8, 16, ?",
  "response": "32"
}
```

評価ジョブの推論フェーズ中に生成された出力は、次の構造になります。

```
{
  "prompt": "[{'role': 'system', 'content': 'arithmetic-patterns, please answer the following with no other words: '}, {'role': 'user', 'content': 'What is the next number in this series? 1, 2, 4, 8, 16, ?'}]",
  "inference": "['32']",
  "gold": "32",
  "metadata": "{key:4, category:'apple'}"
}
```

**フィールドの説明:**
+ `prompt`: モデルに送信されるフォーマットされた入力
+ `inference`: モデルが生成したレスポンス
+ `gold`: 入力データセットから期待される正しい回答、入力からのレスポンスフィールド
+ `metadata`: 入力から渡されるオプションのメタデータ

### 評価設定の準備
<a name="evaluation-config"></a>

評価ジョブを起動するコマンド。`"--override-parameters"` を使用して、レシピのエントリを変更します。

```
hyperpod start-job -n kubeflow \
  --recipe evaluation/nova/nova_micro_p5_48xl_bring_your_own_dataset_eval \
  --override-parameters '{
    "instance_type": "p5.48xlarge",
    "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-evaluation-repo:SM-HP-Eval-latest",
    "recipes.run.name": "<your-eval-job-name>",
    "recipes.run.model_name_or_path": "<checkpoint-s3-uri>",
    "recipes.run.output_s3_path": "s3://<your-bucket>/eval-results/",
    "recipes.run.data_s3_path": "s3://<your-bucket>/eval-data.jsonl"
  }'
```

## ベストプラクティス
<a name="best-practices"></a>
+ **データ品質を量より優先する**: 高品質で多様な代表的トレーニングデータは、大量の低品質データよりも価値があります。
+ **推論指示追従型カテゴリを含める**: データミキシングを使用する場合は、「推論指示追従型」カテゴリを含めて、タスク全体で強力な一般的パフォーマンスを維持します。
+ **デフォルトの学習率を使用する**: デフォルトの学習率 (LoRA の場合は 1e-5、フルランク SFT の場合は 5e-6) から開始し、検証メトリクスに基づいて必要な場合にのみ調整します。
+ **Nova データミキシングのバランスをとる**: 最大 50% の Nova データを混合して、レイテンシーとパフォーマンスのバランスを最適化します。割合が高いほど、一般的な機能が向上する可能性がありますが、トレーニング時間が長くなる可能性もあります。
+ **検証メトリクスを監視する**: トレーニング中に中間チェックポイントを定期的に評価して、オーバーフィットやパフォーマンスの低下を早期に検出します。
+ **代表的なデータセットでテストする**: 有意義なパフォーマンス評価のために、評価データセットが本番環境のユースケースを正確に表していることを確認します。

## トレーニングジョブ設定の準備
<a name="prepare-training-job-config"></a>

### ハイパーパラメータ
<a name="hyper-parameters"></a>

データミキシング以外のハイパーパラメータの完全なセット:

```
## Run config
run:
  name: my-lora-sft-run
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  data_s3_path: s3://my-bucket-name/train.jsonl  # 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: s3://my-bucket-name/outputs/               # 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
  
  ## MLFlow configs
  mlflow_tracking_uri: "" # Required for MLFlow
  mlflow_experiment_name: "my-lora-sft-experiment" # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-lora-sft-run" # Optional for MLFlow. Note: leave this field non-empty
  
training_config:
  max_steps: 100                   # Maximum training steps. Minimal is 4.
  save_steps: 10 # This parameter suggests after how many training steps the checkpoints will be saved. Should be less than or equal to max_steps(please override this value with a numerical value equal or less than max_steps value; min: 4)
  save_top_k: 5                    # 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            # Golbal 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     # LoRA+ learning rate scaling factor (0.0–100.0)
```

LoRA の最も関連性の高いパラメータは、学習率、アルファ (スケーリングパラメータ)、トレーニングするエポック数、ウォームアップステップです。フルランクの場合は、主に学習率、エポック数、ウォームアップステップです。レシピには、推奨されるデフォルト値があらかじめ入力されています。

## データミキシングブロックのセットアップ
<a name="set-up-data-mixing-block"></a>

データセットカテゴリ間で適切な割合配分を指定して、レシピに data\_mixing セクションを追加します。

以下で、利用可能な各 Nova データカテゴリについて説明します。

### データミキシングを使用した Nova 1.0 設定
<a name="nova-1-config-data-mixing"></a>

```
data_mixing:
  dataset_catalog: sft_text       # Nova text dataset catalog
  sources:
    customer_data:
      percent: 50                 # Percent of overall mix to draw from customer data
    nova_data:                    # The remainder will be drawn from Nova data. The categories below must add to 100
      agents: 1                   # autonomous decision-making, task completion, goal-oriented behavior in AI systems
      chat: 51                    # Conversational exchanges demonstrating natural dialogue flow
      code: 8                     # Programming examples and solutions spanning multiple languages
      rai: 1                      # ethical AI principles, safety considerations, and responsible technology deployment
      instruction-following: 13   # precise task execution based on varying levels of user prompts and directives
      stem: 6                     # Technical content covering science, technology, engineering, and mathematics
      planning: 2                 # Sequences demonstrating strategic thinking and step-by-step task breakdown
      reasoning: 8                # Logical deduction, critical thinking, and analytical problem-solving scenarios
      rag: 1                      # combining retrieved external knowledge with generated responses
      translation: 9              # Multi-language content pairs showing accurate translation
```

これらのカテゴリは何を意味するのでしょうか。


**Nova 1.0 テキストデータカテゴリ**  

| カテゴリ名 | 情報の詳細 | 
| --- | --- | 
| エージェント | AI システムにおける自律的な意思決定、タスクの完了、目標指向の動作に焦点を当てたトレーニングデータ | 
| チャット | 自然な対話の流れ、文脈の維持、適切な社会的交流を示す会話のやり取り | 
| コード | 複数の言語にまたがるプログラミングの例とソリューション、デバッグシナリオ、ソフトウェア開発のベストプラクティス | 
| rai | 倫理的 AI の原則、安全上の考慮事項、責任あるテクノロジーのデプロイを強調するケースとシナリオ | 
| instruction-following | さまざまなレベルのユーザープロンプトとディレクティブに基づく正確なタスク実行の例 | 
| 語幹 | 問題解決と理論的概念を含む、科学、技術、工学、数学をカバーする技術的コンテンツ | 
| 計画 | 戦略的思考、段階的なタスク分割、効率的なリソース割り当てを示すシーケンス | 
| 推論 | 明確な推論チェーンを伴う論理的推論、批判的思考、および分析的な問題解決シナリオ | 
| rag | 取得した外部知識と生成されたレスポンスを効果的に組み合わせて、正確でコンテキストに応じた情報を提供する例 | 
| 変換 | コンテキスト、トーン、文化的なニュアンスを維持しながら正確な翻訳を示す多言語コンテンツペア | 

### マルチモーダルデータミキシング (Nova 1.0)
<a name="nova-1-mm-data-mixing"></a>

```
data_mixing:
  dataset_catalog: sft_mm        # Nova multi-modal dataset catalog
  sources:
    customer_data:
      percent: 50                 # Percent of overall mix to draw from customer data
    nova_data:                    # The remainder will be drawn from Nova data. The categories below must add to 100
      agents: 11                  # Combining visual and textual inputs
      docs: 17                    # Document-centric data combining text, images, layouts, and formatting
      perception: 10              # Visual-linguistic pairs t
      rag: 4                      # Combining retrieved external knowledge with generated responses
      rai: 3                      # Ethical AI principles, safety considerations, and responsible technology deployment
      reasoning: 10               # Logical analysis, problem-solving, and drawing conclusions
      stem: 17                    # Technical content pairing visual elements (diagrams, charts, equations) with text
      text: 10                    # A balanced pool of contextual text data create from the text-only SFT datasets
      video: 18                   # Video datasets
```

これらのカテゴリは何を意味するのでしょうか。


**Nova 1.0 マルチモーダルデータカテゴリ**  

| カテゴリ名 | 情報の詳細 | 
| --- | --- | 
| エージェント | AI システムが多感覚環境情報をどのように解釈し、それに基づいて行動し、相互作用すべきかを示す視覚的入力とテキスト入力を組み合わせたトレーニングペア | 
| ドキュメント | テキスト、画像、レイアウト、フォーマットを組み合わせたドキュメント中心のデータ。PDF コンテンツ認識などの概念に役立つように、さまざまなドキュメントタイプと構造を理解して処理するモデルをトレーニングします。 | 
| perception | 画像、動画、その他の視覚的入力を自然言語で正確に記述、解釈、および推論するためのモデルをトレーニングする視覚と言語のペア | 
| rag | 視覚的およびテキストの外部知識を効果的に組み合わせて参照し、正確でコンテキストに応じたレスポンスを生成する方法を示すマルチモーダル検索の例 | 
| 推論 | 論理分析、問題解決、複数のモダリティにわたる結論の導出を示す視覚的要素とテキスト要素を組み合わせたケース | 
| 語幹 | 視覚的要素 (図、グラフ、方程式) とテキストを組み合わせて、科学的、数学的、技術的な概念と問題解決をトレーニングする技術コンテンツ | 
| テキスト | ジェネラリスト能力を提供するために、テキストのみの SFT Nova データセットカテゴリから作成される、バランスのとれたコンテキストテキストデータのプール | 
| 動画 | 一時的な理解と逐次的な視覚的説明理解に焦点を当てたモーションベースの視覚的コンテンツ | 

### データミキシングを使用した Nova 2.0 設定
<a name="nova-2-config-data-mixing"></a>

```
data_mixing:
  dataset_catalog: sft_1p5_text_chat       # Nova text dataset catalog
  sources:
    customer_data:
      percent: 50                 # Percent of overall mix to draw from customer data
    nova_data:                    # The remainder will be drawn from Nova data. The categories below must add to 100
      agents: 1                   # autonomous decision-making, task completion, goal-oriented behavior in AI systems
      baseline: 10                 # [New in Nova 1.5]
      chat: 0.5                    # Conversational exchanges demonstrating natural dialogue flow
      code: 10                     # Programming examples and solutions spanning multiple languages
      factuality: 0.1               # [New in Nova 1.5]
      identity: 1                 # [New in Nova 1.5]
      long-context: 1             # [New in Nova 1.5]
      math: 2                     # [New in Nova 1.5]
      rai: 1                      # ethical AI principles, safety considerations, and responsible technology deployment
      instruction-following: 13   # precise task execution based on varying levels of user prompts and directives
      stem: 0.5                     # Technical content covering science, technology, engineering, and mathematics
      planning: 10                 # Sequences demonstrating strategic thinking and step-by-step task breakdown
      reasoning-chat: 0.5
      reasoning-code: 0.5
      reasoning-factuality: 0.5
      reasoning-instruction-following: 45
      reasoning-math: 0.5
      reasoning-planning: 0.5
      reasoning-rag: 0.4
      reasoning-rai: 0.5
      reasoning-stem: 0.4
      rag: 1                      # combining retrieved external knowledge with generated responses
      translation: 0.1
```

これらのカテゴリは何を意味するのでしょうか。


**Nova 2.0 テキストデータカテゴリ**  

| カテゴリ名 | 情報の詳細 | 
| --- | --- | 
| エージェント | AI システムにおける自律的な意思決定、タスクの完了、目標指向の動作に焦点を当てたトレーニングデータ | 
| ベースライン | 一般的な理解、基本的なコミュニケーション、コア言語機能に焦点を当てた基本的な言語データ | 
| チャット | 自然な対話の流れ、文脈の維持、適切な社会的交流を示す会話のやり取り | 
| コード | さまざまなプログラミング言語とプラットフォームからのプログラミングソースコード、ドキュメント、技術的議論。 | 
| 事実性 | 正確性、ソース検証、真実性評価に焦点を当てた参考資料と検証済み情報 | 
| アイデンティティ | 一貫した性格特性、価値観、対話スタイルに焦点を当てたパーソナリティフレームワークと行動パターン | 
| 長いコンテキスト | 長いやり取りで一貫性と関連性を維持することに焦点を当てた拡張テキストと複雑な話 | 
| 算術 | 教科書、問題、解答、数学的議論を含む数学的コンテンツ。 | 
| rai | 倫理的 AI の原則、安全上の考慮事項、責任あるテクノロジーのデプロイを強調するケースとシナリオ | 
| instruction-following | さまざまなレベルのユーザープロンプトとディレクティブに基づく正確なタスク実行の例 | 
| 語幹 | 問題解決と理論的概念を含む、科学、技術、工学、数学をカバーする技術的コンテンツ | 
| 計画 | 戦略的思考、段階的なタスク分割、効率的なリソース割り当てを示すシーケンス | 
| reasoning-chat | 論理的な議論と構造化された会話フローに焦点を当てた分析的な対話シナリオ | 
| reasoning-code | 体系的なソリューション開発に焦点を当てたプログラミングの課題とアルゴリズムの問題 | 
| reasoning-factuality | 重要な評価および検証プロセスに焦点を当てた情報評価シナリオ | 
| reasoning-instruction-following | 体系的な解釈と系統的な実行に焦点を当てた複雑なタスク分析 | 
| reasoning-math | 論理的な進行とソリューション戦略に焦点を当てた数学的問題解決シナリオ | 
| reasoning-planning | 目標の達成に向けた体系的なアプローチに焦点を当てた戦略的意思決定シナリオ | 
| reasoning-rag | コンテキスト理解と関連するアプリケーションに焦点を当てた情報の取得と合成のシナリオ | 
| reasoning-rai | AI の安全性と公平性の体系的な評価に焦点を当てた倫理的意思決定シナリオ | 
| reasoning-stem | 系統分析とソリューション開発に焦点を当てた科学的問題解決シナリオ | 
| rag | 取得した外部知識と生成されたレスポンスを効果的に組み合わせて、正確でコンテキストに応じた情報を提供する例 | 
| 変換 | コンテキスト、トーン、文化的なニュアンスを維持しながら正確な翻訳を示す多言語コンテンツペア | 

### マルチモーダルデータミキシング (Nova 2.0)
<a name="nova-2-mm-data-mixing"></a>

```
data_mixing:
  dataset_catalog: sft_1p5_mm_chat       # Nova text dataset catalog
  sources:
    customer_data:
      percent: 50                 # Percent of overall mix to draw from customer data
    nova_data:                    # The remainder will be drawn from Nova data. The categories below must add to 100
      charts: 1
      chat: 38
      code: 20
      docs: 3
      general: 2
      grounding: 1
      rag: 4
      screenshot: 4
      text: 8
      translation: 4
      video: 15
```

注: Nova 2.0 には、Nova 1.0 では利用できない動画データカテゴリのサポートが含まれています。

これらのカテゴリは何を意味するのでしょうか。


**Nova 2.0 マルチモーダルデータカテゴリ**  

| カテゴリ名 | 情報の詳細 | 
| --- | --- | 
| チャート | グラフ、円グラフ、棒グラフ、折れ線グラフ、その他の統計ビジュアライゼーションの視覚的表現と説明。モデルが定量的情報を効果的に理解し、伝えるのに役立ちます。 | 
| チャット | コンテキスト対話の理解と画像ベースのやり取りに焦点を当てた、会話データと視覚的要素の組み合わせ | 
| コード | 視覚的コード解釈、IDE スクリーンショット、技術図に焦点を当てたプログラミングインターフェイスと開発環境 | 
| ドキュメント | テキスト、画像、レイアウト、フォーマットを組み合わせたドキュメント中心のデータ。PDF コンテンツ認識などの概念に役立つように、さまざまなドキュメントタイプと構造を理解して処理するモデルをトレーニングします。 | 
| 全般 | 画像、グラフィック、それに付随する記述テキストの幅広い理解に焦点を当てた多様な視覚的/テキストコンテンツ | 
| グラウンディング | 言語概念を実際の視覚的表現に結び付けることに焦点を当てた視覚的な参照マテリアルとラベル付き画像 | 
| rag | 視覚的およびテキストの外部知識を効果的に組み合わせて参照し、正確でコンテキストに応じたレスポンスを生成する方法を示すマルチモーダル検索の例 | 
| スクリーンショット | ソフトウェアインターフェイスとデジタルインタラクションの理解に焦点を当てた、アプリケーションインターフェイスのキャプチャとデジタルディスプレイ画像 | 
| テキスト | ジェネラリスト能力を提供するために、テキストのみの SFT Nova データセットカテゴリから作成される、バランスのとれたコンテキストテキストデータのプール | 
| 変換 | 画像や文化的な視覚的要素におけるテキストの多言語解釈に焦点を当てた言語間の視覚的コンテンツ | 
| 動画 | 一時的な理解と逐次的な視覚的説明理解に焦点を当てたモーションベースの視覚的コンテンツ | 

## ジョブを起動する方法
<a name="how-to-launch-job"></a>

最初の SFT 実行を開始するために必須の詳細のみを取得する必要がある場合は、README を参照することもできます。

コンテナ情報:


**コンテナ情報と起動コマンド**  

| モデル | 手法 | サブカテゴリ | イメージ URI | Hyperpod ランチャーコマンド | 
| --- | --- | --- | --- | --- | 
| Nova 1.0 | ファインチューニング | SFT/PEFT | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-latest | hyperpod start-job \\ -n kubeflow \\ --recipe fine-tuning/nova/nova\_1\_0/nova\_micro/SFT/nova\_micro\_1\_0\_p5\_gpu\_sft \\ --override-parameters '{ "instance\_type": "ml.p5.48xlarge", "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-latest" }' | 
| Nova 1.0 | ファインチューニング | データミキシングを使用した SFT | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:HP-SFT-DATAMIX | hyperpod start-job \\ -n kubeflow \\ --recipe fine-tuning/nova/forge/nova\_1\_0/nova\_micro/SFT/nova\_micro\_1\_0\_p5\_gpu\_sft\_text\_with\_datamix \\ --override-parameters '{ "instance\_type": "ml.p5.48xlarge", "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:HP-SFT-DATAMIX" }' | 
| Nova 2.0 | ファインチューニング | SFT テキスト | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-V2-latest | hyperpod start-job \\ -n kubeflow \\ --recipe fine-tuning/nova/nova\_2\_0/nova\_lite/SFT/nova\_lite\_2\_0\_p5\_gpu\_sft \\ --override-parameters '{ "instance\_type": "ml.p5.48xlarge", "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-V2-latest" }' | 
| Nova 2.0 | ファインチューニング | SFT テキスト \+ データミキシング | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-V2-DATAMIXING-latest | hyperpod start-job \\ -n kubeflow \\ --recipe fine-tuning/nova/forge/nova\_2\_0/nova\_lite/SFT/nova\_lite\_2\_0\_p5\_gpu\_sft\_text\_with\_datamix \\ --override-parameters '{ "instance\_type": "ml.p5.48xlarge", "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-V2-DATAMIXING-latest" }' | 
| Nova 2.0 | ファインチューニング | SFT MM | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-V2-latest | hyperpod start-job \\ -n kubeflow \\ --recipe fine-tuning/nova/nova\_2\_0/nova\_lite/SFT/nova\_lite\_2\_0\_p5\_gpu\_sft \\ --override-parameters '{ "instance\_type": "ml.p5.48xlarge", "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-V2-latest" }' | 
| Nova 2.0 | ファインチューニング | SFT MM \+ データミキシング | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-V2-DATAMIXING-latest | hyperpod start-job \\ -n kubeflow \\ --recipe fine-tuning/nova/forge/nova\_2\_0/nova\_lite/SFT/nova\_lite\_2\_0\_p5\_gpu\_sft\_mm\_with\_datamix \\ --override-parameters '{ "instance\_type": "ml.p5.48xlarge", "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-V2-DATAMIXING-latest" }' | 

セットアップが完了したら、sagemaker-hyperpod-cli リポジトリのルートから、デフォルトの Nova SFT レシピフォルダに移動します。
+ cd /src/hyperpod\_cli/sagemaker\_hyperpod\_recipes/recipes\_collection/recipes/training/nova/
+ ここでは、ベースモデルの選択に基づいて Nova 1 レシピまたは Nova 2 レシピを実行するかどうかを選択できます。

Nova 1.0 SFT の場合:
+ 通常の SFT ジョブを使用する場合は、このフォルダの下にレシピを 1 つ表示できるはずです。
  + cd /src/hyperpod\_cli/sagemaker\_hyperpod\_recipes/recipes\_collection/recipes/fine-tuning/nova\_1\_0/nova\_lite/SFT。nova\_lite\_1\_0\_p5x8\_gpu\_sft.yaml という名前のこのフォルダの下にレシピを 1 つ表示できるはずです。
+ データミキシング SFT ジョブを使用する場合は、SFT Forge レシピフォルダに移動できます。
  + cd /src/hyperpod\_cli/sagemaker\_hyperpod\_recipes/recipes\_collection/recipes/fine-tuning/nova/forge/nova\_1\_0/nova\_lite/SFT。nova\_lite\_1\_0\_p5x8\_gpu\_sft\_with\_datamix.yaml という名前のこのフォルダの下にレシピを 1 つ表示できるはずです。
+ name、data\_s3\_path、validation\_s3\_path、output\_s3\_path、max\_steps など、ジョブに必要なレシピ内のセクションを編集します。SFT を実行するため、エポックの概念はここでは適用されません。

Nova 2.0 SFT の場合:
+ 通常の SFT ジョブを使用する場合は、このフォルダの下にレシピを 1 つ表示できるはずです。
  + cd /src/hyperpod\_cli/sagemaker\_hyperpod\_recipes/recipes\_collection/recipes/fine-tuning/nova\_2\_0/nova\_lite/SFT。nova\_lite\_2\_0\_p5x8\_gpu\_sft.yaml という名前のこのフォルダの下にレシピを 1 つ表示できるはずです。
+ データミキシング SFT ジョブを使用する場合は、SFT Forge レシピフォルダに移動できます。
  + cd /src/hyperpod\_cli/sagemaker\_hyperpod\_recipes/recipes\_collection/recipes/fine-tuning/nova/forge/nova\_2\_0/nova\_lite/SFT。nova\_lite\_2\_0\_p5x8\_gpu\_sft\_with\_datamix.yaml という名前のこのフォルダの下にレシピを 1 つ表示できるはずです。
+ name、data\_s3\_path、validation\_s3\_path、output\_s3\_path、max\_steps など、ジョブに必要なレシピ内のセクションを編集します。SFT を実行するため、エポックの概念はここでは適用されません。

データミキシング設定は同じように見えますが、下部には次のような追加のデータミキシングセクションがあります。

```
data_mixing:
  dataset_catalog: sft_text_lite
  sources:
    nova_data:   # percent inputs for Nova data must sum to 100%; use 0% if you want to exclude a data grouping
      agents: 20
      business-and-finance: 20
      scientific: 20
      code: 20
      factual-and-news: 20
      longform-text: 0
      health-and-medicine: 0
      humanities-and-education: 0
      legal: 0
      math: 0
      additional-languages: 0
      social-and-personal-interest: 0
      entertainment: 0
      reasoning: 0
      other: 0
      tables: 0
    customer_data: # percent input of customer data. 100 = use only customer data, 0 = use only the nova_data mix above
      percent: 25
```

ここでは、データの最上位カテゴリは 2 つあります。
+ nova\_data : これは実際のデータミキシングであり、さらに多くのカテゴリに細分化されます。合計は必ず 100% になる必要があります。
  + トークン数を含むこれらのカテゴリの完全な内訳については、以下を参照してください。
+ customer\_data : これは、yaml の上部にある data\_s3\_path キーで参照されるトレーニングデータです。ここで提供される割合によって、結果的な nova\_data の割合が決まります。例えば、上記の割合選択では、トレーニング中に customer\_data の 25% を使用します。そして nova\_data の 75% を使用し、そのうちの 15% が agents、15% が business-and-finance、15% が scientific、15% が code、15% が factual-and-news になります。

ヒント: pip install -e をもう一度実行すると、ジョブを送信する準備が整います。

データミキシングを使用するには、ここでいくつかのパラメータをオーバーライドします。

```
hyperpod start-job \
 -n kubeflow \
 --recipe fine-tuning/nova/forge/nova_2_0/nova_lite/SFT/nova_lite_2_0_p5x8_gpu_sft_with_datamix \
 --override-parameters '{
 "instance_type": "ml.p5.48xlarge",
 "recipes.run.name": "nova-sft-datamixing",
 "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-V2-Datamix",
 "recipes.run.data_s3_path": "s3://sft-data/sft_train_data.jsonl",
 "recipes.run.validation_data_s3_path": "s3://sft-data/sft_val_data.jsonl",
 "recipes.run.output_s3_path": "s3://sft-data/output/
 }'
```

出力には、次のようにジョブ名が含まれている必要があります。

```
⚡ MY Desktop ⚡ % hyperpod start-job \
 -n kubeflow \
 --recipe training/nova/forge/nova_2_0/nova_lite/sft/nova_lite_2_0_p5x8_gpu_pretrain_with_datamix \
 --override-parameters '{
 "instance_type": "ml.p5.48xlarge",
 "recipes.run.name": "nova-sft-datamixing",
 "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-V2-Datamix",
 "recipes.run.data_s3_path": "s3://sft-data/sft_train_data.jsonl",
 "recipes.run.validation_data_s3_path": "3://sft-data/sft_val_data.jsonl",
 "recipes.run.output_s3_path": "3://sft-data/output/
 }'
```

出力は次のようになります。

```
Final command: python3 /local/home/my/Downloads/sagemaker-hyperpod-cli/src/hyperpod_cli/sagemaker_hyperpod_recipes/main.py recipes=training/nova/nova_micro_p5x8_gpu_pretrain cluster_type=k8s cluster=k8s base_results_dir=/local/home/niphaded/Downloads/sagemaker-hyperpod-cli/results cluster.pullPolicy="IfNotPresent" cluster.restartPolicy="OnFailure" cluster.namespace="kubeflow" instance_type="p5d.48xlarge" container="900867814919.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:sft-datamix-rig-final"
Prepared output directory at /local/home/my/Downloads/sagemaker-hyperpod-cli/results/my-sft-run-wzdyn/k8s_templates
Found credentials in shared credentials file: ~/.aws/credentials
Helm script created at /local/home/my/Downloads/sagemaker-hyperpod-cli/results/my-sft-run-wzdyn/niphaded-sft-run-wzdyn_launch.sh
Running Helm script: /local/home/my/Downloads/sagemaker-hyperpod-cli/results/my-sft-run-wzdyn/niphaded-sft-run-wzdyn_launch.sh

NAME: my-sft-run-wzdyn
LAST DEPLOYED: Tue Aug 26 16:21:06 2025
NAMESPACE: kubeflow
STATUS: deployed
REVISION: 1
TEST SUITE: None
Launcher successfully generated: /local/home/my/Downloads/sagemaker-hyperpod-cli/src/hyperpod_cli/sagemaker_hyperpod_recipes/launcher/nova/k8s_templates/SFT

{
 "Console URL": "https://us-east-1.console.aws.amazon.com/sagemaker/home?region=us-east-1#/cluster-management/hyperpod-eks-ga-0703"
}
```

hyperpod list-pods -n kubeflow --job-name my-sft-run-wzdyn を使用してジョブのステータスを表示できます。

```
hyperpod list-pods -n kubeflow --job-name my-sft-run-wzdyn 
{
 "pods": [
  {
   "PodName": "my-sft-run-wzdyn-master-0",
   "Namespace": "kubeflow",
   "Status": "Pending",
   "CreationTime": "2025-08-26 16:21:06+00:00"
  },
  {
   "PodName": "my-sft-run-wzdyn-worker-0",
   "Namespace": "kubeflow",
   "Status": "Pending",
   "CreationTime": "2025-08-26 16:21:06+00:00"
  }
 ]
}
```

または kubectl コマンドを直接使用して検索します。

例えば、

```
kubectl get pods -o wide -w -n kubeflow | (head -n1 ; grep my-sft-run)

NAME                                                         READY   STATUS      RESTARTS   AGE     IP              NODE                           NOMINATED NODE   READINESS GATES
my-sft-run-5suc8-master-0                              0/1     Completed   0          3h23m   172.31.32.132   hyperpod-i-00b3d8a1bf25714e4   <none>           <none>
my-sft-run-5suc8-worker-0                              0/1     Completed   0          3h23m   172.31.44.196   hyperpod-i-0aa7ccfc2bd26b2a0   <none>           <none>
my-sft-run-5suc8-worker-1                              0/1     Completed   0          3h23m   172.31.46.84    hyperpod-i-026df6406a7b7e55c   <none>           <none>
my-sft-run-5suc8-worker-2                              0/1     Completed   0          3h23m   172.31.28.68    hyperpod-i-0802e850f903f28f1   <none>           <none>
```

プロのヒント: ジョブが実行される EKS ノードが AWS UI でログをより迅速に見つけるのに役立つため、常に -o wide フラグを使用するようにしてください。

## ジョブの監視方法
<a name="how-to-monitor-job"></a>

ログは、以下の 3 つの方法のいずれかで表示できます。

### a) CloudWatch の使用
<a name="using-cloudwatch"></a>

ログは、CloudWatch の HyperPod クラスターを含む Amazon Web Services アカウントで使用できます。ブラウザで表示するには、アカウントの CloudWatch ホームページに移動し、クラスター名を検索します。例えば、クラスターの名前が my-hyperpod-rig の場合、ロググループのプレフィックスは以下のようになります。
+ ロググループ: /aws/sagemaker/Clusters/my-hyperpod-rig/{UUID}
+ ロググループに入ると、hyperpod-i-00b3d8a1bf25714e4 などのノードインスタンス ID を使用して特定のログを見つけることができます。
  + ここで i-00b3d8a1bf25714e4 は、トレーニングジョブが実行されている HyperPod フレンドリマシン名を表します。前のコマンドの kubectl get pods -o wide -w -n kubeflow \| (head -n1 ; grep my-cpt-run) の出力で、NODE という列をキャプチャした方法を思い出してください。
  + この場合、「マスター」ノード実行は hyperpod-i-00b3d8a1bf25714e4 で実行されていたため、その文字列を使用して表示するロググループを選択します。SagemakerHyperPodTrainingJob/rig-group/[NODE] と表示されているものを選択します。

ログは次のようになります。

### b) CloudWatch Insights の使用
<a name="using-cloudwatch-insights"></a>

ジョブ名が手元にあり、上記のすべてのステップを実行したくない場合は、/aws/sagemaker/Clusters/my-hyperpod-rig/{UUID} のすべてのログをクエリするだけで、個々のログを検索できます。

CPT

```
fields @timestamp, @message, @logStream, @log 
| filter @message like /(?i)Starting CPT Job/
| sort @timestamp desc 
| limit 100
```

ジョブ完了の場合は、「SFT ジョブ開始」を「SFT ジョブ完了」に置き換えます。

次に、結果をクリックし、「Epoch 0」と表示されているものを選択できます。これがマスターノードになります。

### C) AWS CLI の使用
<a name="using-aws-cli"></a>

AWS CLI を使用してログをテーリングすることもできます。これを行う前に、`aws --version` を使用して AWS CLI のバージョンを確認してください。また、ターミナルでのライブログ追跡に役立つこのユーティリティスクリプトを使用することをお勧めします

V1 の場合:

```
aws logs get-log-events \
 --log-group-name /aws/sagemaker/YourLogGroupName \
 --log-stream-name YourLogStream \
 --start-from-head | jq -r '.events[].message'
```

V2 の場合:

```
aws logs tail /aws/sagemaker/YourLogGroupName \
  --log-stream-name YourLogStream \
 --since 10m \
 --follow
```

### D) ML フローのセットアップ:
<a name="setup-mlflow"></a>

MLflow を使用してメトリクスを追跡できます。

MLflow アプリを作成する

Studio UI の使用: Studio UI を使用してトレーニングジョブを作成すると、デフォルトの MLflow アプリが自動的に作成され、[詳細オプション] でデフォルトで選択されます。

CLI の使用: CLI を使用する場合は、MLflow アプリを作成し、トレーニングジョブ API リクエストへの入力として渡す必要があります。

```
mlflow_app_name="<enter your MLflow app name>"  
role_arn="<enter your role ARN>"   
bucket_name="<enter your bucket name>"   
region="<enter your region>"  
  
mlflow_app_arn=$(aws sagemaker create-mlflow-app \  
  --name $mlflow_app_name \  
  --artifact-store-uri "s3://$bucket_name" \  
  --role-arn $role_arn \  
  --region $region)
```

MLflow アプリにアクセスする

CLI の使用: MLflow アプリ UI にアクセスするための署名付き URL を作成します。

```
aws sagemaker create-presigned-mlflow-app-url \  
  --arn $mlflow_app_arn \  
  --region $region \  
  --output text
```

ML フローをセットアップしたら、レシピで URI を渡す、またはジョブの開始時にオーバーライドを使用することができます。その方法の一例が README に記載されています。

## SFT 後にモデルを評価する方法
<a name="how-to-evaluate-after-sft"></a>

### 前提条件
<a name="eval-prerequisites"></a>
+ トレーニングジョブの manifest.json ファイルからのチェックポイント S3 URI (トレーニング済みモデルの場合)
+ S3 に正しい形式でアップロードされた評価データセット
+ 評価結果の出力 S3 パス

すぐに使えるベンチマーク: すぐに使えるベンチマークを使用して、一般的なタスクのパフォーマンスを検証します。詳細については、こちらを参照してください。

### 独自のデータを使用する:
<a name="bring-your-own-eval-data"></a>

以下の形式でフォーマットし、以下のコンテナを使用してカスタムデータを提供し、必要に応じてキャリブレーションのログ確率と共に推論結果を取得することもできます。

次の構造でタスクごとに jsonl を作成します。

```
{
  "metadata": "{key:4, category:'apple'}",
  "system": "arithmetic-patterns, please answer the following with no other words: ",
  "query": "What is the next number in this series? 1, 2, 4, 8, 16, ?",
  "response": "32"
}
```

評価ジョブの推論フェーズ中に生成された出力は、次の構造になります。

```
{
  "prompt": "[{'role': 'system', 'content': 'arithmetic-patterns, please answer the following with no other words: '}, {'role': 'user', 'content': 'What is the next number in this series? 1, 2, 4, 8, 16, ?'}]",
  "inference": "['32']",
  "gold": "32",
  "metadata": "{key:4, category:'apple'}"
}
```

フィールドの説明:
+ prompt: モデルに送信されるフォーマットされた入力
+ inference: モデルが生成したレスポンス
+ gold: 入力データセットから期待される正しい回答、入力からのレスポンスフィールド
+ metadata: 入力から渡されるオプションのメタデータ

### 評価設定の準備
<a name="prepare-eval-config"></a>

評価ジョブを起動するコマンド。「--override-parameters」を使用して、レシピのエントリを変更します。

```
hyperpod start-job -n kubeflow \
  --recipe evaluation/nova/nova_micro_p5_48xl_bring_your_own_dataset_eval \
  --override-parameters '{
    "instance_type": "p5.48xlarge",
    "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-evaluation-repo:SM-HP-Eval-latest",
    "recipes.run.name": "<your-eval-job-name>",
    "recipes.run.model_name_or_path": "<checkpoint-s3-uri>",
    "recipes.run.output_s3_path": "s3://<your-bucket>/eval-results/",
    "recipes.run.data_s3_path": "s3://<your-bucket>/eval-data.jsonl"
  }'
```

### 評価ジョブの起動
<a name="launch-eval-job"></a>

対応する画像を持つさまざまなレシピのジョブ起動コマンド。


**評価ジョブ起動コマンド**  

| モデル | 手法 | サブカテゴリ | イメージ URI | コマンド | 
| --- | --- | --- | --- | --- | 
| Nova 1.0 | 評価 | 評価 | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-evaluation-repo:SM-HP-Eval-latest | hyperpod start-job \\ -n kubeflow \\ --recipe evaluation/nova/nova\_1\_0/nova\_lite/nova\_lite\_2\_0\_p5\_48xl\_gpu\_ft\_eval \\ --override-parameters '{ "instance\_type": "ml.p5.48xlarge", "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-evaluation-repo:SM-HP-Eval-latest" }' | 
| Nova 2.0 | 評価 | 評価 | 708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-evaluation-repo:SM-HP-Eval-latest | hyperpod start-job -n kubeflow \\ --recipe evaluation/nova/nova\_2\_0/nova\_lite/nova\_lite\_2\_0\_p5\_48xl\_gpu\_ft\_eval \\ --override-parameters '{ "instance\_type": "ml.p5.48xlarge", "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-evaluation-repo:SM-HP-Eval-latest" }' | 

## 学んだ教訓とヒント
<a name="lessons-learned-tips"></a>
+ SFT データセットの品質は非常に重要です。品質の低いデータを除外するために、あらゆる努力をする必要があります。複雑さと精度の両方の観点から、非常に高品質のデータの小さなサブセットがある場合は、モデルの収束性を高めるために、トレーニングの終盤に配置することを検討してください。
+ データミキシングには、テキストデータセットとマルチモーダル (MM) データセットの両方を活用します。テキストデータセットを使用した実験では、Nova 独自の「推論指示追従型」カテゴリを追加すると、汎用ベンチマーク全体のパフォーマンスが大幅に向上することが示されています。データセットを使用して SFT を実行した後に低下する汎用ベンチマークを重視する場合は、このカテゴリをデータミキシング戦略に含めることをお勧めします。
+ MM データセットの場合、実験では、20% を超える動画カテゴリを混合に組み込むことが、汎用ベンチマークのパフォーマンスを維持する上で有益であることが示されています。
+ さらに、データミキシングを使用した SFT は学習率に非常に影響されやすいため、実験結果は、デフォルトの学習率、つまり LoRA の場合は 1e-5、FR の場合は 5e-6 でファインチューニングすることを示唆しています。
+ 最後に、Nova 所有データセットを混合させると、レイテンシーとパフォーマンスにトレードオフが生じるため、実験結果では、適切なバランスとして最大 50% 混合させることが示唆されています。