지도 미세 조정(SFT) - Amazon SageMaker AI

지도 미세 조정(SFT)

다음 섹션에서는 전체 순위 SFT와 파라미터 효율적 SFT라는 두 가지 지도 미세 조정(SFT) 프로세스를 간략하게 설명합니다.

전체 순위 지도 미세 조정(SFT)

지도 미세 조정(SFT)은 프롬프트-응답 쌍으로 구성된 데이터세트를 파운데이션 모델에 제공하여 사전 학습된 파운데이션 모델의 특정 태스크 성능을 향상시키는 과정입니다. 레이블이 지정된 예제는 프롬프트 응답 쌍으로 형식이 지정되고 지시사항으로 구문이 지정됩니다. 이 미세 조정 프로세스는 모델의 가중치를 수정합니다.

특정 도메인 데이터가 있고 최적의 결과를 위해 특정 프롬프트-응답 쌍을 제공해야 하는 경우, SFT를 사용해야 합니다.

훈련 및 검증 입력 데이터세트는 에스크로 또는 서비스 관리형 S3 버킷이 아닌 고객 소유 버킷에 있어야 합니다.

데이터 요구 사항

전체 순위 SFT 및 저순위 어댑터(LoRA) SFT의 경우 데이터는 Amazon Bedrock Converse 작업 형식을 따라야 합니다. 이 형식의 예시 및 제약 조건은 이해 모델 미세 조정을 위한 데이터 준비를 참조하세요.

제출 전에 데이터세트 형식을 검증하려면 Amazon Bedrock 샘플 리포지토리의 검증 스크립트를 사용하는 것이 좋습니다. 이 검증 도구는 JSONL 파일이 필요한 형식 사양을 준수하는지 확인하고, 미세 조정 작업을 제출하기 전에 잠재적 문제를 식별하는 데 도움이 됩니다.

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

  • 실행 구성

    • name: 훈련 작업을 설명하는 이름입니다. AWS Management 콘솔에서 작업을 식별하는 데 도움이 됩니다.

    • model_type: 사용할 Amazon Nova 모델 변형입니다. 사용할 수 있는 옵션은 amazon.nova-micro-v1:0:128k, amazon.nova-lite-v1:0:300k 또는 amazon.nova-pro-v1:0:300k입니다.

    • model_name_or_path: 훈련에 사용할 기본 모델의 경로입니다. 다음 중에서 사용할 모델을 선택합니다. nova-micro/prod, nova-lite/prod, nova-pro/prod 또는 훈련 후 체크포인트의 S3 경로(s3://<escrow bucket>/<job id>/outputs/checkpoints).

    • replicas: 분산 훈련에 사용할 컴퓨팅 인스턴스의 수입니다. 사용 가능한 값은 선택한 모델에 따라 다릅니다. Amazon Nova Micro는 2개, 4개 또는 8개의 복제본을 지원합니다. Amazon Nova Lite는 4개, 8개, 16개 또는 32개의 복제본을 지원합니다. Amazon Nova Pro는 6개, 12개 또는 24개의 복제본을 지원합니다.

    • data_s3_path: 훈련 데이터세트(JSONL 파일)의 S3 위치입니다. 이 파일은 클러스터와 동일한 AWS 계정 및 리전에 있어야 합니다. 제공된 S3 경로 내의 모든 S3 위치는 동일한 계정 및 리전에 있어야 합니다.

    • validation_data_s3_path: (선택 사항) 검증 데이터세트(JSONL 파일)의 S3 위치입니다. 이 파일은 클러스터와 동일한 계정 및 리전에 있어야 합니다. 제공된 S3 경로 내의 모든 S3 위치는 동일한 계정 및 리전에 있어야 합니다.

    • output_s3_path: 매니페스트 및 TensorBoard 로그가 저장되는 S3 위치입니다. 제공된 S3 경로 내의 모든 S3 위치는 동일한 계정 및 리전에 있어야 합니다.

  • 훈련 구성

    • max_length: 토큰 단위의 최대 시퀀스 길이입니다. 이는 훈련을 위한 컨텍스트 창 크기를 결정합니다. SFT에 대해 지원되는 최대 값은 65,536개의 토큰입니다.

      시퀀스가 길어지면 훈련 효율성이 향상되지만 메모리 요구 사항이 증가합니다. max_length 파라미터를 데이터 분포와 일치시키는 것이 좋습니다.

  • 트레이너 설정

    • max_epochs: 훈련 데이터세트의 완료 통과 횟수입니다. 최대값은 5입니다.

      일반적으로 데이터세트가 클수록 수렴하는 데 필요한 에포크 수가 적고, 데이터세트가 작을수록 수렴하는 데 더 많은 에포크가 필요합니다. 데이터 크기에 따라 에포크 수를 조정하는 것이 좋습니다.

  • 모델 설정

    • hidden_dropout: 숨겨진 상태 출력이 삭제될 확률입니다. 작은 데이터세트에서 과적합을 줄이려면 이 값을 약 0.0~0.2 늘립니다. 유효한 값은 0~1입니다.

    • attention_dropout: 어텐션 가중치가 삭제될 확률입니다. 이 파라미터는 일반화에 도움이 될 수 있습니다. 유효한 값은 0~1입니다.

    • ffn_dropout: 피드포워드 네트워크 출력이 삭제될 확률입니다. 유효한 값은 0~1입니다.

  • 옵티마이저 구성

    • lr: 최적화 동안 단계 크기를 제어하는 학습률입니다. 유효한 값은 1e-6~1e-3입니다. 성능 향상을 위해 1e-6에서 1e-4 사이의 값을 권장합니다.

    • name: 옵티마이저 알고리즘입니다. 현재 distributed_fused_adam만 지원됩니다.

    • weight_decay: L2 정규화 강도입니다. 값이 높을수록(0.01에서 0.1 사이) 정규화가 증가합니다.

    • warmup_steps: 학습률을 점진적으로 높이는 단계 수입니다. 이는 훈련의 안정성을 향상시킵니다. 유효한 값은 1~20입니다.

    • min_lr: 감소 종료 시의 최소 학습률입니다. 유효한 값은 0~1이지만 설정된 학습률보다 작아야 합니다.

전체 순위 SFT 레시피를 사용한 빠른 시작

다음은 HyperPod 클러스터에서 SFT 작업을 빠르게 시작하기 위한 전체 순위 SFT 레시피입니다. 이 레시피는 올바른 AWS 자격 증명을 사용하여 HyperPod 클러스터에 연결되어 있다고 가정합니다.

run: name: "my-sft-micro-job" # gets appended with a unique ID for HP jobs model_type: "amazon.nova-micro-v1:0:128k" model_name_or_path: "nova-micro/prod" replicas: 2 data_s3_path: s3:Replace with your S3 bucket name/input.jsonl validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## training specific configs training_config: max_length: 32768 save_steps: 100000 replicas: ${recipes.run.replicas} micro_batch_size: 1 task_type: sft global_batch_size: 64 weights_only: True allow_percentage_invalid_samples: 10 exp_manager: exp_dir: null create_wandb_logger: False create_tensorboard_logger: True project: null name: null checkpoint_callback_params: monitor: step save_top_k: 10 mode: max every_n_train_steps: ${recipes.training_config.save_steps} save_last: True create_early_stopping_callback: True early_stopping_callback_params: min_delta: 0.001 mode: min monitor: "val_loss" patience: 2 trainer: log_every_n_steps: 1 max_epochs: -1 max_steps: 16 val_check_interval: 100 limit_test_batches: 0 gradient_clip_val: 1.0 num_nodes: ${recipes.training_config.replicas} model: hidden_dropout: 0.0 # Dropout probability for hidden state transformer. attention_dropout: 0.0 # Dropout probability in the attention layer. ffn_dropout: 0.0 # Dropout probability in the feed-forward layer. sequence_parallel: True optim: lr: 1e-5 name: distributed_fused_adam bucket_cap_mb: 10 contiguous_grad_buffer: False overlap_param_sync: False contiguous_param_buffer: False overlap_grad_sync: False adam_w_mode: true eps: 1e-06 weight_decay: 0.0 betas: - 0.9 - 0.999 sched: name: CosineAnnealing warmup_steps: 10 constant_steps: 0 min_lr: 1e-6 mm_cfg: llm: freeze: false image_projector: freeze: true require_newline: true video_projector: freeze: true require_newline: false peft: peft_scheme: null training_validation: loader: args: data_loader_workers: 1 prefetch_factor: 2 collator: args: force_image_at_turn_beginning: false
샘플 전체 순위 레시피

다음은 모든 구성 요소가 올바르게 구성된 SFT에 대한 샘플 전체 순위 레시피입니다.

## Run config run: name: "my-sft-run" # A descriptive name for your training job model_type: "amazon.nova-lite-v1:0:300k" # Model variant specification model_name_or_path: "nova-lite/prod" # Base model path replicas: 4 # Number of compute instances for training data_s3_path: s3:Replace with your S3 bucket name/input.jsonl validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## Training specific configs training_config: max_length: 32768 # Maximum context window size (tokens) trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states attention_dropout: 0.0 # Dropout for attention weights ffn_dropout: 0.0 # Dropout for feed-forward networks optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm adam_w_mode: true # Enable AdamW mode eps: 1e-06 # Epsilon for numerical stability weight_decay: 0.0 # L2 regularization strength betas: # Adam optimizer betas - 0.9 - 0.999 sched: warmup_steps: 10 # Learning rate warmup steps constant_steps: 0 # Steps at constant learning rate min_lr: 1e-6 # Minimum learning rate peft: peft_scheme: null # Set to null for full-parameter fine-tuning
제한 사항

Weights & Biases와 MLFlow에 지표를 게시하는 것은 지원되지 않습니다.

중간 체크포인트는 평가를 위해 저장되지 않으며 중간 체크포인트에서 재개할 수 없습니다. 마지막 체크포인트만 저장됩니다.

하이퍼파라미터를 조정하려면 하이퍼파라미터 선택의 지침을 따릅니다.

파라미터 효율적 미세 조정(PEFT)

파라미터 효율적 미세 조정(PEFT)에는 파운데이션 모델을 새 태스크 또는 도메인에 맞게 조정하기 위해 몇 가지 추가 가중치를 재훈련하는 작업이 포함됩니다. 특히 저순위 어댑터(LoRA) PEFT는 특정 모델 계층에 저순위 학습 가능 가중치 행렬을 도입하여 모델 품질을 유지하면서 훈련 가능한 파라미터 수를 줄여 파운데이션 모델을 효율적으로 미세 조정할 수 있습니다.

LoRA PEFT 어댑터는 경량 어댑터 계층을 추가하여 추론 중 모델의 가중치를 수정하면서도 원래 모델 파라미터는 그대로 유지합니다. 이 접근 방식은 가장 비용 효율적인 미세 조정 기법 중 하나로도 간주됩니다. 자세한 내용은 어댑터 추론 구성 요소를 사용한 모델 미세 조정을 참조하세요.

다음 시나리오에서는 LoRA PEFT를 사용해야 합니다.

  • 빠른 훈련 절차로 시작하려고 합니다.

  • 기본 모델의 성능이 이미 만족스럽습니다. 이 경우 LoRA PEFT의 목표는 텍스트 요약이나 언어 번역 등 여러 관련 태스크에서 모델의 역량을 향상시키는 것입니다. LoRA PEFT의 정규화 특성은 과적합을 방지하고, 모델이 원본 도메인을 잊어버리는 문제를 완화하는 데 도움을 줍니다. 이를 통해 모델이 다양한 응용 분야에서 유연하고 적응 가능하게 됩니다.

  • 비교적 작은 데이터세트를 사용하는 명령어 기반 미세 조정 시나리오를 수행하려고 합니다. LoRA PEFT는 더 광범위하고 큰 데이터세트보다 작고 특정 태스크에 맞춘 데이터세트에서 더 우수한 성능을 발휘합니다.

  • Amazon Bedrock 사용자 지정 데이터 제한을 초과하는 대규모의 레이블이 지정된 데이터세트가 있습니다. 이 경우 SageMaker AI에서 LoRA PEFT를 사용하면 더 나은 결과를 얻을 수 있습니다.

  • 이미 Amazon Bedrock 미세 조정을 통해 유망한 결과를 얻은 경우에는 SageMaker AI에서 LoRA PEFT를 활용하여 모델 하이퍼파라미터를 추가 최적화할 수 있습니다.

LoRA PEFT에서 사용할 수 있는 Amazon Nova 파라미터는 다음과 같습니다.

  • 실행 구성

    • name: 훈련 작업을 설명하는 이름입니다. AWS Management 콘솔에서 작업을 식별하는 데 도움이 됩니다.

    • model_type: 사용할 Nova 모델 변형입니다. 사용할 수 있는 옵션은 amazon.nova-micro-v1:0:128k, amazon.nova-lite-v1:0:300k 또는 amazon.nova-pro-v1:0:300k입니다.

    • model_name_or_path: 훈련에 사용할 기본 모델의 경로입니다. 사용할 모델을 선택합니다. 사용 가능한 옵션은 nova-micro/prod, nova-lite/prod, nova-pro/prod 또는 훈련 후 체크포인트의 S3 경로(s3://<escrow bucket>/<job id>/outputs/checkpoints)입니다.

    • replicas: 분산 훈련에 사용할 컴퓨팅 인스턴스의 수입니다. 사용 가능한 값은 사용하는 모델에 따라 다릅니다. Amazon Nova Micro는 2개, 4개 또는 8개의 복제본을 지원합니다. Amazon Nova Lite는 4개, 8개, 16개 또는 32개의 복제본을 지원합니다. Amazon Nova Pro는 6개, 12개 또는 24개의 복제본을 지원합니다.

    • output_s3_path: 매니페스트 및 TensorBoard 로그가 저장되는 S3 위치입니다. 제공된 S3 경로 내의 모든 S3 위치는 동일한 계정 및 리전에 있어야 합니다.

  • 훈련 구성

    • max_length: 토큰 단위의 최대 시퀀스 길이입니다. 이는 훈련을 위한 컨텍스트 창 크기를 결정합니다. LoRA PEFT에 대해 지원되는 최대 값은 65,536개의 토큰입니다.

      시퀀스가 길어지면 훈련 효율성이 향상되지만 메모리 요구 사항이 증가합니다. max_length 파라미터를 데이터 분포와 일치시키는 것이 좋습니다.

  • 트레이너 설정

    • max_epochs: 훈련 데이터세트의 완료 통과 횟수입니다. max_steps 또는 max_epochs를 설정할 수 있지만 둘 다 설정하는 것은 권장하지 않습니다. 최대값은 5입니다.

      일반적으로 데이터세트가 클수록 수렴하는 데 필요한 에포크 수가 적고, 데이터세트가 작을수록 수렴하는 데 더 많은 에포크가 필요합니다. 데이터 크기에 따라 에포크 수를 조정하는 것이 좋습니다.

  • 모델 설정

    • hidden_dropout: 숨겨진 상태 출력이 삭제될 확률입니다. 작은 데이터세트에서 과적합을 줄이려면 이 값을 약 0.0~0.2 늘립니다. 유효한 값은 0~1입니다.

    • attention_dropout: 어텐션 가중치가 삭제될 확률입니다. 이 파라미터는 일반화에 도움이 될 수 있습니다. 유효한 값은 0~1입니다.

    • ffn_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이지만 설정된 학습률보다 작아야 합니다.

  • LoRA 구성 파라미터

    • peft_scheme: 저순위 적응을 활성화하려면 lora로 설정합니다.

    • alpha: LoRA 가중치의 조정 인수입니다. 이는 일반적으로 adapter_dim과 동일한 값으로 설정됩니다.

    • adaptor_dropout: LoRA의 정규화 파라미터입니다.

PEFT 레시피

다음은 LoRA PEFT의 레시피입니다.

## Run config run: name: "my-lora-run" # A descriptive name for your training job model_type: "amazon.nova-lite-v1:0:300k" # Model variant specification model_name_or_path: "nova-lite/prod" # Base model path replicas: 4 # Number of compute instances for training output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## Training specific configs training_config: max_length: 32768 # Maximum context window size (tokens) trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states attention_dropout: 0.0 # Dropout for attention weights ffn_dropout: 0.0 # Dropout for feed-forward networks optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm adam_w_mode: true # Enable AdamW mode eps: 1e-06 # Epsilon for numerical stability weight_decay: 0.0 # L2 regularization strength betas: # Adam optimizer betas - 0.9 - 0.999 sched: warmup_steps: 10 # Learning rate warmup steps constant_steps: 0 # Steps at constant learning rate min_lr: 1e-6 # Minimum learning rate peft: peft_scheme: "lora" # Enable LoRA for parameter-efficient fine-tuning lora_tuning: loraplus_lr_ratio: 8.0 # LoRA+ learning rate scaling factor alpha: 32 # Scaling factor for LoRA weights adapter_dropout: 0.01 # Regularization for LoRA parameters
제한 사항

PEFT에는 다음과 같은 제한 사항이 있습니다.

  • 이전에 제공된 훈련 구성에는 각 파라미터에 대한 권장 값이 있습니다.

  • 중간 체크포인트는 평가를 위해 저장되지 않으며 중간 체크포인트에서 재개할 수 없습니다. 마지막 체크포인트만 저장됩니다.

  • MLflow 로깅은 지원되지 않습니다.

문제 해결

다음 정보를 사용하여 발생할 수 있는 문제를 해결할 수 있습니다.

  • 훈련 및 검증을 위한 입력 데이터세트는 에스크로 또는 서비스 관리형 S3 버킷이 아닌 고객 소유 버킷에 있어야 합니다.

  • AWS CLI에서 '리전을 찾을 수 없음' 오류가 발생하면 start-job 명령 앞에 리전을 추가하여 작업을 다시 제출합니다. 예를 들면 AWS_REGION=us-east-1 hyperpod start-job ...Job Parameters입니다.

  • 하이퍼파라미터를 조정하려면 하이퍼파라미터 선택의 지침을 따릅니다.