감독 미세 조정(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 Console.

    • 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/prodnova-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: 훈련 데이터 세트의 S3 위치로, JSONL 파일입니다. 이 파일은 클러스터와 동일한 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입니다.

      일반적으로 데이터 세트가 클수록 수렴할 에포크 수가 줄어들고, 데이터 세트가 작을수록 수렴할 에포크 수가 늘어납니다. 데이터 크기에 따라 epoch 수를 조정하는 것이 좋습니다.

  • 모델 설정

    • 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
제한 사항

가중치 및 편향과 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 Console.

    • 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/prodnova-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입니다.

      일반적으로 데이터 세트가 클수록 수렴할 에포크 수가 줄어들고, 데이터 세트가 작을수록 수렴할 에포크 수가 늘어납니다. 데이터 크기에 따라 epoch 수를 조정하는 것이 좋습니다.

  • 모델 설정

    • 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 버킷이 아닌 고객 소유 버킷에 있어야 합니다.

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

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