

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

# 일반 구성
<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)를 참조하세요.