Trainium Kubernetes クラスターの事前トレーニングチュートリアル - Amazon SageMaker AI

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

Trainium Kubernetes クラスターの事前トレーニングチュートリアル

Trainium Kubernetes クラスターでトレーニングジョブを開始するには、次のいずれかの方法を使用できます。

前提条件

環境のセットアップを開始する前に、以下を確認します。

  • HyperPod Trainium Kubernetes クラスターをセットアップする

  • クラスターノードからアクセスできる Amazon FSx ファイルシステムまたは NFS システムである共有ストレージの場所。

  • 以下の形式のいずれか。

    • JSON

    • JSONGZ (圧縮 JSON)

    • ARROW

  • (オプション) HuggingFace のモデル重みを事前トレーニングまたはファインチューニングに使用する場合は、HuggingFace トークンを取得する必要があります。アクセストークンの詳細については、「ユーザーアクセストークン」を参照してください。

Trainium Kubernetes 環境をセットアップする

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

  1. [データセットをダウンロード] から始まる HuggingFace Llama3-8B 事前トレーニングのチュートリアルの手順を実行します。

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

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

    python3 -m venv ${PWD}/venv source venv/bin/activate
  4. 依存関係をインストールする

    • (推奨) 次の 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
  5. kubectl と eksctl のセットアップ

  6. Helm をインストールする

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

    aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}" hyperpod connect-cluster --cluster-name "${CLUSTER_NAME}" [--region "${CLUSTER_REGION}"] [--namespace <namespace>]
  8. コンテナ: Neuron コンテナ

SageMaker HyperPod CLI を使用してトレーニングジョブを起動する

SageMaker HyperPod コマンドラインインターフェイス (CLI) ツールを使用して、設定でトレーニングジョブを送信することをお勧めします。次の例では、hf_llama3_8b_seq8k_trn1x4_pretrain Trainium モデルのトレーニングジョブを送信します。

  • your_neuron_container: Neuron コンテナ

  • 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

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

kubectl describe pod name_of_pod

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

kubectl logs name_of_pod

kubectl get pods を実行すると、STATUSCompleted になります。

レシピランチャーを使用してトレーニングジョブを起動する

または、SageMaker HyperPod レシピを使用してトレーニングジョブを送信できます。レシピを使用してトレーニングジョブを送信するには、k8s.yamlconfig.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

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

kubectl describe pod name_of_pod

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

kubectl logs name_of_pod

kubectl get pods を実行すると、STATUSCompleted になります。

k8s クラスターの設定に関する詳細については、「Trainium Kubernetes クラスターの事前トレーニングチュートリアル」を参照してください。