

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

# SageMaker HyperPod 레시피
<a name="sagemaker-hyperpod-recipes"></a>

Amazon SageMaker HyperPod 레시피는 Llama, Mistral, Mixtral 또는 DeepSeek와 같은 다양한 모델 패밀리에서 공개적으로 사용 가능한 파운데이션 모델(FMs)을 빠르게 훈련하고 미세 조정할 수 AWS 있도록에서 제공하는 사전 구성된 훈련 스택입니다. 레시피는 데이터세트 로드, 분산 훈련 기법 적용, 장애 복구 속도를 높이기 위한 체크포인트 관리 등 엔드투엔드 훈련 루프를 자동화합니다.

SageMaker HyperPod 레시피는 대규모 모델 훈련과 관련된 많은 복잡성을 추상화하므로 기계 학습에 대한 깊이 있는 전문성이 없는 사용자에게 특히 유용합니다.

SageMaker HyperPod 내에서 또는 SageMaker 훈련 작업으로 레시피를 실행할 수 있습니다.

다음 표는 SageMaker HyperPod GitHub 리포지토리에서 유지 관리되며 사전 훈련 및 미세 조정에 지원되는 모델, 해당 레시피 및 시작 스크립트, 지원되는 인스턴스 유형 등에 대한 최신 정보를 제공합니다.
+ 사전 훈련에 지원되는 모델, 레시피 및 시작 스크립트의 최신 목록은 [pre-training table](https://github.com/aws/sagemaker-hyperpod-recipes?tab=readme-ov-file#pre-training)을 참조하세요.
+ 미세 조정 지원되는 모델, 레시피 및 시작 스크립트의 최신 목록은 [fine-tuning table](https://github.com/aws/sagemaker-hyperpod-recipes?tab=readme-ov-file#fine-tuning)을 참조하세요.

SageMaker HyperPod 사용자의 경우 엔드투엔드 훈련 워크플로의 자동화는 훈련 어댑터를 SageMaker HyperPod 레시피와 통합하여 이루어집니다. 훈련 어댑터는 [NVIDIA NeMo 프레임워크](https://docs.nvidia.com/nemo-framework/user-guide/latest/overview.html) 및 [Neuronx Distributed Training 패키지](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/libraries/neuronx-distributed/index.html)를 기반으로 합니다. NeMo 사용에 익숙하다면 훈련 어댑터를 사용하는 프로세스도 동일합니다. 훈련 어댑터는 클러스터에서 레시피를 실행합니다.

![\[SageMaker HyperPod 레시피 워크플로를 보여주는 다이어그램입니다. 상단의 '레시피' 아이콘이 'HyperPod 레시피 런처' 상자에 제공됩니다. 이 상자는 연결된 레시피 파일이 있는 세 개의 GPU 아이콘이 포함된 '클러스터: Slurm, K8s, ...' 레이블이 있는 더 큰 섹션에 연결됩니다. 클러스터 섹션 하단에는 'HyperPod 훈련 어댑터를 사용한 훈련' 레이블이 있습니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/sagemaker-hyperpod-recipes-overview.png)


자체 사용자 지정 레시피를 정의하여 자체 모델을 훈련할 수도 있습니다.

자습서를 시작하려면 [자습서](sagemaker-hyperpod-recipes-tutorials.md) 섹션을 참조하세요.

**Topics**
+ [

# 자습서
](sagemaker-hyperpod-recipes-tutorials.md)
+ [

# 기본 구성
](default-configurations.md)
+ [

# 클러스터에 특화된 구성
](cluster-specific-configurations.md)
+ [

# 고려 사항
](cluster-specific-configurations-special-considerations.md)
+ [

# 고급 설정
](cluster-specific-configurations-advanced-settings.md)
+ [

# 부록
](appendix.md)

# 자습서
<a name="sagemaker-hyperpod-recipes-tutorials"></a>

다음 빠른 시작 자습서는 훈련용 레시피 사용을 시작하는 데 도움이 됩니다.
+ Slurm 오케스트레이션을 사용하는 SageMaker HyperPod
  + 사전 훈련
    + [HyperPod Slurm 클러스터 사전 훈련 자습서(GPU)](hyperpod-gpu-slurm-pretrain-tutorial.md)
    + [Trainium Slurm 클러스터 사전 훈련 자습서](hyperpod-trainium-slurm-cluster-pretrain-tutorial.md)
  + 미세 조정
    + [HyperPod Slurm 클러스터 PEFT-Lora 자습서(GPU)](hyperpod-gpu-slurm-peft-lora-tutorial.md)
    + [HyperPod Slurm 클러스터 DPO 자습서(GPU)](hyperpod-gpu-slurm-dpo-tutorial.md)
+ K8s 오케스트레이션을 사용하는 SageMaker HyperPod
  + 사전 훈련
    + [Kubernetes 클러스터 사전 훈련 자습서(GPU)](sagemaker-hyperpod-gpu-kubernetes-cluster-pretrain-tutorial.md)
    + [Trainium SageMaker 훈련 작업 사전 훈련 자습서](sagemaker-hyperpod-trainium-sagemaker-training-jobs-pretrain-tutorial.md)
+ SageMaker 훈련 작업
  + 사전 훈련
    + [SageMaker 훈련 작업 훈련 전 자습서(GPU)](sagemaker-hyperpod-gpu-sagemaker-training-jobs-pretrain-tutorial.md)
    + [Trainium SageMaker 훈련 작업 사전 훈련 자습서](sagemaker-hyperpod-trainium-sagemaker-training-jobs-pretrain-tutorial.md)

# HyperPod Slurm 클러스터 사전 훈련 자습서(GPU)
<a name="hyperpod-gpu-slurm-pretrain-tutorial"></a>

다음 자습서에서는 Slurm 환경을 설정하고 Llama 80억 파라미터 모델에서 훈련 작업을 시작합니다.

**사전 조건**  
레시피를 실행하도록 환경을 설정하기 전에 다음 조건을 충족해야 합니다.  
HyperPod GPU Slurm 클러스터를 설정합니다.  
HyperPod Slurm 클러스터에는 Nvidia Enroot 및 Pyxis가 활성화되어 있어야 합니다(기본적으로 활성화되어 있음).
공유 스토리지 위치가 있어야 합니다. Amazon FSx 파일 시스템 또는 클러스터 노드에서 액세스할 수 있는 NFS 시스템일 수 있습니다.
다음 형식 중 하나의 데이터가 있어야 합니다.  
JSON
JSONGZ(압축된 JSON)
ARROW
(선택 사항) 사전 훈련 또는 미세 조정에 HuggingFace의 모델 가중치를 사용하는 경우 HuggingFace 토큰을 받아야 합니다. 토큰 가져오기에 대한 자세한 내용은 [User access tokens](https://huggingface.co/docs/hub/en/security-tokens) 섹션을 참조하세요.

## HyperPod GPU Slurm 환경 설정
<a name="hyperpod-gpu-slurm-environment-setup"></a>

HyperPod GPU Slurm 클러스터에서 훈련 작업을 시작하려면 다음을 수행합니다.

1. Slurm 클러스터의 헤드 노드에 SSH로 연결합니다.

1. 로그인한 후 가상 환경을 설정합니다. Python 3.9 이상을 사용하고 있는지 확인합니다.

   ```
   #set up a virtual environment
   python3 -m venv ${PWD}/venv
   source venv/bin/activate
   ```

1. SageMaker HyperPod 레시피와 SageMaker HyperPod 어댑터 리포지토리를 공유 스토리지 위치에 복제합니다.

   ```
   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
   ```

1. Enroot를 사용하여 스쿼시 파일을 생성합니다. SMP 컨테이너의 최신 릴리스를 찾으려면 [SageMaker 모델 병렬 처리 라이브러리 릴리스 노트](model-parallel-release-notes.md) 섹션을 참조하세요. Enroot 파일 사용 방법을 더 깊이 이해하려면 [빌드 AWS최적화 Nemo-Launcher 이미지를](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>"
   ```

1. Enroot 스쿼시 파일을 사용하여 훈련을 시작하려면 다음 예시를 사용하여 `recipes_collection/config.yaml` 파일을 수정합니다.

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

## 훈련 작업 시작
<a name="hyperpod-gpu-slurm-launch-training-job"></a>

종속성을 설치한 후 `sagemaker-hyperpod-recipes/launcher_scripts` 디렉터리에서 훈련 작업을 시작합니다. [SageMaker HyperPod recipes repository](https://github.com/aws/sagemaker-hyperpod-recipes)를 복제하여 종속성을 가져올 수 있습니다.

먼저 Github에서 훈련 레시피를 선택합니다. 모델 이름은 레시피의 일부로 지정됩니다. 다음 예시에서는 `launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh` 스크립트를 사용하여 시퀀스 길이가 8,192인 사전 훈련 레시피인 `llama/hf_llama3_8b_seq16k_gpu_p5x16_pretrain`으로 Llama 8b를 시작합니다.
+ `IMAGE`: 환경 설정 섹션의 컨테이너입니다.
+ (선택 사항) HuggingFace에서 사전 훈련된 가중치가 필요한 경우 다음 키-값 페어를 설정하여 HuggingFace 토큰을 제공할 수 있습니다.

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

```
#!/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 ouput directory
EXP_DIR="${YOUR_EXP_DIR}"

HYDRA_FULL_ERROR=1 python3 "${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py" \
  recipes=training/llama/hf_llama3_8b_seq16k_gpu_p5x16_pretrain \
  base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \
  recipes.run.name="hf_llama3_8b" \
  recipes.exp_manager.exp_dir="$EXP_DIR" \
  recipes.model.data.train_dir="$TRAIN_DIR" \
  recipes.model.data.val_dir="$VAL_DIR" \
  container="${IMAGE}" \
  +cluster.container_mounts.0="/fsx:/fsx"
```

런처 스크립트에서 필요한 모든 파라미터를 구성한 후 다음 명령을 사용하여 스크립트를 실행할 수 있습니다.

```
bash launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh
```

Slurm 클러스터 구성에 대한 자세한 정보는 [HyperPod Slurm에서 훈련 작업 실행](cluster-specific-configurations-run-training-job-hyperpod-slurm.md) 섹션을 참조하세요.

# Trainium Slurm 클러스터 사전 훈련 자습서
<a name="hyperpod-trainium-slurm-cluster-pretrain-tutorial"></a>

다음 자습서에서는 Slurm 클러스터에서 Trainium 환경을 설정하고 Llama 80억 파라미터 모델에서 훈련 작업을 시작합니다.

**사전 조건**  
환경을 설정하기 전에 다음 조건을 충족해야 합니다.  
SageMaker HyperPod Trainium Slurm 클러스터를 설정합니다.
공유 스토리지 위치가 있어야 합니다. Amazon FSx 파일 시스템 또는 클러스터 노드에서 액세스할 수 있는 NFS 시스템일 수 있습니다.
다음 형식 중 하나의 데이터가 있어야 합니다.  
JSON
JSONGZ(압축된 JSON)
ARROW
(선택 사항) 사전 훈련 또는 미세 조정에 HuggingFace의 모델 가중치를 사용하는 경우 HuggingFace 토큰을 받아야 합니다. 토큰 가져오기에 대한 자세한 내용은 [User access tokens](https://huggingface.co/docs/hub/en/security-tokens) 섹션을 참조하세요.

## Slurm 클러스터에서 Trainium 환경 설정
<a name="hyperpod-trainium-slurm-cluster-pretrain-setup-trainium-environment"></a>

Slurm 클러스터에서 훈련 작업을 시작하려면 다음을 수행합니다.
+ Slurm 클러스터의 헤드 노드에 SSH로 연결합니다.
+ 로그인한 후 Neuron 환경을 설정합니다. Neuron 설정에 대한 자세한 내용은 [Neuron setup steps](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/libraries/nxd-training/tutorials/hf_llama3_8B_SFT.html#setting-up-the-environment)을 참조하세요. [Ubuntu 20 with DLAMI Pytorch](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/setup/neuron-setup/pytorch/neuronx/ubuntu/torch-neuronx-ubuntu20-pytorch-dlami.html#setup-torch-neuronx-ubuntu20-dlami-pytorch)와 같은 Neuron 드라이버가 사전 설치된 딥 러닝 AMI를 사용하는 것이 좋습니다.
+ SageMaker HyperPod 레시피 리포지토리를 클러스터의 공유 스토리지 위치에 복제합니다. 공유 스토리지 위치는 Amazon FSx 파일 시스템 또는 클러스터 노드에서 액세스할 수 있는 NFS 시스템일 수 있습니다.

  ```
  git clone --recursive https://github.com/aws/sagemaker-hyperpod-recipes.git
  cd sagemaker-hyperpod-recipes
  pip3 install -r requirements.txt
  ```
+ [HuggingFace Llama3-8B Pretraining](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/libraries/nxd-training/tutorials/hf_llama3_8B_pretraining.html#) 자습서를 살펴봅니다.
+ 모델 구성을 준비합니다. Neuron 리포지토리에서 사용할 수 있는 모델 구성입니다. 이 자습서에서 사용된 모델 구성은 [llama3 8b model config](https://github.com/aws-neuron/neuronx-distributed/blob/main/examples/training/llama/tp_zero1_llama_hf_pretrain/8B_config_llama3/config.json)를 참조하세요.

## Trainium에서 훈련 작업 시작
<a name="hyperpod-trainium-slurm-cluster-pretrain-launch-training-job-trainium"></a>

Trainium에서 훈련 작업을 시작하려면 클러스터 구성과 Neuron 레시피를 지정합니다. 예를 들어 Trainium에서 llama3 8b 사전 훈련 작업을 시작하려면 시작 스크립트인 `launcher_scripts/llama/run_hf_llama3_8b_seq8k_trn1x4_pretrain.sh`를 다음과 같이 설정합니다.
+ `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

SAGEMAKER_TRAINING_LAUNCHER_DIR=${SAGEMAKER_TRAINING_LAUNCHER_DIR:-"$(pwd)"}

COMPILE=0
TRAIN_DIR="${TRAIN_DIR}" # Location of training dataset
MODEL_CONFIG="${MODEL_CONFIG}" # Location of config.json for the model

HYDRA_FULL_ERROR=1 python3 "${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py" \
    base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \
    instance_type="trn1.32xlarge" \
    recipes.run.compile="$COMPILE" \
    recipes.run.name="hf-llama3-8b" \
    recipes.trainer.num_nodes=4 \
    recipes=training/llama/hf_llama3_8b_seq8k_trn1x4_pretrain \
    recipes.data.train_dir="$TRAIN_DIR" \
    recipes.model.model_config="$MODEL_CONFIG"
```

훈련 작업을 실행하려면 다음 명령을 실행합니다.

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

Slurm 클러스터 구성에 대한 자세한 정보는 [HyperPod Slurm에서 훈련 작업 실행](cluster-specific-configurations-run-training-job-hyperpod-slurm.md) 섹션을 참조하세요.

# 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 토큰을 받아야 합니다. 토큰 가져오기에 대한 자세한 내용은 [User access tokens](https://huggingface.co/docs/hub/en/security-tokens) 섹션을 참조하세요.

## HyperPod GPU Slurm 환경 설정
<a name="hyperpod-gpu-slurm-dpo-hyperpod-gpu-slurm-environment"></a>

Slurm 클러스터에서 훈련 작업을 시작하려면 다음을 수행합니다.
+ 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 파일 사용에 대한 자세한 내용은 [빌드 AWS최적화 Nemo-Launcher 이미지를 참조하세요](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 컴퓨팅 노드에서 시퀀스 길이가 8,192인 Llama 80억 파라미터 모델에 대한 DPO 작업을 시작하려면 시작 스크립트인 `launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_dpo.sh`를 다음과 같이 설정합니다.
+ `IMAGE`: 환경 설정 섹션의 컨테이너입니다.
+ `HF_MODEL_NAME_OR_PATH`: 레시피의 hf\$1model\$1name\$1or\$1path 파라미터에서 사전 훈련된 가중치의 이름 또는 경로를 정의합니다.
+ (선택 사항) 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) 섹션을 참조하세요.

# HyperPod Slurm 클러스터 PEFT-Lora 자습서(GPU)
<a name="hyperpod-gpu-slurm-peft-lora-tutorial"></a>

다음 자습서에서는 Slurm 환경을 설정하고 Llama 80억 파라미터 모델에서 파라미터 효율적인 미세 조정(PEFT) 작업을 시작합니다.

**사전 조건**  
환경을 설정하기 전에 다음 조건을 충족해야 합니다.  
HyperPod GPU Slurm 클러스터 설정  
HyperPod Slurm 클러스터에는 Nvidia Enroot 및 Pyxis가 활성화되어 있어야 합니다(기본적으로 활성화되어 있음).
공유 스토리지 위치가 있어야 합니다. Amazon FSx 파일 시스템 또는 클러스터 노드에서 액세스할 수 있는 NFS 시스템일 수 있습니다.
다음 형식 중 하나의 데이터가 있어야 합니다.  
JSON
JSONGZ(압축된 JSON)
ARROW
(선택 사항) HuggingFace에서 사전 훈련된 가중치가 필요하거나 Llama 3.2 모델을 훈련하는 경우 훈련을 시작하기 전에 HuggingFace 토큰을 받아야 합니다. 토큰 가져오기에 대한 자세한 내용은 [User access tokens](https://huggingface.co/docs/hub/en/security-tokens) 섹션을 참조하세요.

## HyperPod GPU Slurm 환경 설정
<a name="hyperpod-gpu-slurm-peft-lora-setup-hyperpod-gpu-slurm-environment"></a>

Slurm 클러스터에서 훈련 작업을 시작하려면 다음을 수행합니다.
+ 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 파일 사용에 대한 자세한 내용은 [빌드 AWS최적화 Nemo-Launcher 이미지를 참조하세요](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-peft-lora-launch-training-job"></a>

단일 Slurm 컴퓨팅 노드에서 시퀀스 길이가 8,192인 Llama 80억 파라미터 모델에 대한 PEFT 작업을 시작하려면 시작 스크립트인 `launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_lora.sh`를 다음과 같이 설정합니다.
+ `IMAGE`: 환경 설정 섹션의 컨테이너입니다.
+ `HF_MODEL_NAME_OR_PATH`: 레시피의 hf\$1model\$1name\$1or\$1path 파라미터에서 사전 훈련된 가중치의 이름 또는 경로를 정의합니다.
+ (선택 사항) HuggingFace에서 사전 훈련된 가중치가 필요한 경우 다음 키-값 페어를 설정하여 HuggingFace 토큰을 제공할 수 있습니다.

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

```
#!/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="${YOUR_HF_MODEL_NAME_OR_PATH}"

# 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_lora \
    base_results_dir=${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results \
    recipes.run.name="hf_llama3_lora" \
    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}"
```

이전 스크립트에서 필요한 모든 파라미터를 구성한 후 이를 실행하여 훈련 작업을 시작할 수 있습니다.

```
bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_lora.sh
```

Slurm 클러스터 구성에 대한 자세한 정보는 [HyperPod Slurm에서 훈련 작업 실행](cluster-specific-configurations-run-training-job-hyperpod-slurm.md) 섹션을 참조하세요.

# Kubernetes 클러스터 사전 훈련 자습서(GPU)
<a name="sagemaker-hyperpod-gpu-kubernetes-cluster-pretrain-tutorial"></a>

GPU Kubernetes 클러스터에서 훈련 작업을 시작하는 방법에는 두 가지가 있습니다.
+ (권장) [HyperPod 명령줄 도구](https://github.com/aws/sagemaker-hyperpod-cli)
+ NeMo 스타일 런처

**사전 조건**  
환경을 설정하기 전에 다음 조건을 충족해야 합니다.  
HyperPod GPU Kubernetes 클러스터가 올바르게 설정되어 있어야 합니다.
공유 스토리지 위치가 있어야 합니다. Amazon FSx 파일 시스템 또는 클러스터 노드에서 액세스할 수 있는 NFS 시스템일 수 있습니다.
다음 형식 중 하나의 데이터가 있어야 합니다.  
JSON
JSONGZ(압축된 JSON)
ARROW
(선택 사항) 사전 훈련 또는 미세 조정에 HuggingFace의 모델 가중치를 사용하는 경우 HuggingFace 토큰을 받아야 합니다. 토큰 가져오기에 대한 자세한 내용은 [User access tokens](https://huggingface.co/docs/hub/en/security-tokens) 섹션을 참조하세요.

## GPU Kubernetes 환경 설정
<a name="sagemaker-hyperpod-gpu-kubernetes-environment-setup"></a>

GPU Kubernetes 환경을 설정하려면 다음을 수행합니다.
+ 가상 환경을 설정합니다. Python 3.9 이상을 사용하고 있는지 확인합니다.

  ```
  python3 -m venv ${PWD}/venv
  source venv/bin/activate
  ```
+ 다음 방법 중 하나를 사용하여 종속성을 설치합니다.
  + (권장): [HyperPod 명령줄 도구](https://github.com/aws/sagemaker-hyperpod-cli) 방법:

    ```
    # 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
    ```
+ [kubectl 및 eksctl 설정](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ [Helm 설치](https://helm.sh/docs/intro/install/)
+ Kubernetes 클러스터에 연결합니다.

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

## SageMaker HyperPod CLI를 사용하여 훈련 작업 시작
<a name="sagemaker-hyperpod-gpu-kubernetes-launch-training-job-cli"></a>

SageMaker HyperPod 명령줄 인터페이스(CLI) 도구를 사용하여 구성과 함께 훈련 작업을 제출하는 것이 좋습니다. 다음 예시에서는 `hf_llama3_8b_seq16k_gpu_p5x16_pretrain` 모델에 대한 훈련 작업을 제출합니다.
+ `your_training_container`: 딥 러닝 컨테이너. SMP 컨테이너의 최신 릴리스를 찾으려면 [SageMaker 모델 병렬 처리 라이브러리 릴리스 노트](model-parallel-release-notes.md) 섹션을 참조하세요.
+ (선택 사항) HuggingFace에서 사전 훈련된 가중치가 필요한 경우 다음 키-값 페어를 설정하여 HuggingFace 토큰을 제공할 수 있습니다.

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

```
hyperpod start-job --recipe training/llama/hf_llama3_8b_seq16k_gpu_p5x16_pretrain \
--persistent-volume-claims fsx-claim:data \
--override-parameters \
'{
"recipes.run.name": "hf-llama3-8b",
"recipes.exp_manager.exp_dir": "/data/<your_exp_dir>",
"container": "658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121",
"recipes.model.data.train_dir": "<your_train_data_dir>",
"recipes.model.data.val_dir": "<your_val_data_dir>",
"cluster": "k8s",
"cluster_type": "k8s"
}'
```

훈련 작업을 제출한 후 다음 명령을 사용하여 성공적으로 제출했는지 확인할 수 있습니다.

```
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
```

`STATUS`는 `kubectl get pods`를 실행할 때 `Completed`가 됩니다.

## 레시피 런처를 사용하여 훈련 작업 시작
<a name="sagemaker-hyperpod-gpu-kubernetes-launch-training-job-recipes"></a>

또는 SageMaker HyperPod 레시피를 사용하여 훈련 작업을 제출할 수 있습니다. 레시피를 사용하려면 `k8s.yaml`, `config.yaml`을 업데이트하고 시작 스크립트를 실행해야 합니다.
+ `k8s.yaml`에서 `persistent_volume_claims`을 업데이트합니다. 그러면 Amazon FSx 클레임을 각 컴퓨팅 포드의 `/data` 디렉터리에 탑재합니다.

  ```
  persistent_volume_claims:
    - claimName: fsx-claim
      mountPath: data
  ```
+ `config.yaml`에서 `git` 밑의 `repo_url_or_path`를 업데이트합니다.

  ```
  git:
    repo_url_or_path: <training_adapter_repo>
    branch: null
    commit: null
    entry_script: null
    token: null
  ```
+ `launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_pretrain.sh` 업데이트
  + `your_contrainer`: 딥 러닝 컨테이너. SMP 컨테이너의 최신 릴리스를 찾으려면 [SageMaker 모델 병렬 처리 라이브러리 릴리스 노트](model-parallel-release-notes.md) 섹션을 참조하세요.
  + (선택 사항) HuggingFace에서 사전 훈련된 가중치가 필요한 경우 다음 키-값 페어를 설정하여 HuggingFace 토큰을 제공할 수 있습니다.

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

  ```
  #!/bin/bash
  #Users should setup their cluster type in /recipes_collection/config.yaml
  REGION="<region>"
  IMAGE="658645717510.dkr.ecr.${REGION}.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121"
  SAGEMAKER_TRAINING_LAUNCHER_DIR=${SAGEMAKER_TRAINING_LAUNCHER_DIR:-"$(pwd)"}
  EXP_DIR="<your_exp_dir>" # Location to save experiment info including logging, checkpoints, ect
  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_gpu_p5x16_pretrain \
      base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \
      recipes.run.name="hf-llama3" \
      recipes.exp_manager.exp_dir="$EXP_DIR" \
      cluster=k8s \
      cluster_type=k8s \
      container="${IMAGE}" \
      recipes.model.data.train_dir=$TRAIN_DIR \
      recipes.model.data.val_dir=$VAL_DIR
  ```
+ 훈련 작업 시작

  ```
  bash launcher_scripts/llama/run_hf_llama3_8b_seq16k_gpu_p5x16_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 클러스터 구성에 대한 자세한 정보는 [HyperPod K8s에서 훈련 작업 실행](cluster-specific-configurations-run-training-job-hyperpod-k8s.md) 섹션을 참조하세요.

# 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\$1volume\$1claims을 업데이트하여 Amazon FSx 클레임을 컴퓨팅 노드의 /data 디렉터리에 탑재합니다.

  ```
  persistent_volume_claims:
    - claimName: fsx-claim
      mountPath: data
  ```
+ launcher\$1scripts/llama/run\$1hf\$1llama3\$18b\$1seq8k\$1trn1x4\$1pretrain.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) 섹션을 참조하세요.

# SageMaker 훈련 작업 훈련 전 자습서(GPU)
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-pretrain-tutorial"></a>

이 자습서에서는 GPU 인스턴스에서 SageMaker 훈련 작업을 사용하여 사전 훈련 작업을 설정하고 실행하는 프로세스를 안내합니다.
+ 환경 설정
+ SageMaker HyperPod 레시피를 사용하여 훈련 작업 시작

시작하기 전에 다음 사전 조건을 충족하는지 확인합니다.

**사전 조건**  
환경을 설정하기 전에 다음 조건을 충족해야 합니다.  
데이터를 로드하고 훈련 아티팩트를 출력할 수 있는 Amazon FSx 파일 시스템 또는 Amazon S3 버킷이 있어야 합니다.
Amazon SageMaker AI에서 1x ml.p4d.24xlarge 및 1x ml.p5.48xlarge에 대한 서비스 할당량을 요청한 상태여야 합니다. 서비스 할당량 증가를 요청하려면 다음을 수행합니다.  
 AWS Service Quotas 콘솔에서 서비스로 이동합니다 AWS .
**Amazon SageMaker AI**를 선택합니다.
ml.p4d.24xlarge 인스턴스 하나와 ml.p5.48xlarge 인스턴스 하나를 선택합니다.
다음 관리형 정책을 사용하여 AWS Identity and Access Management(IAM) 역할을 생성하여 SageMaker AI에 예제를 실행할 수 있는 권한을 부여합니다.  
AmazonSageMakerFullAccess
AmazonEC2FullAccess
다음 형식 중 하나의 데이터가 있어야 합니다.  
JSON
JSONGZ(압축된 JSON)
ARROW
(선택 사항) 사전 훈련 또는 미세 조정에 HuggingFace의 모델 가중치를 사용하는 경우 HuggingFace 토큰을 받아야 합니다. 토큰 가져오기에 대한 자세한 내용은 [User access tokens](https://huggingface.co/docs/hub/en/security-tokens) 섹션을 참조하세요.

## GPU SageMaker 훈련 작업 환경 설정
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-environment-setup"></a>

SageMaker 훈련 작업을 실행하기 전에 `aws configure` 명령을 실행하여 AWS 자격 증명과 기본 리전을 구성합니다. 구성 명령의 대안으로 `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN.`과 같은 환경 변수를 통해 자격 증명을 제공할 수 있습니다. 자세한 내용은 [SageMaker AI Python SDK](https://github.com/aws/sagemaker-python-sdk)를 참조하세요.

SageMaker AI JupyterLab에서 SageMaker AI Jupyter Notebook을 사용하여 SageMaker 훈련 작업을 시작하는 것이 좋습니다. 자세한 내용은 [SageMaker JupyterLab](studio-updated-jl.md) 단원을 참조하십시오.
+ (선택 사항) 가상 환경 및 종속성을 설정합니다. Amazon SageMaker Studio에서 Jupyter Notebook을 사용하는 경우 이 단계를 건너뛸 수 있습니다. Python 3.9 이상을 사용하고 있는지 확인합니다.

  ```
  # set up a virtual environment
  python3 -m venv ${PWD}/venv
  source venv/bin/activate
  # install dependencies after git clone.
  
  git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git
  cd sagemaker-hyperpod-recipes
  pip3 install -r requirements.txt
  # Set the aws region.
  
  aws configure set <your_region>
  ```
+ SageMaker AI Python SDK를 설치합니다.

  ```
  pip3 install --upgrade sagemaker
  ```
+ `Container`: GPU 컨테이너는 SageMaker AI Python SDK에 의해 자동으로 설정됩니다. 자체 컨테이너를 제공할 수도 있습니다.
**참고**  
Llama 3.2 다중 모달 훈련 작업을 실행하는 경우 `transformers` 버전은 `4.45.2 `이상이어야 합니다.

  SageMaker AI Python SDK를 사용하는 경우에만 `source_dir`에서 `requirements.txt`에 `transformers==4.45.2`를 추가합니다. 예를 들어 SageMaker AI JupyterLab의 노트북에서 사용하는 경우 추가합니다.

  HyperPod 레시피로 클러스터 유형 `sm_jobs`을 사용하여 시작하는 경우 자동으로 추가됩니다.

## Jupyter Notebook을 사용하여 훈련 작업 시작
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-launch-training-job-notebook"></a>

다음 Python 코드를 사용하여 레시피로 SageMaker 훈련 작업을 실행할 수 있습니다. [SageMaker AI Python SDK](https://sagemaker.readthedocs.io/en/stable/)의 PyTorch 예측기를 활용하여 레시피를 제출합니다. 다음 예시에서는 SageMaker AI Training 플랫폼에서 llama3-8b 레시피를 시작합니다.

```
import os
import sagemaker,boto3
from sagemaker.debugger import TensorBoardOutputConfig

from sagemaker.pytorch import PyTorch

sagemaker_session = sagemaker.Session()
role = sagemaker.get_execution_role()

bucket = sagemaker_session.default_bucket() 
output = os.path.join(f"s3://{bucket}", "output")
output_path = "<s3-URI>"

overrides = {
    "run": {
        "results_dir": "/opt/ml/model",
    },
    "exp_manager": {
        "exp_dir": "",
        "explicit_log_dir": "/opt/ml/output/tensorboard",
        "checkpoint_dir": "/opt/ml/checkpoints",
    },   
    "model": {
        "data": {
            "train_dir": "/opt/ml/input/data/train",
            "val_dir": "/opt/ml/input/data/val",
        },
    },
}

tensorboard_output_config = TensorBoardOutputConfig(
    s3_output_path=os.path.join(output, 'tensorboard'),
    container_local_output_path=overrides["exp_manager"]["explicit_log_dir"]
)

estimator = PyTorch(
    output_path=output_path,
    base_job_name=f"llama-recipe",
    role=role,
    instance_type="ml.p5.48xlarge",
    training_recipe="training/llama/hf_llama3_8b_seq8k_gpu_p5x16_pretrain",
    recipe_overrides=recipe_overrides,
    sagemaker_session=sagemaker_session,
    tensorboard_output_config=tensorboard_output_config,
)

estimator.fit(inputs={"train": "s3 or fsx input", "val": "s3 or fsx input"}, wait=True)
```

앞의 코드는 훈련 레시피를 사용하여 PyTorch 예측기 객체를 생성한 다음 `fit()` 메서드를 사용하여 모델에 맞춥니다. training\$1recipe 파라미터를 사용하여 훈련에 사용할 레시피를 지정합니다.

**참고**  
Llama 3.2 다중 모달 훈련 작업을 실행하는 경우 transformers 버전은 4.45.2 이상이어야 합니다.

SageMaker AI Python SDK를 직접 사용하는 경우에만 `source_dir`에서 `requirements.txt`에 `transformers==4.45.2`를 추가합니다. 예를 들어 Jupyter Notebook을 사용할 때는 텍스트 파일에 버전을 추가해야 합니다.

SageMaker 훈련 작업에 대한 엔드포인트를 배포할 때는 사용 중인 이미지 URI를 지정해야 합니다. 이미지 URI를 제공하지 않으면 예측기는 훈련 이미지를 배포용 이미지로 사용합니다. SageMaker HyperPod가 제공하는 훈련 이미지에는 추론 및 배포에 필요한 종속성이 포함되어 있지 않습니다. 다음은 배포에 추론 이미지를 사용하는 방법의 예입니다.

```
from sagemaker import image_uris
container=image_uris.retrieve(framework='pytorch',region='us-west-2',version='2.0',py_version='py310',image_scope='inference', instance_type='ml.p4d.24xlarge')
predictor = estimator.deploy(initial_instance_count=1,instance_type='ml.p4d.24xlarge',image_uri=container)
```

**참고**  
Sagemaker 노트북 인스턴스에서 이전 코드를 실행하려면 SageMaker AI JupyterLab에서 제공하는 기본 5GB보다 더 큰 스토리지가 필요할 수 있습니다. 스페이스를 사용할 수 없는 문제가 발생하는 경우 다른 노트북 인스턴스를 사용하는 새 노트북 인스턴스를 생성하고 노트북의 스토리지를 늘립니다.

## 레시피 런처를 사용하여 훈련 작업 시작
<a name="sagemaker-hyperpod-gpu-sagemaker-training-jobs-launch-training-job-recipes"></a>

`./recipes_collection/cluster/sm_jobs.yaml` 파일을 다음과 같이 업데이트합니다.

```
sm_jobs_config:
  output_path: <s3_output_path>
  tensorboard_config:
    output_path: <s3_output_path>
    container_logs_path: /opt/ml/output/tensorboard  # Path to logs on the container
  wait: True  # Whether to wait for training job to finish
  inputs:  # Inputs to call fit with. Set either s3 or file_system, not both.
    s3:  # Dictionary of channel names and s3 URIs. For GPUs, use channels for train and validation.
      train: <s3_train_data_path>
      val: null
  additional_estimator_kwargs:  # All other additional args to pass to estimator. Must be int, float or string.
    max_run: 180000
    enable_remote_debug: True
  recipe_overrides:
    exp_manager:
      explicit_log_dir: /opt/ml/output/tensorboard
    data:
      train_dir: /opt/ml/input/data/train
    model:
      model_config: /opt/ml/input/data/train/config.json
    compiler_cache_url: "<compiler_cache_url>"
```

`cluster` 및 `cluster_type`에서 `sm_jobs`을 지정하도록 `./recipes_collection/config.yaml`을 업데이트합니다.

```
defaults:
  - _self_
  - cluster: sm_jobs  # set to `slurm`, `k8s` or `sm_jobs`, depending on the desired cluster
  - recipes: training/llama/hf_llama3_8b_seq8k_trn1x4_pretrain
cluster_type: sm_jobs  # bcm, bcp, k8s or sm_jobs. If bcm, k8s or sm_jobs, it must match - cluster above.
```

다음 명령을 사용하여 작업 시작

```
python3 main.py --config-path recipes_collection --config-name config
```

SageMaker 훈련 작업 구성에 대한 자세한 내용은 SageMaker 훈련 작업에서 훈련 작업 실행을 참조하세요.

# Trainium SageMaker 훈련 작업 사전 훈련 자습서
<a name="sagemaker-hyperpod-trainium-sagemaker-training-jobs-pretrain-tutorial"></a>

이 자습서에서는 AWS Trainium 인스턴스에서 SageMaker 훈련 작업을 사용하여 사전 훈련 작업을 설정하고 실행하는 프로세스를 안내합니다.
+ 환경 설정
+ 훈련 작업 시작

시작하기 전에 다음 사전 조건을 충족하는지 확인합니다.

**사전 조건**  
환경을 설정하기 전에 다음 조건을 충족해야 합니다.  
데이터를 로드하고 훈련 아티팩트를 출력할 수 있는 Amazon FSx 파일 시스템 또는 S3 버킷이 있어야 합니다.
Amazon SageMaker AI의 `ml.trn1.32xlarge` 인스턴스에 대한 서비스 할당량을 요청한 상태여야 합니다. 서비스 할당량 증가를 요청하려면 다음을 수행합니다.  
 AWS Service Quotas 콘솔로 이동합니다.
 AWS 서비스를 선택합니다.
JupyterLab을 선택합니다.
`ml.trn1.32xlarge`에 대해 하나의 인스턴스를 지정합니다.
`AmazonSageMakerFullAccess` 및 `AmazonEC2FullAccess` 관리형 정책을 사용하여 AWS Identity and Access Management (IAM) 역할을 생성합니다. 이러한 정책은 Amazon SageMaker AI에 예시를 실행할 수 있는 권한을 제공합니다.
다음 형식 중 하나의 데이터가 있어야 합니다.  
JSON
JSONGZ(압축된 JSON)
ARROW
(선택 사항) HuggingFace에서 사전 훈련된 가중치가 필요하거나 Llama 3.2 모델을 훈련하는 경우 훈련을 시작하기 전에 HuggingFace 토큰을 받아야 합니다. 토큰 가져오기에 대한 자세한 내용은 [User access tokens](https://huggingface.co/docs/hub/en/security-tokens) 섹션을 참조하세요.

## Trainium SageMaker 훈련 작업을 위한 환경 설정
<a name="sagemaker-hyperpod-trainium-sagemaker-training-jobs-environment-setup"></a>

SageMaker 훈련 작업을 실행하기 전에 `aws configure` 명령을 사용하여 AWS 자격 증명과 기본 리전을 구성합니다. 다른 방법으로, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN`과 같은 환경 변수를 통해 자격 증명을 제공할 수도 있습니다. 자세한 내용은 [SageMaker AI Python SDK](https://github.com/aws/sagemaker-python-sdk)를 참조하세요.

SageMaker AI JupyterLab에서 SageMaker AI Jupyter Notebook을 사용하여 SageMaker 훈련 작업을 시작하는 것이 좋습니다. 자세한 내용은 [SageMaker JupyterLab](studio-updated-jl.md) 단원을 참조하십시오.
+ (선택 사항) Amazon SageMaker Studio에서 Jupyter Notebook을 사용하는 경우 다음 명령 실행을 건너뛸 수 있습니다. Python 3.9 이상의 버전을 사용해야 합니다.

  ```
  # set up a virtual environment
  python3 -m venv ${PWD}/venv
  source venv/bin/activate
  # install dependencies after git clone.
  
  git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git
  cd sagemaker-hyperpod-recipes
  pip3 install -r requirements.txt
  ```
+ SageMaker AI Python SDK를 설치합니다.

  ```
  pip3 install --upgrade sagemaker
  ```
+ 
  + llama 3.2 다중 모달 훈련 작업을 실행하는 경우 `transformers` 버전은 `4.45.2` 이상이어야 합니다.
    + SageMaker AI Python SDK를 사용하는 경우에만 source\$1dir에서 `requirements.txt`에 `transformers==4.45.2`를 추가합니다.
    + HyperPod 레시피를 사용하고 클러스터 유형으로 `sm_jobs`을 사용하여 시작하는 경우 트랜스포머 버전을 지정할 필요가 없습니다.
  + `Container`: Neuron 컨테이너는 SageMaker AI Python SDK에 의해 자동으로 설정됩니다.

## Jupyter Notebook을 사용하여 훈련 작업 시작
<a name="sagemaker-hyperpod-trainium-sagemaker-training-jobs-launch-training-job-notebook"></a>

다음 Python 코드를 사용하여 레시피로 SageMaker 훈련 작업을 실행할 수 있습니다. [SageMaker AI Python SDK](https://sagemaker.readthedocs.io/en/stable/)의 PyTorch 예측기를 활용하여 레시피를 제출합니다. 다음 예시에서는 llama3-8b 레시피를 SageMaker AI Training 작업으로 시작합니다.
+ `compiler_cache_url`: Amazon S3 아티팩트와 같은 컴파일된 아티팩트를 저장하는 데 사용되는 캐시입니다.

```
import os
import sagemaker,boto3
from sagemaker.debugger import TensorBoardOutputConfig

from sagemaker.pytorch import PyTorch

sagemaker_session = sagemaker.Session()
role = sagemaker.get_execution_role()

recipe_overrides = {
    "run": {
        "results_dir": "/opt/ml/model",
    },
    "exp_manager": {
        "explicit_log_dir": "/opt/ml/output/tensorboard",
    },
    "data": {
        "train_dir": "/opt/ml/input/data/train",
    },
    "model": {
        "model_config": "/opt/ml/input/data/train/config.json",
    },
    "compiler_cache_url": "<compiler_cache_url>"
} 

tensorboard_output_config = TensorBoardOutputConfig(
    s3_output_path=os.path.join(output, 'tensorboard'),
    container_local_output_path=overrides["exp_manager"]["explicit_log_dir"]
)

estimator = PyTorch(
    output_path=output_path,
    base_job_name=f"llama-trn",
    role=role,
    instance_type="ml.trn1.32xlarge",
    sagemaker_session=sagemaker_session,
    training_recipe="training/llama/hf_llama3_70b_seq8k_trn1x16_pretrain",
    recipe_overrides=recipe_overrides,
)

estimator.fit(inputs={"train": "your-inputs"}, wait=True)
```

앞의 코드는 훈련 레시피를 사용하여 PyTorch 예측기 객체를 생성한 다음 `fit()` 메서드를 사용하여 모델에 맞춥니다. `training_recipe` 파라미터를 사용하여 훈련에 사용할 레시피를 지정합니다.

## 레시피 런처를 사용하여 훈련 작업 시작
<a name="sagemaker-hyperpod-trainium-sagemaker-training-jobs-launch-training-job-recipes"></a>
+ `./recipes_collection/cluster/sm_jobs.yaml` 업데이트
  + compiler\$1cache\$1url: 아티팩트를 저장하는 데 사용되는 URL입니다. Amazon S3 URL일 수 있습니다.

  ```
  sm_jobs_config:
    output_path: <s3_output_path>
    wait: True
    tensorboard_config:
      output_path: <s3_output_path>
      container_logs_path: /opt/ml/output/tensorboard  # Path to logs on the container
    wait: True  # Whether to wait for training job to finish
    inputs:  # Inputs to call fit with. Set either s3 or file_system, not both.
      s3:  # Dictionary of channel names and s3 URIs. For GPUs, use channels for train and validation.
        train: <s3_train_data_path>
        val: null
    additional_estimator_kwargs:  # All other additional args to pass to estimator. Must be int, float or string.
      max_run: 180000
      image_uri: <your_image_uri>
      enable_remote_debug: True
      py_version: py39
    recipe_overrides:
      model:
        exp_manager:
          exp_dir: <exp_dir>
        data:
          train_dir: /opt/ml/input/data/train
          val_dir: /opt/ml/input/data/val
  ```
+ `./recipes_collection/config.yaml` 업데이트

  ```
  defaults:
    - _self_
    - cluster: sm_jobs
    - recipes: training/llama/hf_llama3_8b_seq8k_trn1x4_pretrain
  cluster_type: sm_jobs # bcm, bcp, k8s or sm_jobs. If bcm, k8s or sm_jobs, it must match - cluster above.
  
  instance_type: ml.trn1.32xlarge
  base_results_dir: ~/sm_job/hf_llama3_8B # Location to store the results, checkpoints and logs.
  ```
+ `main.py`를 사용하여 작업 시작

  ```
  python3 main.py --config-path recipes_collection --config-name config
  ```

SageMaker 훈련 작업을 구성하는 방법에 대한 자세한 내용은 [SageMaker 훈련 작업 훈련 전 자습서(GPU)](sagemaker-hyperpod-gpu-sagemaker-training-jobs-pretrain-tutorial.md) 섹션을 참조하세요.

# 기본 구성
<a name="default-configurations"></a>

이 섹션에서는 SageMaker HyperPod를 사용하여 대규모 언어 모델(LLM) 훈련 프로세스를 시작하고 사용자 지정하는 데 필요한 필수 구성 요소와 설정을 간략하게 설명합니다. 이 섹션에서는 훈련 작업의 기반을 구성하는 주요 리포지토리, 구성 파일 및 레시피 구조를 다룹니다. 이러한 기본 구성을 이해하는 것은 사전 정의된 레시피를 사용하든 구체적인 요구 사항에 맞게 사용자 지정하든 LLM 훈련 워크플로를 효과적으로 설정하고 관리하는 데 매우 중요합니다.

**Topics**
+ [

# GitHub 리포지토리
](github-repositories.md)
+ [

# 일반 구성
](sagemaker-hyperpod-recipes-general-configuration.md)

# GitHub 리포지토리
<a name="github-repositories"></a>

훈련 작업을 시작하려면 두 개의 서로 다른 GitHub 리포지토리에 있는 파일을 활용합니다.
+ [SageMaker HyperPod recipes](https://github.com/aws/sagemaker-hyperpod-recipes)
+ [SageMaker HyperPod training adapter for NeMo](https://github.com/aws/sagemaker-hyperpod-training-adapter-for-nemo)

이러한 리포지토리에는 대규모 언어 모델(LLM) 훈련 프로세스를 시작, 관리 및 사용자 지정하기 위한 필수 구성 요소가 포함되어 있습니다. 리포지토리의 스크립트를 사용하여 LLM에 대한 훈련 작업을 설정하고 실행합니다.

## HyperPod 레시피 리포지토리
<a name="sagemaker-hyperpod-recipe-repository"></a>

[SageMaker HyperPod recipes](https://github.com/aws/sagemaker-hyperpod-recipes) 리포지토리를 사용하여 레시피를 가져옵니다.

1. `main.py`: 이 파일은 클러스터 또는 SageMaker 훈련 작업에 훈련 작업을 제출하는 프로세스를 시작하기 위한 기본 진입점 역할을 합니다.

1. `launcher_scripts`: 이 디렉터리에는 다양한 대규모 언어 모델(LLM)에 대한 훈련 프로세스를 촉진하기 위해 설계된, 자주 사용되는 스크립트의 모음이 들어 있습니다.

1. `recipes_collection`: 이 폴더에는 개발자가 제공한 사전 정의된 LLM 레시피가 모여 있습니다. 사용자는 사용자 지정 데이터와 함께 이러한 레시피를 활용하여 구체적인 요구 사항에 맞는 LLM 모델을 훈련할 수 있습니다.

SageMaker HyperPod 레시피를 사용하여 훈련 또는 미세 조정 작업을 시작합니다. 사용 중인 클러스터와 관계없이 작업을 제출하는 프로세스는 동일합니다. 예를 들어 동일한 스크립트를 사용하여 Slurm 또는 Kubernetes 클러스터에 작업을 제출할 수 있습니다. 런처는 세 가지 구성 파일을 기반으로 훈련 작업을 디스패치합니다.

1. 일반 구성(`config.yaml`): 훈련 작업에 사용되는 기본 파라미터 또는 환경 변수와 같은 일반적인 설정을 포함합니다.

1. 클러스터 구성(cluster): 클러스터만 사용하는 훈련 작업에 해당합니다. Kubernetes 클러스터에 훈련 작업을 제출하는 경우 볼륨, 레이블 또는 재시작 정책과 같은 정보를 지정해야 할 수 있습니다. Slurm 클러스터의 경우 Slurm 작업 이름을 지정해야 할 수 있습니다. 모든 파라미터는 사용 중인 특정 클러스터와 관련이 있습니다.

1. 레시피(recipes): 레시피에는 모델 유형, 샤딩 수준 또는 데이터세트 경로와 같은 훈련 작업에 대한 설정이 포함됩니다. 예를 들어, Llama를 훈련 모델로 지정하고 8대의 머신에서 모델 또는 Fully Sharded Distributed Parallel(FSDP)과 같은 데이터 병렬화 기법을 사용하여 훈련할 수 있습니다. 훈련 작업에 대해 다른 체크포인트 빈도 또는 경로를 지정할 수도 있습니다.

레시피를 지정한 후 런처 스크립트를 실행하여 `main.py` 진입점을 통한 구성을 기반으로 클러스터에서 엔드투엔드 훈련 작업을 지정합니다. 사용하는 각 레시피에 대해 launch\$1scripts 폴더에 쉘 스크립트가 함께 제공됩니다. 이 예시에서는 훈련 작업을 제출하고 시작하는 방법을 안내합니다. 다음 일러스트레이션은 SageMaker HyperPod 레시피 런처가 위의 내용을 기반으로 훈련 작업을 클러스터에 제출하는 방법을 보여줍니다. 현재 SageMaker HyperPod 레시피 런처는 Nvidia NeMo Framework Launcher를 기반으로 구축되었습니다. 자세한 내용은 [NeMo Launcher Guide](https://docs.nvidia.com/nemo-framework/user-guide/latest/overview.html)를 참조하세요.

![\[HyperPod 레시피 런처 워크플로를 보여주는 다이어그램입니다. 왼쪽의 점선 상자 안에는 '레시피', 'config.yaml', 'slurm.yaml 또는 k8s.yaml 또는 sm_job.yaml(클러스터 구성)'이라는 레이블이 있는 세 개의 파일 아이콘이 있습니다. 화살표는 이 상자에서 'HyperPod 레시피 런처'라는 레이블이 있는 중앙의 상자를 가리킵니다. 이 중앙의 상자에서 하나의 화살표는 오른쪽의 'Training 작업'을 가리키고 화살표 위에 'main.py'라고 써있습니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/sagemaker-hyperpod-recipe-launcher.png)


## HyperPod 레시피 어댑터 리포지토리
<a name="hyperpod-recipe-adapter"></a>

SageMaker HyperPod 훈련 어댑터는 훈련 프레임워크입니다. 이를 사용하여 훈련 작업의 전체 수명 주기를 관리할 수 있습니다. 어댑터를 사용하여 모델의 사전 훈련 또는 미세 조정을 여러 머신에 분산합니다. 어댑터는 다양한 병렬화 기법을 사용하여 훈련을 배포합니다. 또한 체크포인트 저장의 구현 및 관리도 처리합니다. 자세한 내용은 [고급 설정](cluster-specific-configurations-advanced-settings.md) 섹션을 참조하세요.

[SageMaker HyperPod recipe adapter repository](https://github.com/aws/sagemaker-hyperpod-training-adapter-for-nemo)를 사용하여 레시피 어댑터를 사용합니다.

1. `src`: 이 디렉터리에는 모델 병렬화, 혼합 정밀도 훈련 및 체크포인트 관리와 같은 다양한 기능을 포함하는 대규모 언어 모델(LLM) 훈련 구현이 포함되어 있습니다.

1. `examples`: 이 폴더는 LLM 모델 훈련을 위한 진입점을 생성하는 방법을 보여주는 예시 모음을 제공하며, 사용자를 위한 실용적인 가이드 역할을 합니다.

# 일반 구성
<a name="sagemaker-hyperpod-recipes-general-configuration"></a>

config.yaml 파일은 훈련 레시피와 클러스터를 지정합니다. 여기에는 훈련 작업에 대한 환경 변수와 같은 런타임 구성도 포함됩니다.

```
defaults:
  - _self_
  - cluster: slurm 
  - recipes: training/llama/hf_llama3_8b_seq8192_gpu
instance_type: p5.48xlarge
git:
  repo_url_or_path: null
  branch: null
  commit: null
  entry_script: null
  token: null
env_vars:
  NCCL_DEBUG: WARN
```

`config.yaml`에서 다음 파라미터를 수정할 수 있습니다.

1. `defaults`: 기본 클러스터 또는 기본 레시피와 같은 기본 설정을 지정합니다.

1. `instance_type`: 사용 중인 인스턴스 유형과 동일하게 Amazon EC2 인스턴스 유형을 수정합니다.

1. `git`: 훈련 작업을 위한 SageMaker HyperPod 레시피 어댑터 리포지토리의 위치를 지정합니다.

1. `env_vars`: 런타임 훈련 작업에 전달할 환경 변수를 지정할 수 있습니다. 예를 들어 NCCL\$1DEBUG 환경 변수를 지정하여 NCCL의 로깅 수준을 조정할 수 있습니다.

레시피는 훈련 작업 아키텍처를 정의하는 핵심 구성입니다. 이 파일에는 다음과 같이 훈련 작업에 중요한 정보가 많이 포함되어 있습니다.
+ 모델 병렬화 사용 여부
+ 데이터세트의 소스
+ 혼합 정밀도 훈련
+ 체크포인트 관련 구성

레시피를 있는 그대로 사용할 수 있습니다. 다음 정보를 사용하여 수정할 수도 있습니다.

## run
<a name="run"></a>

다음은 훈련 작업을 실행하기 위한 기본 실행 정보입니다.

```
run:
  name: llama-8b
  results_dir: ${base_results_dir}/${.name}
  time_limit: "6-00:00:00"
  model_type: hf
```

1. `name`: 구성 파일에서 훈련 작업의 이름을 지정합니다.

1. `results_dir`: 훈련 작업의 결과가 저장되는 디렉터리를 지정할 수 있습니다.

1. `time_limit`: 훈련 작업에 최대 훈련 시간을 설정하여 하드웨어 리소스를 너무 오래 차지하지 않도록 할 수 있습니다.

1. `model_type`: 사용 중인 모델 유형을 지정할 수 있습니다. 예를 들어 모델이 HuggingFace에서 가져온 것이면 `hf`라고 지정할 수 있습니다.

## exp\$1manager
<a name="exp-manager"></a>

exp\$1manager는 실험을 구성합니다. exp\$1manager를 사용하면 출력 디렉터리 또는 체크포인트 설정과 같은 필드를 지정할 수 있습니다. 다음은 exp\$1manager를 구성하는 방법의 예입니다.

```
exp_manager:
  exp_dir: null
  name: experiment
  create_tensorboard_logger: True
```

1. `exp_dir`: 실험 디렉터리에는 훈련 작업에 대한 표준 출력 및 표준 오류 파일이 포함되어 있습니다. 기본적으로 현재 디렉터리를 사용합니다.

1. `name`: exp\$1dir에서 실험을 식별하는 데 사용되는 실험 이름입니다.

1. `create_tensorboard_logger`: TensorBoard 로거를 활성화하거나 비활성화하려면 `True` 또는 `False`를 지정합니다.

## 체크포인트
<a name="checkpointing"></a>

다음은 지원하는 세 가지 유형의 체크포인트입니다.
+ 자동 체크포인트 지정
+ 수동 체크포인트 지정
+ 전체 체크포인트 지정

### 자동 체크포인트 지정
<a name="auto-checkpointing"></a>

SageMaker HyperPod 레시피 어댑터에 의해 자동으로 관리되는 체크포인트를 저장하거나 로드하는 경우 `auto_checkpoint`를 활성화할 수 있습니다. `auto_checkpoint`를 활성화하려면 `enabled`를 `True`로 설정합니다. 훈련 및 미세 조정 모두에 자동 체크포인트 지정을 사용할 수 있습니다. 공유 파일 시스템과 Amazon S3 모두에 자동 체크포인트 지정을 사용할 수 있습니다.

```
exp_manager
  checkpoint_dir: ${recipes.exp_manager.exp_dir}/checkpoints/
  auto_checkpoint:
    enabled: True
```

자동 체크포인트가 자동으로 계산된 최적의 저장 간격에 따라 비동기적으로 local\$1state\$1dict를 저장하고 있습니다.

**참고**  
이 체크포인트 지정 모드에서는 자동 저장된 체크포인트 지정이 훈련 실행 간 리샤딩을 지원하지 않습니다. 최신 자동 저장된 체크포인트에서 재개하려면 동일한 샤드 수준을 유지해야 합니다. 자동 재개를 위해 추가 정보를 지정할 필요가 없습니다.

### 수동 체크포인트 지정
<a name="manual-checkpointing"></a>

중간 체크포인트를 shared\$1state\$1dict에 비동기적으로 저장하도록 `checkpoint_callback_params`을 수정할 수 있습니다. 예를 들어 다음 구성을 지정하여 10단계마다 샤딩된 체크포인트 지정을 활성화하고 최신 체크포인트 3개를 유지할 수 있습니다.

샤딩된 체크포인트 지정을 사용하면 훈련 실행 간에 샤드 수준을 변경하고 `resume_from_checkpoint`를 설정하여 체크포인트를 로드할 수 있습니다.

**참고**  
PEFT 미세 조정인 경우 샤딩된 체크포인트 지정은 Amazon S3를 지원하지 않습니다.
자동 및 수동 체크포인트 지정은 상호 배타적입니다.
FSDP 샤드 수준 및 복제 수준 변경만 허용됩니다.

```
exp_manager:
  checkpoint_callback_params:
    # Set save_top_k = 0 to disable sharded checkpointing
    save_top_k: 3
    every_n_train_steps: 10
    monitor: "step"
    mode: "max"
    save_last: False
  resume_from_checkpoint: ${recipes.exp_manager.exp_dir}/checkpoints/
```

체크포인트 지정에 대한 자세한 내용은 [SMP를 사용한 체크포인트 지정](model-parallel-core-features-v2-checkpoints.md) 섹션을 참조하세요.

### 전체 체크포인트 지정
<a name="full-checkpointing"></a>

내보낸 full\$1state\$1dict 체크포인트는 추론 또는 미세 조정에 사용할 수 있습니다. hf\$1model\$1name\$1or\$1path를 통해 전체 체크포인트를 로드할 수 있습니다. 이 모드에서는 모델 가중치만 저장됩니다.

full\$1state\$1dict 모델을 내보내려면 다음 파라미터를 설정할 수 있습니다.

**참고**  
현재 Amazon S3 체크포인트 지정에는 전체 체크포인트 지정이 지원되지 않습니다. 전체 체크포인트 지정을 활성화하는 경우 `exp_manager.checkpoint_dir`에 대한 S3 경로를 설정할 수 없습니다. 그러나 `exp_manager.checkpoint_dir`를 Amazon S3 경로로 설정하는 동안 `exp_manager.export_full_model.final_export_dir`를 로컬 파일 시스템의 특정 디렉터리로 설정할 수 있습니다.

```
exp_manager:
  export_full_model:
    # Set every_n_train_steps = 0 to disable full checkpointing
    every_n_train_steps: 0
    save_last: True
    final_export_dir : null
```

## 모델
<a name="model"></a>

모델 아키텍처 및 훈련 프로세스의 다양한 측면을 정의합니다. 여기에는 모델 병렬화, 정밀도 및 데이터 처리에 대한 설정이 포함됩니다. 다음은 모델 섹션에서 구성할 수 있는 주요 구성 요소입니다.

### 모델 병렬화
<a name="model-parallelism"></a>

레시피를 지정한 후 훈련 중인 모델을 정의합니다. 모델 병렬화를 정의할 수도 있습니다. 예를 들어 tensor\$1model\$1parallel\$1degree를 정의할 수 있습니다. FP8 정밀도를 사용한 훈련과 같은 다른 특성을 활성화할 수 있습니다. 예를 들어 텐서 병렬화 및 컨텍스트 병렬화로 모델을 훈련할 수 있습니다.

```
model:
  model_type: llama_v3
  # Base configs
  train_batch_size: 4
  val_batch_size: 1
  seed: 12345
  grad_clip: 1.0

  # Model parallelism
  tensor_model_parallel_degree: 4
  expert_model_parallel_degree: 1
  context_parallel_degree: 2
```

다양한 유형의 모델 병렬화 기법을 더 잘 이해하려면 다음 접근 방식을 참조할 수 있습니다.

1. [텐서 병렬화](model-parallel-core-features-v2-tensor-parallelism.md)

1. [전문가 병렬 처리](model-parallel-core-features-v2-expert-parallelism.md)

1. [컨텍스트 병렬 처리](model-parallel-core-features-v2-context-parallelism.md)

1. [하이브리드 샤딩 데이터 병렬 처리](model-parallel-core-features-v2-sharded-data-parallelism.md)

### FP8
<a name="fp8"></a>

FP8(8비트 부동 소수점 정밀도)을 활성화하려면 다음 예시에서 FP8 관련 구성을 지정할 수 있습니다.

```
model:
  # FP8 config
  fp8: True
  fp8_amax_history_len: 1024
  fp8_amax_compute_algo: max
```

FP8 데이터 형식은 현재 P5 인스턴스 유형에서만 지원된다는 점에 유의해야 합니다. P4와 같은 이전 인스턴스 유형을 사용하는 경우 모델 훈련 프로세스에 대해 FP8 특성을 비활성화하세요. FP8에 대한 자세한 내용은 [혼합 정밀도 훈련](model-parallel-core-features-v2-mixed-precision.md) 섹션을 참조하세요.

### 데이터
<a name="data"></a>

데이터 아래에 데이터 경로를 추가하여 훈련 작업에 대한 사용자 지정 데이터세트를 지정할 수 있습니다. 시스템의 데이터 모듈은 다음 데이터 형식을 지원합니다.

1. JSON

1. JSONGZ(압축된 JSON)

1. ARROW

그러나 사용자는 사전 토큰화된 자체 데이터세트를 준비할 책임이 있습니다. 특정 요구 사항이 있는 고급 사용자인 경우 사용자 지정 데이터 모듈을 구현하고 통합하는 옵션도 있습니다. HuggingFace 데이터세트에 대한 자세한 내용은 [Datasets](https://huggingface.co/docs/datasets/v3.1.0/en/index)를 참조하세요.

```
model:
  data:
    train_dir: /path/to/your/train/data
    val_dir: /path/to/your/val/data
    dataset_type: hf
    use_synthetic_data: False
```

모델을 훈련하는 방법을 지정할 수 있습니다. 기본적으로 레시피는 미세 조정 대신 사전 훈련을 사용합니다. 다음 예시에서는 LoRA(낮은 순위 적응)를 사용하여 미세 조정 작업을 실행하도록 레시피를 구성합니다.

```
model:
  # Fine tuning config
  do_finetune: True
  # The path to resume from, needs to be HF compatible
  hf_model_name_or_path: null
  hf_access_token: null
  # PEFT config
  peft:
    peft_type: lora
    rank: 32
    alpha: 16
    dropout: 0.1
```

레시피에 대한 자세한 내용은 [SageMaker HyperPod recipes](https://github.com/aws/sagemaker-hyperpod-recipes)를 참조하세요.

# 클러스터에 특화된 구성
<a name="cluster-specific-configurations"></a>

SageMaker HyperPod는 다양한 클러스터 환경에서 훈련 작업을 실행할 수 있는 유연성을 제공합니다. 각 환경에는 고유한 구성 요구 사항과 설정 프로세스가 있습니다. 이 섹션에서는 SageMaker HyperPod Slurm, SageMaker HyperPod K8s 및 SageMaker 훈련 작업에서 훈련 작업을 실행하는 데 필요한 단계와 구성을 간략하게 설명합니다. 이러한 구성을 이해하는 것은 선택한 환경에서 분산 훈련의 기능을 효과적으로 활용하는 데 매우 중요합니다.

다음 클러스터 환경에서 레시피를 사용할 수 있습니다.
+ SageMaker HyperPod Slurm 오케스트레이션
+ SageMaker HyperPod Amazon Elastic Kubernetes Service 오케스트레이션
+ SageMaker 훈련 작업

클러스터에서 훈련 작업을 시작하려면 해당 클러스터 구성 및 환경을 설정하고 설치합니다.

**Topics**
+ [

# HyperPod Slurm에서 훈련 작업 실행
](cluster-specific-configurations-run-training-job-hyperpod-slurm.md)
+ [

# HyperPod K8s에서 훈련 작업 실행
](cluster-specific-configurations-run-training-job-hyperpod-k8s.md)
+ [

# SageMaker 훈련 작업 실행
](cluster-specific-configurations-run-sagemaker-training-job.md)

# HyperPod Slurm에서 훈련 작업 실행
<a name="cluster-specific-configurations-run-training-job-hyperpod-slurm"></a>

SageMaker HyperPod 레시피는 GPU/Trainium Slurm 클러스터에 훈련 작업을 제출하는 것을 지원합니다. 훈련 작업을 제출하기 전에 클러스터 구성을 업데이트합니다. 다음 방법 중 하나를 사용하여 클러스터 구성을 업데이트합니다.
+ `slurm.yaml` 수정
+ 명령줄을 통해 재정의

클러스터 구성을 업데이트한 후 환경을 설치합니다.

## 클러스터 구성
<a name="cluster-specific-configurations-configure-cluster-slurm-yaml"></a>

Slurm 클러스터에 훈련 작업을 제출하려면 Slurm에 특화된 구성을 지정합니다. `slurm.yaml`을 수정하여 Slurm 클러스터를 구성합니다. 다음은 Slurm 클러스터 구성의 예시입니다. 자체 훈련 요구 사항에 맞게 이 파일을 수정할 수 있습니다.

```
job_name_prefix: 'sagemaker-'
slurm_create_submission_file_only: False 
stderr_to_stdout: True
srun_args:
  # - "--no-container-mount-home"
slurm_docker_cfg:
  docker_args:
    # - "--runtime=nvidia" 
  post_launch_commands: 
container_mounts: 
  - "/fsx:/fsx"
```

1. `job_name_prefix`: Slurm 클러스터에 대한 제출을 쉽게 식별할 수 있도록 작업 이름 접두사를 지정합니다.

1. `slurm_create_submission_file_only`: 디버깅에 도움이 되도록 모의 실행의 경우 이 구성을 True로 설정합니다.

1. `stderr_to_stdout`: 표준 오류(stderr)를 표준 출력(stdout)으로 리디렉션할지를 지정합니다.

1. `srun_args`: 특정 컴퓨팅 노드 제외와 같은 추가 srun 구성을 사용자 지정합니다. 자세한 내용은 srun 설명서를 참조하세요.

1. `slurm_docker_cfg`: SageMaker HyperPod 레시피 런처가 Docker 컨테이너를 시작하여 훈련 작업을 실행합니다. 이 파라미터 내에서 추가 Docker 인수를 지정할 수 있습니다.

1. `container_mounts`: 레시피 런처의 컨테이너에 탑재할 볼륨을 지정하여 훈련 작업이 해당 볼륨의 파일에 액세스할 수 있도록 합니다.

# HyperPod K8s에서 훈련 작업 실행
<a name="cluster-specific-configurations-run-training-job-hyperpod-k8s"></a>

SageMaker HyperPod 레시피는 GPU/Trainium Kubernetes 클러스터에 훈련 작업을 제출하는 것을 지원합니다. 훈련 작업을 제출하기 전에 다음 중 하나를 수행합니다.
+ `k8s.yaml` 클러스터 구성 파일을 수정합니다.
+ 명령줄을 통해 클러스터 구성 재정의

이전 단계 중 하나를 완료한 후 해당 환경을 설치합니다.

## `k8s.yaml`을 사용한 클러스터 구성
<a name="cluster-specific-configurations-configure-cluster-k8s-yaml"></a>

Kubernetes 클러스터에 훈련 작업을 제출하려면 Kubernetes에 특화된 구성을 지정합니다. 구성에는 클러스터 네임스페이스 또는 영구 볼륨의 위치가 포함됩니다.

```
pullPolicy: Always
restartPolicy: Never
namespace: default
persistent_volume_claims:
  - null
```

1. `pullPolicy`: 훈련 작업을 제출할 때 가져오기 정책을 지정할 수 있습니다. '항상'을 지정하면 Kubernetes 클러스터는 항상 리포지토리에서 이미지를 가져옵니다. 자세한 내용은 [Image pull policy](https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy)를 참조하세요.

1. `restartPolicy`: 훈련 작업이 실패할 경우 다시 시작할지를 지정합니다.

1. `namespace`: 훈련 작업을 제출할 Kubernetes 네임스페이스를 지정할 수 있습니다.

1. `persistent_volume_claims`: 훈련 작업에 대한 공유 볼륨을 지정하여 모든 훈련 프로세스가 볼륨의 파일에 액세스하도록 할 수 있습니다.

# SageMaker 훈련 작업 실행
<a name="cluster-specific-configurations-run-sagemaker-training-job"></a>

SageMaker HyperPod 레시피는 SageMaker 훈련 작업 제출을 지원합니다. 훈련 작업을 제출하기 전에 클러스터 구성인 `sm_job.yaml`을 업데이트하고 해당 환경을 설치해야 합니다.

## 레시피를 SageMaker 훈련 작업으로 사용
<a name="cluster-specific-configurations-cluster-config-sm-job-yaml"></a>

클러스터를 호스팅하지 않는 경우 레시피를 SageMaker 훈련 작업으로 사용할 수 있습니다. 레시피를 실행하려면 SageMaker 훈련 작업 구성 파일인 `sm_job.yaml`을 수정해야 합니다.

```
sm_jobs_config:
  output_path: null 
  tensorboard_config:
    output_path: null 
    container_logs_path: null
  wait: True 
  inputs: 
    s3: 
      train: null
      val: null
    file_system:  
      directory_path: null
  additional_estimator_kwargs: 
    max_run: 1800
```

1. `output_path`: 모델을 Amazon S3 URL에 저장할 위치를 지정할 수 있습니다.

1. `tensorboard_config`: 출력 경로 또는 TensorBoard 로그 경로와 같은 TensorBoard 관련 구성을 지정할 수 있습니다.

1. `wait`: 훈련 작업을 제출할 때 작업이 완료될 때까지 기다릴지를 지정할 수 있습니다.

1. `inputs`: 훈련 및 검증 데이터의 경로를 지정할 수 있습니다. 데이터 소스는 Amazon FSx 또는 Amazon S3 URL과 같은 공유 파일 시스템에서 가져올 수 있습니다.

1. `additional_estimator_kwargs`: 훈련 작업을 SageMaker 훈련 작업 플랫폼에 제출하기 위한 추가 예측기 인수입니다. 자세한 내용은 [Algorithm Estimator](https://sagemaker.readthedocs.io/en/stable/api/training/algorithm.html)를 참조하세요.

# 고려 사항
<a name="cluster-specific-configurations-special-considerations"></a>

Amazon SageMaker HyperPod 레시피를 사용하는 경우 모델 훈련 프로세스에 영향을 미칠 수 있는 몇 가지 요인이 있습니다.
+ Llama 3.2의 경우 `transformers` 버전은 `4.45.2` 이상이어야 합니다. Slurm 또는 K8s 워크플로를 사용하는 경우 버전이 자동으로 업데이트됩니다.
+ Mixtral은 8비트 부동 소수점 정밀도(FP8)를 지원하지 않습니다.
+ Amazon EC2 p4 인스턴스는 FP8을 지원하지 않습니다.

# 고급 설정
<a name="cluster-specific-configurations-advanced-settings"></a>

SageMaker HyperPod 레시피 어댑터는 Nvidia Nemo 및 Pytorch-lightning 프레임워크를 기반으로 구축되었습니다. 이러한 프레임워크를 이미 사용한 경우 사용자 지정 모델 또는 특성을 SageMaker HyperPod 레시피 어댑터에 통합하는 것도 비슷한 프로세스입니다. 레시피 어댑터를 수정하는 것 외에도 자체 사전 훈련 또는 미세 조정 스크립트를 변경할 수 있습니다. 사용자 지정 훈련 스크립트 작성에 대한 지침은 [examples](https://github.com/aws/sagemaker-hyperpod-training-adapter-for-nemo/tree/main/examples)을 참조하세요.

## SageMaker HyperPod 어댑터를 사용하여 자체 모델 생성
<a name="cluster-specific-configurations-use-hyperpod-adapter-create-model"></a>

레시피 어댑터 내에서 다음 위치에서 다음 파일을 사용자 지정할 수 있습니다.

1. `collections/data`: 데이터세트 로드를 담당하는 모듈이 포함되어 있습니다. 현재 HuggingFace의 데이터세트만 지원합니다. 고급 요구 사항이 있는 경우 코드 구조를 사용하면 동일한 폴더 내에 사용자 지정 데이터 모듈을 추가할 수 있습니다.

1. `collections/model`: 다양한 언어 모델의 정의를 포함합니다. 현재 Llama, Mixtral, Mistral과 같은 일반적인 대규모 언어 모델을 지원합니다. 이 폴더 내에 자체 모델 정의를 유연하게 도입할 수 있습니다.

1. `collections/parts`: 이 폴더에는 분산 방식으로 모델을 훈련하기 위한 전략이 포함되어 있습니다. 한 가지 예는 여러 액셀러레이터에 대규모 언어 모델을 샤딩할 수 있는 완전 샤딩된 데이터 병렬(FSDP) 전략입니다. 또한 전략은 다양한 형태의 모델 병렬화를 지원합니다. 또한 모델 훈련을 위해 자체 사용자 지정 훈련 전략을 도입할 수도 있습니다.

1. `utils`: 훈련 작업의 관리를 용이하게 하기 위한 다양한 유틸리티를 포함합니다. 사용자 자체 도구를 위한 리포지토리 역할을 합니다. 문제 해결 또는 벤치마킹과 같은 작업에 자체 도구를 사용할 수 있습니다. 이 폴더 내에 맞춤형 PyTorch Lightning 콜백을 추가할 수도 있습니다. PyTorch Lightning 콜백을 사용하여 특정 기능 또는 작업을 훈련 수명 주기에 원활하게 통합할 수 있습니다.

1. `conf`: 훈련 작업에서 특정 파라미터를 검증하는 데 사용되는 구성 스키마 정의를 포함합니다. 새 파라미터 또는 구성을 도입하는 경우 이 폴더에 사용자 지정 스키마를 추가할 수 있습니다. 사용자 지정 스키마를 사용하여 검증 규칙을 정의할 수 있습니다. 데이터 유형, 범위 또는 기타 파라미터 제약 조건을 검증할 수 있습니다. 사용자 지정 스키마를 정의하여 파라미터를 검증할 수도 있습니다.

# 부록
<a name="appendix"></a>

다음 정보를 사용하여 훈련 결과 모니터링 및 분석에 대한 정보를 가져옵니다.

## 훈련 결과 모니터링
<a name="monitor-training-results"></a>

개발자가 수렴을 평가하고 문제를 해결하려면 훈련 결과를 모니터링하고 분석해야 합니다. SageMaker HyperPod 레시피는 훈련 동작을 분석하기 위한 Tensorboard 통합을 제공합니다. 대규모 분산 훈련 작업을 프로파일링하는 문제를 해결하기 위해 이러한 레시피에는 VizTracer도 통합되어 있습니다. VizTracer는 Python 코드 실행을 추적하고 시각화하기 위한, 오버헤드가 적은 도구입니다. VizTracer에 대한 자세한 내용은 [VizTracer](https://viztracer.readthedocs.io/en/latest/installation.html)를 참조하세요.

다음 섹션에서는 SageMaker HyperPod 레시피에서 이러한 특성을 구현하는 프로세스를 안내합니다.

### Tensorboard
<a name="tensorboard"></a>

Tensorboard는 훈련 프로세스를 시각화하고 분석하기 위한 강력한 도구입니다. Tensorboard를 활성화하려면 다음 파라미터를 설정하여 레시피를 수정합니다.

```
exp_manager:
  exp_dir: null
  name: experiment
  create_tensorboard_logger: True
```

Tensorboard 로거를 활성화하면 훈련 로그가 생성되어 실험 디렉터리 내에 저장됩니다. 지시된 실험은 exp\$1manager.exp\$1dir에 정의되어 있습니다. 로컬에서 이러한 로그에 액세스하고 분석하려면 다음 절차를 사용합니다.

**로그에 액세스하고 분석하는 방법**

1. 훈련 환경에서 로컬 머신으로 Tensorboard 실험 폴더를 다운로드합니다.

1. 로컬 머신에서 터미널 또는 명령 프롬프트를 엽니다.

1. 다운로드한 실험 폴더가 포함된 디렉터리로 이동합니다.

1. 다음 명령을 사용하여 Tensorboard를 시작합니다.

   ```
   tensorboard --port=<port> --bind_all --logdir experiment.
   ```

1. 웹 브라우저를 열고 http://localhost:8008로 이동합니다.

이제 Tensorboard 인터페이스 내에서 훈련 작업의 상태 및 시각화를 볼 수 있습니다. 상태 및 시각화를 보면 훈련 프로세스를 모니터링하고 분석하는 데 도움이 됩니다. 훈련 프로세스를 모니터링하고 분석하면 모델의 동작과 성능에 대한 인사이트를 얻을 수 있습니다. Tensorboard로 훈련을 모니터링하고 분석하는 방법에 대한 자세한 내용은 [NVIDIA NeMo Framework User Guide](https://docs.nvidia.com/nemo-framework/user-guide/latest/llms/index.html)를 참조하세요.

### VizTracer
<a name="viztracer"></a>

VizTracer를 활성화하려면 model.viztracer.enabled 파라미터를 true로 설정하여 레시피를 수정할 수 있습니다. 예를 들어 다음 구성을 추가하여 VizTracer를 활성화하도록 llama 레시피를 업데이트할 수 있습니다.

```
model:
  viztracer:
    enabled: true
```

훈련이 완료되면 VizTracer 프로필은 실험 폴더 exp\$1dir/result.json에 있습니다. 프로필을 분석하려면 vizviewer 도구를 사용하여 다운로드하고 열 수 있습니다.

```
vizviewer --port <port> result.json
```

이 명령은 포트 9001에서 vizviewer를 시작합니다. 브라우저에서 http://localhost:<port>를 지정하여 VizTracer를 볼 수 있습니다. VizTracer를 연 후 훈련 분석을 시작합니다. VizTracer 사용에 대한 자세한 내용은 VizTracer 설명서를 참조하세요.

## SageMaker JumpStart와 SageMaker HyperPod 비교
<a name="sagemaker-jumpstart-vs-hyperpod"></a>

SageMaker JumpStart는 미세 조정 기능을 제공하지만 SageMaker HyperPod 레시피는 다음을 제공합니다.
+ 훈련 루프에 대한 추가 세분화된 제어
+ 자체 모델 및 데이터에 대한 레시피 사용자 지정
+ 모델 병렬화 지원

모델의 하이퍼파라미터, 다중 노드 훈련 및 훈련 루프에 대한 사용자 지정 옵션에 액세스해야 하는 경우 SageMaker HyperPod 레시피를 사용하세요.

SageMaker JumpStart에서 모델을 미세 조정하는 방법에 대한 자세한 내용은 [`JumpStartEstimator` 클래스를 사용하여 공개적으로 사용 가능한 파운데이션 모델을 미세 조정합니다.](jumpstart-foundation-models-use-python-sdk-estimator-class.md) 섹션을 참조하세요.