

# 반복 훈련
<a name="nova-iterative-training"></a>

## 개요
<a name="nova-iterative-overview"></a>

반복 훈련은 여러 훈련 방법(훈련, 평가, 오류 분석, 데이터/목표/하이퍼파라미터 조정 등)에서 여러 훈련 주기를 통해 모델을 반복적으로 미세 조정하는 프로세스로, 각 라운드는 이전 체크포인트에서 시작됩니다. 이 접근 방식을 사용하면 모델 실패 모드를 체계적으로 목표로 지정하고, 특정 약점을 해결하는 선별된 예제를 통합하며, 시간이 지남에 따라 변화하는 요구 사항에 적응할 수 있습니다.

**단일 패스 훈련의 이점:**
+ **목표 개선**: 평가를 통해 발견한 특정 실패 패턴 해결
+ **적응형 개선**: 배포 전환 또는 진화하는 제품 요구 사항에 대응
+ **위험 완화**: 긴 단일 훈련 실행에 커밋하지 않고 점진적으로 개선 사항 검증
+ **데이터 효율성**: 모델 성능이 낮은 영역에 데이터 수집 노력 집중
+ **커리큘럼 훈련**: 점점 더 높은 품질의 데이터를 사용하는 여러 라운드로 구성된 훈련

## 작동 방식
<a name="nova-iterative-how-it-works"></a>

### 체크포인트 위치 및 액세스
<a name="nova-iterative-checkpoint-location"></a>

각 훈련 작업이 완료되면 훈련 구성의 `output_path` 파라미터로 지정된 출력 위치에 매니페스트 파일이 생성됩니다.

**체크포인트에 액세스하는 방법**
+ S3에서 지정된 `output_path`로 이동
+ `output.tar.gz` 파일을 다운로드하고 압축 풀기
+ 내부에서 `manifest.json` 파일 열기
+ 훈련된 모델의 S3 URI를 포함하는 `checkpoint_s3_bucket` 파라미터 찾기

**manifest.json 구조 예제**

```
{  
  "checkpoint_s3_bucket": "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<job-name>/stepID",  
  ...  
}
```

### 에스크로 버킷 이해
<a name="nova-iterative-escrow-buckets"></a>

Amazon Nova 가중치는 독점 데이터이므로 훈련된 모델 체크포인트는 계정에 복사되지 않고 AWS 관리형 계정 내 **에스크로 S3 버킷**에 저장됩니다. 다음은 이러한 에스크로 버킷의 특징입니다.
+ 사용자 지정된 모델 가중치를 안전하게 포함함
+ 다른 AWS 서비스(추론, 평가 및 후속 훈련 작업)에서 참조할 수 있음
+ IAM 권한을 통해 AWS 계정에만 액세스할 수 있음
+ 계정에서 표준 S3 스토리지 요금 발생(비용 고려 사항 참조)

다음 훈련 실행에서 에스크로 버킷 경로를 `model_name_or_path`로 사용하여 반복 훈련을 계속할 수 있습니다.

### 반복 훈련에 체크포인트 사용
<a name="nova-iterative-using-checkpoints"></a>

이전 체크포인트를 기본 모델로 사용하도록 다음 훈련 작업을 구성합니다.

```
run:  
  name: "my-iterative-training-job"  
  model_type: amazon.nova-2-lite-v1:0:256k  
  model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<previous-job-name>"  
  data_s3_path: s3://<bucket>/<data-file>.jsonl  
  replicas: 4
```

## 반복 훈련을 사용해야 하는 경우
<a name="nova-iterative-when-to-use"></a>

### 이상적인 사용 사례
<a name="nova-iterative-ideal-use-cases"></a>

다음과 같은 경우에 반복 훈련을 사용합니다.
+ **피드백 루프** - 실제 실패 사례를 수집하고 체계적으로 해결하는 기능
+ **동적 환경** - 주기적 모델 업데이트가 필요한 문서, API 또는 지원 주제 개선
+ **강력한 평가** - 개선 사항을 신뢰할 수 있는 방식으로 측정하기 위한 강력한 벤치마크 및 평가 프레임워크(아래 예제 참조)
+ **ML 운영 기능** - 여러 훈련 주기 및 버전 제어를 관리하는 리소스

**강력한 평가 프레임워크 예제**
+ 통과/실패 임계치가 있는 자동하된 벤치마크 모음
+ 평가자 간 신뢰성 지표를 포함하는 인적 평가 프로토콜
+ 엣지 사례 및 적대적 입력을 다루는 레드 팀 테스트 시나리오
+ 프로덕션 영향을 측정하기 위한 A/B 테스트 인프라

### 일반적인 패턴
<a name="nova-iterative-common-patterns"></a>

**SFT → RFT 파이프라인**: 자주 사용되는 반복 패턴에는 다음이 포함됩니다.
+ **SFT 우선** - 데모 예제를 통해 문제를 해결하는 방법을 모델에 가르침
+ **RFT 보조** - 보상 신호를 사용하여 광범위한 문제 공간에서 성능 최적화

이 시퀀스는 처음에 모델의 성능이 낮은 경우에 필수적입니다. 정확도가 거의 0에 가까운 모델의 경우 먼저 SFT를 통해 기본적인 문제 해결 기능을 설정하지 않으면 RFT로느 성능이 개선되지 않습니다.

### 반복 훈련을 사용하지 않는 경우
<a name="nova-iterative-when-not-to-use"></a>

다음 경우에는 반복 훈련을 피합니다.
+ **안정적이고 잘 정의된 태스크** - 일관된 요구 사항이 이미 성능 상한에 가까운 고정 데이터
+ **간단한 분류 문제** - 단일 패스 훈련으로 충분한 좁은 범위의 태스크
+ **리소스 제약** - 여러 훈련 주기를 관리하기 위한 전용 ML 운영 기능 부족
+ **마진 게인** - 오버헤드로 최소 성능 개선 사항이 정당화되지 않는 경우

## 워크플로 예제: SFT → RFT
<a name="nova-iterative-example-workflow"></a>

이 예제에서는 추론 모델에 대한 일반적인 반복 훈련 패턴을 보여줍니다.

### 1단계: 초기 SFT 훈련
<a name="nova-iterative-step1"></a>

데이터세트를 사용하여 SFT 훈련 작업을 구성하고 시작합니다.

```
run:  
  name: "initial-sft-training"  
  model_type: amazon.nova-2-lite-v1:0:256k  
  model_name_or_path: "nova-lite-2/prod"  
  data_s3_path: s3://<bucket>/sft-training-data.jsonl  
  validation_data_s3_path: s3://<bucket>/sft-validation-data.jsonl
```

**근거**: SFT는 모델 출력을 원하는 형식과 음성으로 형성하여 기본 기능을 설정하는 추가 데모를 제공합니다.

**훈련이 완료된 후**
+ 훈련 작업에 구성된 `output_path` 기록
+ 해당 위치에서 `output.tar.gz` 다운로드
+ `manifest.json` 추출 및 찾기
+ `checkpoint_s3_bucket` 값 복사

### 2단계: SFT 체크포인트에서 RFT 훈련
<a name="nova-iterative-step2"></a>

SFT 체크포인트를 사용하여 새 RFT 훈련 작업을 생성합니다.

```
run:  
  name: "rft-on-sft-checkpoint"  
  model_type: amazon.nova-2-lite-v1:0:256k  
  model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<initial-sft-training>"  
  data_s3_path: s3://<bucket>/rft-training-data.jsonl  
  reward_lambda_arn: <your-reward-function-arn>
```

**근거**: RFT 훈련은 SFT 파운데이션을 기반으로 구축되므로 모델은 보상 함수에 의해 최적화된 보다 복잡한 추론 패턴을 개발할 수 있습니다.

### 3단계: 평가 및 반복
<a name="nova-iterative-step3"></a>

RFT 체크포인트에서 평가를 실행하여 성능을 평가합니다.

```
run:  
  name: "evaluate-rft-checkpoint"  
  model_type: amazon.nova-2-lite-v1:0:256k  
  model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<rft-on-sft-checkpoint>"  
  data_s3_path: s3://<bucket>/evaluation-data.jsonl
```

목표 지표가 충족되지 않으면 조정된 데이터 또는 하이퍼파라미터로 계속 반복합니다.

**중요**  
훈련 기법(LoRA 및 전체 순위)은 모든 반복에서 일관성을 유지해야 합니다.  
SFT를 **LoRA**와 함께 사용하는 경우 RFT를 **LoRA**와 함께 사용해야 함
SFT를 **전체 순위**와 함께 사용하는 경우 RFT를 **전체 순위**와 함께 사용해야 함
LoRA 및 전체 순위 중간 파이프라인 사이를 전환할 수 없습니다.

**중요**  
Amazon에서 소유한 출력 S3 버킷에서 암호화에 KMS 키를 사용하는 경우 향후 모든 반복에 동일한 KMS 키를 사용해야 합니다.

## 여러 반복에서 진행 상황 모니터링
<a name="nova-iterative-monitoring"></a>

작업에 대한 [MLflow를 설정](nova-model-monitor.md#nova-customization-mlflow-setup)하여 MLflow를 통해 지표를 추적할 수 있습니다.

### MLflow 앱 생성
<a name="nova-iterative-create-mlflow"></a>

**Studio UI 사용**: Studio UI를 통해 훈련 작업을 생성하는 경우 기본 MLflow 앱이 자동으로 생성되고 고급 옵션에서 기본적으로 선택됩니다.

**CLI 사용**: CLI를 사용하는 경우 MLflow 앱을 생성하고 이를 훈련 작업 API 요청에 대한 입력으로 전달해야 합니다.

```
mlflow_app_name="<enter your MLflow app name>"  
role_arn="<enter your role ARN>"   
bucket_name="<enter your bucket name>"   
region="<enter your region>"  
  
mlflow_app_arn=$(aws sagemaker create-mlflow-app \  
  --name $mlflow_app_name \  
  --artifact-store-uri "s3://$bucket_name" \  
  --role-arn $role_arn \  
  --region $region)
```

### MLflow 앱에 액세스
<a name="nova-iterative-access-mlflow"></a>

**CLI 사용**: 미리 서명된 URL을 생성하여 MLflow 앱 UI에 액세스합니다.

```
aws sagemaker create-presigned-mlflow-app-url \  
  --arn $mlflow_app_arn \  
  --region $region \  
  --output text
```

**Studio UI 사용**: Studio UI는 MLflow에 저장된 주요 지표를 표시하고 MLflow 앱 UI에 대한 링크를 제공합니다.

### 추적할 주요 지표
<a name="nova-iterative-key-metrics"></a>

여러 반복에서 이러한 지표를 모니터링하여 개선 사항을 평가하고 작업 진행 상황을 추적합니다.

**SFT의 경우**
+ 훈련 손실 곡선
+ 소비된 샘플 수 및 샘플 처리 시간
+ 홀드아웃 테스트 세트의 성능 정확도
+ 형식 규정 준수(예: 유효한 JSON 출력 비율)
+ 도메인별 평가 데이터의 퍼플렉시티

**RFT의 경우**
+ 훈련 대비 평균 보상 점수
+ 보상 분포(높은 보상 응답의 백분율)
+ 검증 보상 추세(과적합 감시)
+ 태스크별 성공률(예: 코드 실행 통과 비율, 수학 문제 정확도)

**일반**
+ 반복 간 벤치마크 성능 델타
+ 대표 샘플에 대한 인적 평가 점수
+ 프로덕션 지표(반복적으로 배포하는 경우)

### 중지 시점 결정
<a name="nova-iterative-when-to-stop"></a>

다음과 같은 경우 반복을 중지합니다.
+ **성능 정체** - 추가 훈련으로도 대상 지표가 더 이상 유의미하게 개선되지 않음
+ **기법 전환 지원** - 한 기법이 정체된 경우 성능 상한을 깨뜨리려면 전환(예: SFT → RFT → SFT) 시도
+ **목표 지표 달성** - 성공 기준을 충족함
+ **회귀 감지** - 새 반복은 성능을 저하시킴(아래 롤백 절차 참조)

자세한 평가 절차는 **평가** 섹션을 참조하세요.

## 모범 사례
<a name="nova-iterative-best-practices"></a>

### 소규모로 시작하여 점진적으로 확장
<a name="nova-iterative-start-small"></a>

스케일 업하기 전에 최소 데이터세트와 단일 훈련 에포크로 시작하여 접근 방식을 검증합니다. 그러면 신뢰가 구축되고 문제를 조기에 식별하는 데 도움이 됩니다.

### 명확한 성공 지표 설정
<a name="nova-iterative-success-metrics"></a>

시작하기 전에 다음과 같이 정량적 및 정성적 지표를 정의합니다.

**사용 사례별 성공 지표 예제**
+ **질문 답변** - 정확한 일치 정확도, F1 점수, 인적 선호도 등급
+ **코드 생성** - 유닛 테스트 통과 비율, 컴파일 성공, 실행 시간
+ **추론 태스크** - 단계 정확도, 최종 답변 정확성, 보상 점수
+ **콘텐츠 생성** - 일관성 점수, 실제 정확도, 스타일 준수

### 자동화된 평가 구현
<a name="nova-iterative-automated-eval"></a>

자동화된 평가 파이프라인을 설정하여 각 라운드 후 성능을 추적하여 빠른 반복 및 목표 비교를 지원합니다.

### 엄격한 버전 제어 유지 관리
<a name="nova-iterative-version-control"></a>

각 반복에 대해 문서화합니다.
+ 데이터세트 버전 및 수정 사항
+ 모델 체크포인트 위치
+ 하이퍼파라미터 변경 사항
+ 성능 지표 및 델타
+ 정성적 관찰

그러면 하면 규격화된 지식이 구축되고 디버깅을 지원합니다.

### 수량보다 데이터 품질에 집중
<a name="nova-iterative-data-quality"></a>

단순히 데이터세트 크기를 늘리는 대신, 이전 라운드의 실패 사례를 분석하고 목표에 맞는 고품질 예제를 추가합니다.

### 반복 예산 계획
<a name="nova-iterative-iteration-budget"></a>

일반적인 범위로 **3\$15회 반복**을 계획합니다.
+ **1\$12회 반복** - 종종 단순한 개선 또는 최종 다듬기 작업에 충분함
+ **3\$15회 반복** - 여러 개선 주기가 필요한 복잡한 태스크에 적합함
+ **5회 이상의 반복** - 반복 감소를 나타내거나 여러 접근 방식에 필요할 수 있음

컴퓨팅 예산 및 성능 개선률에 따라 조정합니다.

### 롤백 기능 구현
<a name="nova-iterative-rollback"></a>

반복 시 회귀가 발생하는 경우:
+ **회귀 식별** - 체크포인트 간 평가 지표 비교
+ **이전 체크포인트로 돌아가기** - 이전 체크포인트의 S3 경로를 `model_name_or_path`로 사용
+ **훈련 접근 방식 조정** - 재시도 전에 데이터, 하이퍼파라미터 또는 기법 수정
+ **실패 사례 문서화** - 똑같은 상황을 방지하기 위해 회귀의 원인 기록

**롤백 예제**

```
run:  
  name: "rollback-to-iteration-2"  
  model_type: amazon.nova-2-lite-v1:0:256k  
  # Use iteration 2 checkpoint instead of failed iteration 3  
  model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<iteration-2-job-name>"
```

## 비용 고려 사항
<a name="nova-iterative-cost"></a>

### 체크포인트 저장
<a name="nova-iterative-checkpoint-storage"></a>
+ **위치** - 에스크로 버킷에 저장된 체크포인트에서는 AWS 계정에 청구되는 표준 S3 스토리지 요금이 발생함
+ **보존** - 명시적으로 삭제되지 않는 한 체크포인트는 무기한 보존됨
+ **관리** - 수명 주기 정책을 구현하여 더 이상 필요하지 않은 오래된 체크포인트를 아카이브하거나 삭제함

**비용 최적화 팁**
+ 최신 반복을 검증한 후 중간 체크포인트 삭제
+ 더 저렴한 비용으로 장기 보존을 위해 S3 Glacier에 체크포인트 아카이브
+ 규정 준수 및 실험 요구 사항에 따라 보존 정책 설정

## 제한 사항
<a name="nova-iterative-limitations"></a>

### 모델 패밀리 일관성
<a name="nova-iterative-model-consistency"></a>

반복적으로 훈련하는 경우 모든 반복에서 **동일한 모델 유형**을 사용해야 합니다.

**초기 훈련**

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

**후속 반복에서는 동일한 model\$1type을 사용해야 함**

```
run:  
  model_type: amazon.nova-2-lite-v1:0:256k  # Must match original  
  model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<job-name>"
```

### 훈련 기법의 일관성
<a name="nova-iterative-technique-consistency"></a>

훈련 기법은 여러 반복에서 일관성을 유지해야 합니다.
+ **LoRA 훈련 모델**은 LoRA로만 반복 훈련할 수 있습니다.
+ **전체 순위 훈련 모델**은 전체 순위로만 반복 훈련할 수 있습니다.

**반복 훈련에서 LoRA 어댑터의 작동 방식**
+ 각 LoRA 훈련 반복은 새 어댑터 가중치를 생성함
+ 새 어댑터는 이전 어댑터를 대체함(스택되지 않음)
+ 기본 모델은 동결된 상태로 유지되며, 어댑터만 업데이트됨

### 기법 호환성 매트릭스
<a name="nova-iterative-compatibility-matrix"></a>


| 초기 훈련 | 반복을 지원하는 방법 | 
| --- | --- | 
| SFT(전체 순위) | SFT(전체 순위), RFT(전체 순위) | 
| SFT(LoRA) | SFT(LoRA), RFT(LoRA) | 
| RFT(전체 순위) | RFT(전체 순위) | 
| RFT(LoRA) | RFT(LoRA) | 

**작업 시작 전에 호환성 확인**
+ 이전 훈련 레시피를 확인하여 모델 유형 및 훈련 기법(LoRA 및 전체 순위) 식별
+ 새 레시피에서 모델 유형과 기법이 모두 일치하는지 확인
+ manifest.json을 검토하여 체크포인트 경로가 올바른지 확인

## 문제 해결
<a name="nova-iterative-troubleshooting"></a>

### 오류: 'Incompatible model training techniques detected'
<a name="nova-iterative-error-incompatible"></a>

**원인**: 훈련 기법(LoRA 및 전체 순위)이 체크포인트의 기법과 일치하지 않습니다.

**해결 방법**: 레시피가 원래 모델과 동일한 훈련 기법을 사용하는지 확인합니다.
+ 체크포인트가 LoRA로 훈련된 경우 새 레시피에서 LoRA 사용
+ 체크포인트가 전체 순위로 훈련된 경우 새 레시피에서 전체 순위 사용

### 오류: 'Base model for the job extracted from model\$1name\$1or\$1path does not match model\$1type'
<a name="nova-iterative-error-base-model"></a>

**원인**: `model_type`에 지정된 모델 유형이 체크포인트의 실제 모델과 일치하지 않습니다.

**해결 방법**: 다음을 확인합니다.
+ 레시피에서 `model_type`이 원래 모델 유형과 일치함
+ `model_name_or_path`에서 체크포인트 S3 경로가 올바름
+ 올바른 manifest.json 파일의 경로를 사용하고 있음

**올바른 구성 예제**

```
run:  
  model_type: amazon.nova-2-lite-v1:0:256k  # Must match checkpoint's model  
  model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<job-name>"
```

### 오류: 'Model configuration not found'
<a name="nova-iterative-error-config"></a>

**원인**: `model_name_or_path`의 S3 경로가 유효하지 않거나 이에 액세스할 수 없습니다.

**​해결 방법:**
+ S3 경로가 manifest.json 파일에서 올바르게 복사되었는지 확인
+ 에스크로 버킷에 액세스할 수 있는 권한이 IAM 역할에 있는지 확인
+ 이전 훈련 작업이 성공적으로 완료되었는지 확인
+ 경로에 오타가 있는지 확인

### 반복 후 성능 회귀
<a name="nova-iterative-error-regression"></a>

**증상**: 새 훈련 반복 후 평가 지표가 감소합니다.

**​해결 방법:**
+ **롤백** - 이전 체크포인트를 기본 모델로 사용
+ **분석** - 실패한 반복에 대한 훈련 로그 및 데이터 품질 검토
+ **조정** - 하이퍼파라미터 수정(학습 속도 감소), 데이터 품질 향상 또는 훈련 에포크 감소
+ **재시도** - 조정을 통해 새 반복 시작