

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

# Trainium Kubernetes クラスターの事前トレーニングチュートリアル
<a name="sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial"></a>

Trainium Kubernetes クラスターでトレーニングジョブを開始するには、次のいずれかの方法を使用できます。
+ (推奨) [HyperPod コマンドラインツール](https://github.com/aws/sagemaker-hyperpod-cli)
+ NeMo スタイルランチャー

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

## Trainium Kubernetes 環境をセットアップする
<a name="sagemaker-hyperpod-trainium-setup-trainium-kubernetes-environment"></a>

Trainium Kubernetes 環境を設定するには、以下を実行します。

1. **[データセットをダウンロード]** から始まる [HuggingFace Llama3-8B 事前トレーニング](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/libraries/nxd-training/tutorials/hf_llama3_8B_pretraining.html#download-the-dataset)のチュートリアルの手順を実行します。

1. モデルの設定を準備します。これは、Neuron レポジトリで取得できます。このチュートリアルでは、llama3 8b モデル設定を使用できます。

1. 仮想環境のセットアップ。Python 3.9 以降を使用していることを確認します。

   ```
   python3 -m venv ${PWD}/venv
   source venv/bin/activate
   ```

1. 依存関係をインストールする
   + (推奨) 次の HyperPod コマンドラインツールを使用します。

     ```
     # install HyperPod command line tools
     git clone https://github.com/aws/sagemaker-hyperpod-cli
     cd sagemaker-hyperpod-cli
     pip3 install .
     ```
   + SageMaker HyperPod レシピを使用している場合は、以下を指定します。

     ```
     # install SageMaker HyperPod Recipes.
     git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git
     cd sagemaker-hyperpod-recipes
     pip3 install -r requirements.txt
     ```

1. [kubectl と eksctl のセットアップ](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)

1. [Helm をインストールする](https://helm.sh/docs/intro/install/)

1. Kubernetes クラスターに接続する

   ```
   aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}"
   hyperpod connect-cluster --cluster-name "${CLUSTER_NAME}" [--region "${CLUSTER_REGION}"] [--namespace <namespace>]
   ```

1. コンテナ: [Neuron コンテナ](https://github.com/aws-neuron/deep-learning-containers?tab=readme-ov-file#pytorch-training-neuronx)

## SageMaker HyperPod CLI を使用してトレーニングジョブを起動する
<a name="sagemaker-hyperpod-trainium-launch-training-job-cli"></a>

SageMaker HyperPod コマンドラインインターフェイス (CLI) ツールを使用して、設定でトレーニングジョブを送信することをお勧めします。次の例では、`hf_llama3_8b_seq8k_trn1x4_pretrain` Trainium モデルのトレーニングジョブを送信します。
+ `your_neuron_container`: [Neuron コンテナ](https://github.com/aws-neuron/deep-learning-containers?tab=readme-ov-file#pytorch-training-neuronx)
+ `your_model_config`: 環境設定セクションのモデル設定
+ (オプション) 次の key-value ペアを設定することで、HuggingFace から事前トレーニング済みの重みが必要な場合は、HuggingFace トークンを指定できます。

  ```
  "recipes.model.hf_access_token": "{{<your_hf_token>}}"
  ```

```
hyperpod start-job --recipe training/llama/hf_llama3_8b_seq8k_trn1x4_pretrain \
--persistent-volume-claims fsx-claim:data \
--override-parameters \
'{
 "cluster": "k8s",
 "cluster_type": "k8s",
 "container": "{{<your_neuron_contrainer>}}",
 "recipes.run.name": "hf-llama3",
 "recipes.run.compile": 0,
 "recipes.model.model_config": "{{<your_model_config>}}",
 "instance_type": "trn1.32xlarge",
 "recipes.data.train_dir": "{{<your_train_data_dir>}}"
}'
```

トレーニングジョブを送信したら、次のコマンドを使用して、送信が正常に完了したかどうかを確認できます。

```
kubectl get pods
NAME                              READY   STATUS             RESTARTS        AGE
hf-llama3-<your-alias>-worker-0   0/1     running         0               36s
```

`STATUS` が `PENDING` または `ContainerCreating` の場合は、以下のコマンドを実行して詳細を取得します。

```
kubectl describe pod {{name_of_pod}}
```

ジョブの `STATUS` が `Running` に変わったら、以下のコマンドを使用してログを確認できます。

```
kubectl logs {{name_of_pod}}
```

`kubectl get pods` を実行すると、`STATUS` は `Completed` になります。

## レシピランチャーを使用してトレーニングジョブを起動する
<a name="sagemaker-hyperpod-trainium-launch-training-job-recipes"></a>

または、SageMaker HyperPod レシピを使用してトレーニングジョブを送信できます。レシピを使用してトレーニングジョブを送信するには、`k8s.yaml` と `config.yaml` を更新します。モデルの bash スクリプトを実行して起動します。
+ `k8s.yaml` で persistent\_volume\_claims を更新して、Amazon FSx クレームをコンピューティングノードの /data ディレクトリにマウントします。

  ```
  persistent_volume_claims:
    - claimName: fsx-claim
      mountPath: data
  ```
+ launcher\_scripts/llama/run\_hf\_llama3\_8b\_seq8k\_trn1x4\_pretrain.sh を更新します。
  + `your_neuron_contrainer`: 環境設定セクションのコンテナ
  + `your_model_config`: 環境設定セクションのモデル設定

  (オプション) 次の key-value ペアを設定することで、HuggingFace から事前トレーニング済みの重みが必要な場合は、HuggingFace トークンを指定できます。

  ```
  recipes.model.hf_access_token={{<your_hf_token>}}
  ```

  ```
   #!/bin/bash
  #Users should set up their cluster type in /recipes_collection/config.yaml
  IMAGE="{{<your_neuron_contrainer>}}"
  MODEL_CONFIG="{{<your_model_config>}}"
  SAGEMAKER_TRAINING_LAUNCHER_DIR=${SAGEMAKER_TRAINING_LAUNCHER_DIR:-"$(pwd)"}
  TRAIN_DIR="{{<your_training_data_dir>}}" # Location of training dataset
  VAL_DIR="{{<your_val_data_dir>}}" # Location of talidation dataset
  
  HYDRA_FULL_ERROR=1 python3 "${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py" \
    recipes=training/llama/hf_llama3_8b_seq8k_trn1x4_pretrain \
    base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \
    recipes.run.name="hf-llama3-8b" \
    instance_type=trn1.32xlarge \
    recipes.model.model_config="$MODEL_CONFIG" \
    cluster=k8s \
    cluster_type=k8s \
    container="${IMAGE}" \
    recipes.data.train_dir=$TRAIN_DIR \
    recipes.data.val_dir=$VAL_DIR
  ```
+ ジョブを起動する

  ```
  bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_trn1x4_pretrain.sh
  ```

トレーニングジョブを送信したら、次のコマンドを使用して、送信が正常に完了したかどうかを確認できます。

```
kubectl get pods
NAME                             READY   STATUS             RESTARTS        AGE
hf-llama3-<your-alias>-worker-0   0/1     running         0               36s
```

`STATUS` が `PENDING` または `ContainerCreating` の場合は、以下のコマンドを実行して詳細を取得します。

```
kubectl describe pod {{name_of_pod}}
```

ジョブのステータスが「実行中」に変わったら、以下のコマンドを使用してログを確認できます。

```
kubectl logs {{name_of_pod}}
```

`kubectl get pods` を実行すると、`STATUS` は `Completed` になります。

k8s クラスターの設定に関する詳細については、「[Trainium Kubernetes クラスターの事前トレーニングチュートリアル](#sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial)」を参照してください。