

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

# HyperPod Slurm クラスター DPO チュートリアル (GPU)
<a name="hyperpod-gpu-slurm-dpo-tutorial"></a>

次のチュートリアルでは、Slurm 環境を設定し、Llama 80 億パラメータモデルで直接設定最適化 (DPO) ジョブを開始します。

**前提条件**  
環境のセットアップを開始する前に、以下を確認します。  
HyperPod GPU Slurm クラスターをセットアップする  
HyperPod Slurm クラスターでは、Nvidia Enroot と Pyxis が有効になっている必要があります (これらはデフォルトで有効になっています)。
共有ストレージの場所。クラスターノードからアクセスできる Amazon FSx ファイルシステムまたは NFS システムでかまいません。
次のいずれかの形式のトークン化されたバイナリプリファレンスデータセット。  
JSON
JSONGZ (圧縮 JSON)
ARROW
(オプション) HuggingFace から事前にトレーニングされた重みが必要な場合、または Llama 3.2 モデルをトレーニングしている場合は、トレーニングを開始する前に HuggingFace トークンを取得する必要があります。アクセストークンの詳細については、「[ユーザーアクセストークン](https://huggingface.co/docs/hub/en/security-tokens)」を参照してください。

## HyperPod GPU Slurm 環境をセットアップする
<a name="hyperpod-gpu-slurm-dpo-hyperpod-gpu-slurm-environment"></a>

Slurm クラスターでトレーニングジョブを開始するには、次の手順を実行します。
+ クラスターのヘッドノードに SSH 接続します。
+ ログインしたら、仮想環境を設定します。Python 3.9 以降を使用していることを確認します。

  ```
  #set up a virtual environment
  python3 -m venv ${PWD}/venv
  source venv/bin/activate
  ```
+ 共有ストレージの場所に、SageMaker HyperPod レシピと SageMaker HyperPod アダプタリポジトリのクローンを作成します。共有ストレージの場所は、クラスターノードからアクセスできる Amazon FSx ファイルシステムまたは NFS システムでかまいません。

  ```
  git clone https://github.com/aws/sagemaker-hyperpod-training-adapter-for-nemo.git
  git clone --recursive https://github.com/aws/sagemaker-hyperpod-recipes.git
  cd sagemaker-hyperpod-recipes
  pip3 install -r requirements.txt
  ```
+ Enroot を使用してスカッシュファイルを作成します。SMP コンテナの最新リリースを確認するには、「[SageMaker モデル並列処理ライブラリのリリースノート](model-parallel-release-notes.md)」を参照してください。Enroot ファイルの使用の詳細については、[「ビルド最適化 Nemo-Launcher イメージ AWS](https://github.com/aws-samples/awsome-distributed-training/tree/main/3.test_cases/2.nemo-launcher#2-build-aws-optimized-nemo-launcher-image)」を参照してください。

  ```
  REGION="{{<region>}}"
  IMAGE="658645717510.dkr.ecr.${REGION}.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121"
  aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin 658645717510.dkr.ecr.${REGION}.amazonaws.com
  enroot import -o $PWD/smdistributed-modelparallel.sqsh dockerd://${IMAGE}
  mv $PWD/smdistributed-modelparallel.sqsh "/fsx/{{<any-path-in-the-shared-filesystem>}}"
  ```
+ Enroot スカッシュファイルを使用してトレーニングを開始するには、次の例を使用して、`recipes_collection/config.yaml` ファイルを変更します。

  ```
  container: /fsx/path/to/your/smdistributed-modelparallel.sqsh
  ```

## トレーニングジョブを起動する
<a name="hyperpod-gpu-slurm-dpo-launch-training-job"></a>

単一の Slurm コンピューティングノードでシーケンス長が 8192 の Llama 80 億パラメータモデルの DPO ジョブを起動するには、起動スクリプト `launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_dpo.sh` を次のとおり設定します。
+ `IMAGE`: 環境設定セクションのコンテナ。
+ `HF_MODEL_NAME_OR_PATH`: レシピの hf\_model\_name\_or\_path パラメータで、事前トレーニング済みの重みの名前またはパスを定義します。
+ (オプション) 次の key-value ペアを設定することで、HuggingFace から事前トレーニング済みの重みが必要な場合は、HuggingFace トークンを指定できます。

  ```
  recipes.model.hf_access_token=${HF_ACCESS_TOKEN}
  ```

**注記**  
この設定で DPO に使用される参照モデルは、トレーニング中のベースモデルから自動的に導出されます (個別の参照モデルは明示的に定義されません)。DPO 固有のハイパーパラメータには、次のデフォルト値が事前設定されています。  
`beta`: 0.1 (KL 発散正則化の強度を制御します）
`label_smoothing`: 0.0 (スムージングは設定ラベルに適用されません）

```
recipes.dpo.beta=${BETA}
recipes.dpo.label_smoothing=${LABEL_SMOOTHING}
```

```
#!/bin/bash
IMAGE="${YOUR_IMAGE}"
SAGEMAKER_TRAINING_LAUNCHER_DIR="${SAGEMAKER_TRAINING_LAUNCHER_DIR:-${PWD}}"

TRAIN_DIR="${YOUR_TRAIN_DIR}" # Location of training dataset
VAL_DIR="${YOUR_VAL_DIR}" # Location of validation dataset
# experiment output directory
EXP_DIR="${YOUR_EXP_DIR}"
HF_ACCESS_TOKEN="${YOUR_HF_TOKEN}"
HF_MODEL_NAME_OR_PATH="${HF_MODEL_NAME_OR_PATH}"
BETA="${BETA}"
LABEL_SMOOTHING="${LABEL_SMOOTHING}"

# Add hf_model_name_or_path and turn off synthetic_data
HYDRA_FULL_ERROR=1 python3 ${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py \
recipes=fine-tuning/llama/hf_llama3_8b_seq8k_gpu_dpo \
base_results_dir=${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results \
recipes.run.name="hf_llama3_dpo" \
recipes.exp_manager.exp_dir="$EXP_DIR" \
recipes.model.data.train_dir="$TRAIN_DIR" \
recipes.model.data.val_dir="$VAL_DIR" \
recipes.model.hf_model_name_or_path="$HF_MODEL_NAME_OR_PATH" \
container="${IMAGE}" \
+cluster.container_mounts.0="/fsx:/fsx" \
recipes.model.hf_access_token="${HF_ACCESS_TOKEN}" \
recipes.dpo.enabled=true \
recipes.dpo.beta="${BETA}" \
recipes.dpo.label_smoothing="${LABEL_SMOOTHING}$" \
```

ランチャースクリプトで必要なパラメータをすべて設定したら、次のコマンドを使用してスクリプトを実行できます。

```
bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_dpo.sh
```

Slurm クラスターの設定に関する詳細は、「[HyperPod Slurm でのトレーニングジョブの実行](cluster-specific-configurations-run-training-job-hyperpod-slurm.md)」を参照してください。