

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

# 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 토큰을 받아야 합니다. 토큰 가져오기에 대한 자세한 내용은 [User access tokens](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 Pretraining](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/libraries/nxd-training/tutorials/hf_llama3_8B_pretraining.html#download-the-dataset) 자습서에서 **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`: 환경 설정 섹션의 모델 구성
+ (선택 사항) 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`: 환경 설정 섹션의 모델 구성

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

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

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

`kubectl get pods`를 실행하면 `STATUS`가 `Completed`로 전환됩니다.

K8s 클러스터 구성에 대한 자세한 정보는 [Trainium Kubernetes 클러스터 사전 훈련 자습서](#sagemaker-hyperpod-trainium-kubernetes-cluster-pretrain-tutorial) 섹션을 참조하세요.