

# SageMaker HyperPod での Nova 2.0 の継続的事前トレーニング (CPT)
<a name="nova-cpt-2"></a>

Amazon Nova Lite 2.0 は、Nova Lite 1.0 よりも大規模で多様なデータセットでトレーニングされた推論モデルです。より大きなモデルであるにもかかわらず、Nova Lite 2.0 は Nova Lite 1.0 よりも高速な推論を行うと同時に、推論機能が強化され、より長いコンテキスト長を扱え、多言語パフォーマンスが改善されています。

Nova 2.0 Lite の CPT を使用すると、これらの高度な機能をドメイン固有のデータで拡張できるため、モデルの優れた推論と分析能力を維持しながら、専門分野に関する深い専門知識を開発できます。

## サンプル CPT レシピ
<a name="nova-cpt-2-sample-recipe"></a>

CPT のサンプルレシピは以下のとおりです。このレシピなどは、GitHub の [SageMaker HyperPod レシピ](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/training/nova)リポジトリ にあります。

```
# Note:
# This recipe can run on p5.48xlarge
# Run config
run:
  name: "my-cpt-run"                           # A descriptive name for your training job
  model_type: "amazon.nova-2-lite-v1:0:256k"   # Model variant specification, do not change
  model_name_or_path: "nova-lite-2/prod"        # Base model path, do not change
  replicas: 8                                   # Number of compute instances for training, allowed values are 4, 8, 16, 32
  data_s3_path: ""                              # Customer data paths
  validation_data_s3_path: ""                   # Customer validation data paths
  output_s3_path: ""                            # Output artifact path, SageMaker HyperPod job-specific configuration - not compatible with standard SageMaker Training Jobs
  mlflow_tracking_uri: ""                       # Required for MLFlow
  mlflow_experiment_name: "my-cpt-experiment"   # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-cpt-run"                 # Optional for MLFlow. Note: leave this field non-empty

## Training specific configs
training_config:
  task_type: cpt
  max_length: 8192                              # Maximum context window size (tokens)
  global_batch_size: 256                        # Global batch size, allowed values are 32, 64, 128, 256.

  trainer:
    max_steps: 10                               # The number of training steps to run total
    val_check_interval: 10                      # The number of steps between running validation. Integer count or float percentage
    limit_val_batches: 2                        # Batches of the validation set to use each trigger

  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

  optim:
    optimizer: adam
    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
    adam_beta1: 0.9                             # Beta1 for Adam optimizer
    adam_beta2: 0.95                            # Beta2 for Adam optimizer
    sched:
      warmup_steps: 10                          # Learning rate warmup steps
      constant_steps: 0                         # Steps at constant learning rate
      min_lr: 1e-6                              # Minimum learning rate, must be lower than lr
```

## SageMaker HyperPod で継続的事前トレーニングジョブを開始する
<a name="nova-cpt-2-starting-job"></a>

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

CPT トレーニングデータを準備するためのデータ形式、サポートされている機能、制約、およびベストプラクティスについては、[Amazon Nova 2 での CPT のデータの準備](nova-data-prep-cpt-2.md) を参照してください。

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

トレーニングデータセットと検証データセットを S3 バケットにアップロードします。レシピの `run` ブロックでこれらの場所を指定します。

```
## Run config
run:
  ...
  data_s3_path: "s3://<bucket-name>/<training-directory>/<training-file>.jsonl"
  validation_data_s3_path: "s3://<bucket-name>/<validation-directory>/<validation-file>.jsonl"
```

**注記**  
`<bucket-name>`、`<training-directory>`、`<validation-directory>`、`<training-file>`、`<validation-file>` を実際の S3 パスに置き換えます。

### 設定の定義
<a name="nova-cpt-2-defining-config"></a>

`run` ブロックの `model_type` フィールドと `model_name_or_path` フィールドを使用してベースモデルを定義します。

```
## Run config
run:
  ...
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  ...
```

## CPT チューニングパラメータ
<a name="nova-cpt-2-tuning-parameters"></a>

CPT でファインチューニングできるパラメータは次のとおりです。

**実行設定**  

+ **name**: トレーニングジョブのわかりやすい名前。AWS マネジメントコンソールでジョブを区別しやすくなります。
+ **model\_type**: 使用する Amazon Nova モデルバリアント。`amazon.nova-2-lite-v1:0:256k` のオプションを使用できます。
+ **model\_name\_or\_path**: トレーニングに使用するベースモデルへのパス。使用可能なオプションは `nova-lite-2/prod`、またはトレーニング後のチェックポイントの S3 パス (`s3://customer-escrow-bucket-unique_id/training_run_name`) です。
+ **replicas**: 分散トレーニングに使用するコンピューティングインスタンスの数。使用可能な値は選択したモデルによって異なります。Amazon Nova Lite 2.0 では、4 個、8 個、16 個、または 32 個のレプリカをサポートしています。
+ **data\_s3\_path**: トレーニングデータセットの S3 の場所。これは JSONL ファイルです。このファイルは、クラスターと同じ AWS アカウントおよびリージョンに配置する必要があります。指定された S3 の場所は、同じアカウントとリージョンに存在している必要があります。
+ **validation\_data\_s3\_path**: (オプション) 検証データセットの S3 の場所。これは JSONL ファイルです。このファイルは、クラスターと同じアカウントおよびリージョンに配置する必要があります。指定された S3 の場所は、同じアカウントとリージョンに存在している必要があります。
+ **output\_s3\_path**: マニフェストと TensorBoard ログが保存される S3 の場所。指定された S3 の場所は、同じ AWS アカウントと AWS リージョンに存在している必要があります。
+ **mlflow\_tracking\_uri**: MLFlow ログ記録に使用する MLFlow アプリケーションの ARN
+ **mlflow\_experiment\_name**: MLFlow 実験名
+ **mlflow\_run\_name**: MLFlow 実行名

**トレーニング設定**  

+ **max\_length**: トークンの最大シーケンス長。これにより、トレーニングのコンテキストウィンドウのサイズが決まります。サポートされている最大値は、CPT で 8192 トークンです。

  シーケンスを長くすると、メモリ要件の増加を犠牲にしてトレーニング効率が向上します。max\_length パラメータをデータディストリビューションに一致させることをお勧めします。
+ **global\_batch\_size**: すべてのデバイスとワーカーで 1 回の前方パスまたは後方パスで一緒に処理されたトレーニングサンプルの合計数。

  この値は、デバイスごとのバッチサイズとデバイスの数を乗算します。これは、トレーニングとスループットの安定性に影響します。メモリ内で快適に学習するバッチサイズから始めて、そこからスケールアップすることをお勧めします。ドメイン固有のデータの場合、大きなバッチでは勾配が滑らかになりすぎる可能性があります。

**トレーナー設定**  

+ **max\_steps**: 実行するトレーニングステップの数。各ステップでは、`global_batch_size` 個の要素でモデルをトレーニングします

**モデル設定**  

+ **hidden\_dropout**: 隠れ状態の出力をドロップする確率。この値を約 0.0～0.2 ずつ増やして、小さいデータセットのオーバーフィットを減らします。有効な値は 0～1 で、その範囲に限ります。
+ **attention\_dropout**: アテンション重みをドロップする確率。このパラメータは一般化に役立ちます。有効な値は 0～1 で、その範囲に限ります。

**オプティマイザー設定**  

+ **lr**: 最適化中のステップサイズを制御する学習率。パフォーマンスを向上させるには、1e-6-1e-4 の間の値をお勧めします。有効な値は 0～1 で、その範囲に限ります。
+ **name**: オプティマイザーアルゴリズム。現在は、`distributed_fused_adam` のみがサポートされます。
+ **weight\_decay**: L2 正則化の強度。値が大きいほど (0.01～0.1) 正則化が増加します。
+ **warmup\_steps**: 学習率を徐々に増やすステップの数。これにより、トレーニングの安定性が向上します。有効な値は 1～20 で、その範囲に限ります。
+ **min\_lr**: 減衰終了時の最小学習率。有効な値は 0～1 の範囲でその範囲に限られますが、学習率より小さくする必要があります。