

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 全般設定
<a name="sagemaker-hyperpod-recipes-general-configuration"></a>

config.yaml ファイルは、トレーニングレシピとクラスターを指定します。トレーニングジョブの環境変数などのランタイム設定も含まれています。

```
defaults:
  - _self_
  - cluster: slurm 
  - recipes: training/llama/hf_llama3_8b_seq8192_gpu
instance_type: p5.48xlarge
git:
  repo_url_or_path: null
  branch: null
  commit: null
  entry_script: null
  token: null
env_vars:
  NCCL_DEBUG: WARN
```

以下のパラメータを `config.yaml` で変更できます。

1. `defaults`: デフォルトのクラスターやデフォルトのレシピなど、デフォルト設定を指定します。

1. `instance_type`: アプリケーションを実行するために使用する Amazon EC2 インスタンスタイプ。

1. `git`: トレーニングジョブの SageMaker HyperPod レシピアダプタリポジトリの場所を指定します。

1. `env_vars`: ランタイムトレーニングジョブに渡す環境変数を指定できます。例えば、NCCL\$1DEBUG 環境変数を指定することで、NCCL のログ記録レベルを調整できます。

レシピは、トレーニングジョブアーキテクチャを定義するコア設定です。このファイルには、以下などのトレーニングジョブに関する重要な情報が多数含まれています。
+ モデル並列処理を使用するかどうか
+ 使用するデータソース名
+ 混合精度トレーニング
+ チェックポイント関連の設定

レシピはそのまま使用できます。以下の情報を使用して変更することもできます。

## 実行
<a name="run"></a>

以下は、トレーニングジョブを実行するための基本的な実行情報です。

```
run:
  name: llama-8b
  results_dir: ${base_results_dir}/${.name}
  time_limit: "6-00:00:00"
  model_type: hf
```

1. `name`: 設定ファイルでトレーニングジョブの名前を指定します。

1. `results_dir`: トレーニングジョブの結果が保存されるディレクトリを指定できます。

1. `time_limit`: ハードウェアリソースを長時間占有しないように、トレーニングジョブの最大トレーニング時間を設定できます。

1. `model_type`: 使用しているモデルのタイプを指定できます。例えば、モデルが HuggingFace からのものである `hf` かどうかを指定できます。

## exp\$1manager
<a name="exp-manager"></a>

exp\$1manager は実験を設定します。exp\$1manager では、出力ディレクトリやチェックポイント設定などのフィールドを指定できます。以下は、exp\$1manager を設定する方法の例です。

```
exp_manager:
  exp_dir: null
  name: experiment
  create_tensorboard_logger: True
```

1. `exp_dir`: 実験ディレクトリには、トレーニングジョブの標準出力ファイルと標準エラーファイルが含まれています。デフォルトでは、現在のディレクトリを使用します。

1. `name`: exp\$1dir で実験を識別するために使用される実験名。

1. `create_tensorboard_logger`: TensorBoard ロガーを有効または無効にするには、`True` または `False` と指定します。

## Checkpointing
<a name="checkpointing"></a>

3 種類のチェックポイントがサポートされています。
+ 自動チェックポイント
+ 手動チェックポイント
+ 完全チェックポイント

### 自動チェックポイント
<a name="auto-checkpointing"></a>

SageMaker HyperPod レシピアダプタが自動的に管理するチェックポイントを保存またはロードする場合は、`auto_checkpoint` を有効にできます。`auto_checkpoint` を有効にするには、`enabled` を `True` に設定します。自動チェックポイントは、トレーニングとファインチューニングの両方に使用できます。自動チェックポイントは、共有ファイルシステムと Amazon S3 の両方に使用できます。

```
exp_manager
  checkpoint_dir: ${recipes.exp_manager.exp_dir}/checkpoints/
  auto_checkpoint:
    enabled: True
```

自動チェックポイントは、自動的に計算された最適な保存間隔で local\$1state\$1dict を非同期的に保存します。

**注記**  
このチェックポイントモードの場合、自動保存チェックポイントはトレーニング実行間の再シャーディングをサポートしません。最新の自動保存チェックポイントから再開するには、同じシャード度を保持する必要があります。自動再開のために追加情報を指定する必要はありません。

### 手動チェックポイント
<a name="manual-checkpointing"></a>

shared\$1state\$1dict に中間チェックポイントを非同期的に保存するように `checkpoint_callback_params` を変更できます。例えば、次の設定を指定して、10 ステップごとにシャードチェックポイントを有効にし、最新の 3 つのチェックポイントを保持できます。

シャードチェックポイントを使用すると、トレーニング実行間のシャード度を変更し、`resume_from_checkpoint` を設定してチェックポイントをロードできます。

**注記**  
PEFT ファインチューニングの場合、シャードチェックポイントは Amazon S3 をサポートしません。
自動チェックポイントと手動チェックポイントは相互排他性です。
変更できるのは、FSDP シャード度とレプリケーション度のみです。

```
exp_manager:
  checkpoint_callback_params:
    # Set save_top_k = 0 to disable sharded checkpointing
    save_top_k: 3
    every_n_train_steps: 10
    monitor: "step"
    mode: "max"
    save_last: False
  resume_from_checkpoint: ${recipes.exp_manager.exp_dir}/checkpoints/
```

チェックポイントの詳細については、「[SMP を使用したチェックポイント](model-parallel-core-features-v2-checkpoints.md)」を参照してください。

### 完全チェックポイント
<a name="full-checkpointing"></a>

エクスポートされた full\$1state\$1dict チェックポイントは、推論またはファインチューニングに使用できます。hf\$1model\$1name\$1or\$1path を使用してチェックポイント全体をロードできます。このモードでは、モデルの重みのみが保存されます。

full\$1state\$1dict モデルをエクスポートするには、次のパラメータを設定できます。

**注記**  
現時点では、完全チェックポイントは Amazon S3 チェックポイントではサポートされていません。完全なチェックポイントを有効にする場合、`exp_manager.checkpoint_dir` の S3 パスを設定することはできません。ただし、`exp_manager.export_full_model.final_export_dir` を Amazon S3 パスに設定しながら、`exp_manager.checkpoint_dir` をローカルファイルシステム上の特定のディレクトリに設定することができます。

```
exp_manager:
  export_full_model:
    # Set every_n_train_steps = 0 to disable full checkpointing
    every_n_train_steps: 0
    save_last: True
    final_export_dir : null
```

## モデル
<a name="model"></a>

モデルアーキテクチャとトレーニングプロセスのさまざまな側面を定義します。これには、モデル並列処理、精度、データ処理の設定などがあります。以下は、モデルセクション内で設定できる主要なコンポーネントです。

### モデル並列処理
<a name="model-parallelism"></a>

レシピを指定したら、トレーニングするモデルを定義します。モデル並列処理を定義することもできます。例えば、tensor\$1model\$1parallel\$1degree を定義できます。FP8 精度でトレーニングなどの他の機能を有効にすることができます。例えば、テンソル並列処理とコンテキスト並列処理を使用してモデルをトレーニングできます。

```
model:
  model_type: llama_v3
  # Base configs
  train_batch_size: 4
  val_batch_size: 1
  seed: 12345
  grad_clip: 1.0

  # Model parallelism
  tensor_model_parallel_degree: 4
  expert_model_parallel_degree: 1
  context_parallel_degree: 2
```

さまざまなタイプのモデル並列処理手法の理解を深めるには、次のアプローチを参照してください。

1. [テンソル並列性](model-parallel-core-features-v2-tensor-parallelism.md)

1. [エキスパート並列処理](model-parallel-core-features-v2-expert-parallelism.md)

1. [コンテキスト並列処理](model-parallel-core-features-v2-context-parallelism.md)

1. [ハイブリッドシャーディングデータ並列処理](model-parallel-core-features-v2-sharded-data-parallelism.md)

### FP8
<a name="fp8"></a>

FP8 (8 ビット浮動小数点精度) を有効にするには、次の例で FP8 に関連する設定を指定できます。

```
model:
  # FP8 config
  fp8: True
  fp8_amax_history_len: 1024
  fp8_amax_compute_algo: max
```

FP8 データ形式は現時点では、P5 インスタンスタイプでのみサポートされていることに注意が必要です。P4 などの古いインスタンスタイプを使用している場合は、モデルトレーニングプロセスの FP8 機能を無効にします。FP8 の詳細については、「[混合精度トレーニング](model-parallel-core-features-v2-mixed-precision.md)」を参照してください。

### data
<a name="data"></a>

データの下にデータパスを追加することで、トレーニングジョブのカスタムデータセットを指定できます。システムのデータモジュールは、次のデータ形式をサポートしています。

1. JSON

1. JSONGZ (圧縮 JSON)

1. ARROW

ただし、事前にトークン化された独自のデータセットを準備するのはお客様の責任となります。特定の要件を持つ上級ユーザーの場合は、カスタマイズしたデータモジュールを実装して統合するオプションもあります。HuggingFace データセットの詳細については「[データセット](https://huggingface.co/docs/datasets/v3.1.0/en/index)」を参照してください。

```
model:
  data:
    train_dir: /path/to/your/train/data
    val_dir: /path/to/your/val/data
    dataset_type: hf
    use_synthetic_data: False
```

モデルのトレーニング方法を指定できます。デフォルトでは、レシピはファインチューニングではなく事前トレーニングを使用します。次の例では、LoRA (Low-Rank Adaptation) を使用してファインチューニングジョブを実行するようにレシピを設定しています。

```
model:
  # Fine tuning config
  do_finetune: True
  # The path to resume from, needs to be HF compatible
  hf_model_name_or_path: null
  hf_access_token: null
  # PEFT config
  peft:
    peft_type: lora
    rank: 32
    alpha: 16
    dropout: 0.1
```

レシピの詳細については、[SageMaker HyperPod のレシピ](https://github.com/aws/sagemaker-hyperpod-recipes)」を参照してください。