View a markdown version of this page

Trainium Kubernetes 클러스터 사전 훈련 자습서 - Amazon SageMaker AI

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Trainium Kubernetes 클러스터 사전 훈련 자습서

다음 방법 중 하나를 사용하여 Trainium Kubernetes 클러스터에서 훈련 작업을 시작할 수 있습니다.

사전 조건

환경을 설정하기 전에 다음 조건을 충족해야 합니다.

  • HyperPod Trainium Kubernetes 클러스터 설정

  • 공유 스토리지 위치는 Amazon FSx 파일 시스템 또는 클러스터 노드에서 액세스할 수 있는 NFS 시스템일 수 있습니다.

  • 다음 형식 중 하나의 데이터가 있어야 합니다.

    • JSON

    • JSONGZ(압축된 JSON)

    • ARROW

  • (선택 사항) 사전 훈련 또는 미세 조정에 HuggingFace의 모델 가중치를 사용하는 경우 HuggingFace 토큰을 받아야 합니다. 토큰 가져오기에 대한 자세한 내용은 User access tokens 섹션을 참조하세요.

Trainium Kubernetes 환경 설정

Trainium Kubernetes 환경을 설정하려면 다음을 수행합니다.

  1. HuggingFace Llama3-8B Pretraining 자습서에서 Download the dataset부터 시작하는 단계를 완료합니다.

  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: 환경 설정 섹션의 모델 구성

  • (선택 사항) 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: 환경 설정 섹션의 모델 구성

    (선택 사항) 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

작업 STATUS가 Running으로 변경되면 다음 명령을 사용하여 로그를 검사할 수 있습니다.

kubectl logs name_of_pod

kubectl get pods를 실행하면 STATUSCompleted로 전환됩니다.

K8s 클러스터 구성에 대한 자세한 정보는 Trainium Kubernetes 클러스터 사전 훈련 자습서 섹션을 참조하세요.