

# SageMaker HyperPod에서 Nova 2.0에 대한 지속적 사전 학습(CPT)
<a name="nova-cpt-2"></a>

Amazon Nova Lite 2.0은 Nova Lite 1.0보다 더 크고 다양한 데이터세트에서 훈련된 모델입니다. Nova Lite 2.0은 더 큰 모델이지만 Nova Lite 1.0보다 더 빠른 추론을 제공하는 동시에, 향상된 추론 기능, 더 긴 컨텍스트 길이 및 향상된 다국어 성능을 제공합니다.

Nova 2.0 Lite에서 CPT를 사용하면 도메인별 데이터로 이러한 고급 기능을 확장하고, 모델이 우수한 추론 및 분석 능력을 유지하면서 전문 분야에 대한 심층적인 전문 지식을 개발할 수 있습니다.

## 샘플 CPT 레시피
<a name="nova-cpt-2-sample-recipe"></a>

다음은 CPT에 대한 레시피 샘플입니다. 이 레시피 및 기타 레시피는 GitHub의 [SageMaker HyperPod recipes](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/training/nova) 리포지토리에서 찾을 수 있습니다.

```
# Note:
# This recipe can run on p5.48xlarge
# Run config
run:
  name: "my-cpt-run"                           # A descriptive name for your training job
  model_type: "amazon.nova-2-lite-v1:0:256k"   # Model variant specification, do not change
  model_name_or_path: "nova-lite-2/prod"        # Base model path, do not change
  replicas: 8                                   # Number of compute instances for training, allowed values are 4, 8, 16, 32
  data_s3_path: ""                              # Customer data paths
  validation_data_s3_path: ""                   # Customer validation data paths
  output_s3_path: ""                            # Output artifact path, SageMaker HyperPod job-specific configuration - not compatible with standard SageMaker Training Jobs
  mlflow_tracking_uri: ""                       # Required for MLFlow
  mlflow_experiment_name: "my-cpt-experiment"   # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-cpt-run"                 # Optional for MLFlow. Note: leave this field non-empty

## Training specific configs
training_config:
  task_type: cpt
  max_length: 8192                              # Maximum context window size (tokens)
  global_batch_size: 256                        # Global batch size, allowed values are 32, 64, 128, 256.

  trainer:
    max_steps: 10                               # The number of training steps to run total
    val_check_interval: 10                      # The number of steps between running validation. Integer count or float percentage
    limit_val_batches: 2                        # Batches of the validation set to use each trigger

  model:
    hidden_dropout: 0.0                         # Dropout for hidden states, must be between 0.0 and 1.0
    attention_dropout: 0.0                      # Dropout for attention weights, must be between 0.0 and 1.0

  optim:
    optimizer: adam
    lr: 1e-5                                    # Learning rate
    name: distributed_fused_adam                # Optimizer algorithm, do not change
    adam_w_mode: true                           # Enable AdamW mode
    eps: 1e-06                                  # Epsilon for numerical stability
    weight_decay: 0.0                           # L2 regularization strength, must be between 0.0 and 1.0
    adam_beta1: 0.9                             # Beta1 for Adam optimizer
    adam_beta2: 0.95                            # Beta2 for Adam optimizer
    sched:
      warmup_steps: 10                          # Learning rate warmup steps
      constant_steps: 0                         # Steps at constant learning rate
      min_lr: 1e-6                              # Minimum learning rate, must be lower than lr
```

## SageMaker HyperPod에서 지속적인 사전 훈련 작업 시작하기
<a name="nova-cpt-2-starting-job"></a>

### 데이터 준비
<a name="nova-cpt-2-preparing-data"></a>

데이터 형식, 지원되는 기능, 제약 조건 및 CPT 훈련 데이터 준비 모범 사례에 대한 자세한 내용은 [CPT on Amazon Nova 2용 데이터 준비하기](nova-data-prep-cpt-2.md) 섹션을 참조하세요.

### 데이터 업로드
<a name="nova-cpt-2-data-upload"></a>

훈련 및 검증 데이터세트를 S3 버킷에 업로드합니다. 레시피의 `run` 블록에서 다음 위치를 지정합니다.

```
## Run config
run:
  ...
  data_s3_path: "s3://<bucket-name>/<training-directory>/<training-file>.jsonl"
  validation_data_s3_path: "s3://<bucket-name>/<validation-directory>/<validation-file>.jsonl"
```

**참고**  
`<bucket-name>`, `<training-directory>`, `<validation-directory>`, `<training-file>`, `<validation-file>`을 실제 S3 경로로 바꿉니다.

### 구성 정의
<a name="nova-cpt-2-defining-config"></a>

`run` 블록의 `model_type` 및 `model_name_or_path` 필드를 사용하여 기본 모델을 정의합니다.

```
## Run config
run:
  ...
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  ...
```

## CPT 파라미터 조정
<a name="nova-cpt-2-tuning-parameters"></a>

CPT를 통해 미세 조정할 수 있는 파라미터는 다음과 같습니다.

**실행 구성**  

+ **name**: 훈련 작업을 설명하는 이름입니다. AWS Management Console에서 작업을 식별하는 데 도움이 됩니다.
+ **model\_type**: 사용할 Amazon Nova 모델 변형입니다. 사용할 수 있는 옵션은 `amazon.nova-2-lite-v1:0:256k`입니다.
+ **model\_name\_or\_path**: 훈련에 사용할 기본 모델의 경로입니다. 사용 가능한 옵션은 `nova-lite-2/prod` 또는 사후 훈련 체크포인트의 S3 경로(`s3://customer-escrow-bucket-unique_id/training_run_name`)입니다.
+ **replicas**: 분산 훈련에 사용할 컴퓨팅 인스턴스의 수입니다. 사용 가능한 값은 선택한 모델에 따라 다릅니다. Amazon Nova Lite 2.0은 4개, 8개, 16개 또는 32개의 복제본을 지원합니다.
+ **data\_s3\_path**: 훈련 데이터세트(JSONL 파일)의 S3 위치입니다. 이 파일은 클러스터와 동일한 AWS 계정 및 리전에 있어야 합니다. 제공된 모든 S3 위치는 동일한 계정 및 리전에 있어야 합니다.
+ **validation\_data\_s3\_path**: (선택 사항) 검증 데이터세트(JSONL 파일)의 S3 위치입니다. 이 파일은 클러스터와 동일한 계정 및 리전에 있어야 합니다. 제공된 모든 S3 위치는 동일한 계정 및 리전에 있어야 합니다.
+ **output\_s3\_path**: 매니페스트 및 TensorBoard 로그가 저장되는 S3 위치입니다. 제공된 모든 S3 위치는 동일한 AWS 계정 및 AWS 리전에 있어야 합니다.
+ **mlflow\_tracking\_uri**: MLFlow 로깅에 사용할 MLFlow 앱의 ARN
+ **mlflow\_experiment\_name**: MLFlow 실험 이름
+ **mlflow\_run\_name**: MLFlow 실행 이름

**훈련 구성**  

+ **max\_length**: 토큰 단위의 최대 시퀀스 길이입니다. 이는 훈련을 위한 컨텍스트 창 크기를 결정합니다. CPT에 대해 지원되는 최대 값은 8,192개의 토큰입니다.

  시퀀스가 길어지면 훈련 효율성이 향상되지만 메모리 요구 사항이 증가합니다. max\_length 파라미터를 데이터 분포와 일치시키는 것이 좋습니다.
+ **global\_batch\_size**: 모든 디바이스 및 워커에서 한 번의 순방향 또는 역방향 패스 동안 함께 처리되는 전체 훈련 샘플 수입니다.

  이 값은 디바이스당 배치 크기와 디바이스 수를 곱한 값입니다. 이는 훈련의 안정성과 처리량에 영향을 미칩니다. 메모리 내에서 적절한 배치 크기로 시작하여 점진적으로 스케일 업하는 것이 좋습니다. 도메인별 데이터의 경우 배치 크기가 크면 그라디언트가 과도하게 평활화될 수 있습니다.

**트레이너 설정**  

+ **max\_steps**: 실행할 훈련 단계 수입니다. 각 단계는 `global_batch_size`개의 요소를 사용하여 모델을 훈련합니다.

**모델 설정**  

+ **hidden\_dropout**: 숨겨진 상태 출력이 삭제될 확률입니다. 작은 데이터세트에서 과적합을 줄이려면 이 값을 약 0.0\~0.2 늘립니다. 유효한 값은 0\~1입니다.
+ **attention\_dropout**: 어텐션 가중치가 삭제될 확률입니다. 이 파라미터는 일반화에 도움이 될 수 있습니다. 유효한 값은 0\~1입니다.

**옵티마이저 구성**  

+ **lr**: 최적화 동안 단계 크기를 제어하는 학습률입니다. 성능 향상을 위해 1e-6에서 1e-4 사이의 값을 권장합니다. 유효한 값은 0\~1입니다.
+ **name**: 옵티마이저 알고리즘입니다. 현재 `distributed_fused_adam`만 지원됩니다.
+ **weight\_decay**: L2 정규화 강도입니다. 값이 높을수록(0.01에서 0.1 사이) 정규화가 증가합니다.
+ **warmup\_steps**: 학습률을 점진적으로 높이는 단계 수입니다. 이는 훈련의 안정성을 향상시킵니다. 유효한 값은 1\~20입니다.
+ **min\_lr**: 감소 종료 시의 최소 학습률입니다. 유효한 값은 0\~1이지만 설정된 학습률보다 작아야 합니다.