

# Nova 2.0에서 SFT
<a name="nova-hp-rft-nova2"></a>

RFT 훈련 데이터는 OpenAI 대화 형식을 따릅니다. 각 훈련 예제는 메시지, 참조 답변 및 선택적 도구 정의를 포함하는 JSON 객체입니다. 이 섹션에서는 Nova 2.0에서 RFT에 대한 효과적인 훈련 데이터를 준비하는 방법에 대한 지침을 제공합니다.

**Topics**
+ [

## 데이터 형식 및 구조
](#nova-hp-rft-data-format)
+ [

## 필드 설명
](#nova-hp-rft-field-descriptions)
+ [

## 하이퍼파라미터 지침
](#nova-hp-rft-monitoring-hyperparams)
+ [

## 추가 속성
](#nova-hp-rft-additional-properties)
+ [

## 데이터세트 크기 권장 사항
](#nova-hp-rft-dataset-size)
+ [

## 효과적인 훈련 데이터의 특성
](#nova-hp-rft-effective-data)
+ [

# RFT 훈련 모니터링
](nova-hp-rft-monitoring.md)

## 데이터 형식 및 구조
<a name="nova-hp-rft-data-format"></a>

각 훈련 예제는 다음을 포함하는 JSON 객체입니다.
+ **messages**: 시스템, 사용자 및 선택적으로 어시스턴트 역할을 사용하는 대화 턴 배열
+ **reference\$1answer**: 보상 계산에 대한 평가 기준 또는 예상 출력
+ **tools**(선택 사항): 모델에서 사용할 수 있는 함수 정의 배열
+ **id**(선택 사항): 추적 및 중복 제거를 위한 고유 식별자

각 예제는 JSONL 파일에서 한 줄에 있어야 하며 한 줄에 하나의 JSON 객체가 있어야 합니다.

### 예제 1: 화학 문제
<a name="nova-hp-rft-example-chemistry"></a>

다음 예제에서는 실측 정보 값을 포함하는 참조 답변을 사용하는 화학 문제를 보여줍니다.

```
{  
  "id": "chem-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful chemistry assistant"  
    },  
    {  
      "role": "user",  
      "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C"  
    }  
  ],  
  "reference_answer": {  
    "donor_bond_counts": 2,  
    "acceptor_bond_counts": 4,  
    "explanation": "Calculated using Lipinski's rule of five: N-H groups (2 donors), N and O atoms with lone pairs (4 acceptors)"  
  }  
}
```

**참고**  
reference\$1answer에는 도메인별 규칙을 사용하여 계산된 실측 정보 값이 포함되어 있습니다. 보상 함수는 모델 예측 값을 이러한 참조 값과 비교하여 보상 점수를 계산합니다.

### 예제 2: 수학 문제
<a name="nova-hp-rft-example-math"></a>

다음 예제에서는 해법 단계를 포함하는 수학 문제를 보여줍니다.

```
{  
  "id": "math-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a math tutor"  
    },  
    {  
      "role": "user",  
      "content": "Solve: 2x + 5 = 13"  
    }  
  ],  
  "reference_answer": {  
    "solution": "x = 4",  
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]  
  }  
}
```

### 예제 3: 도구 사용
<a name="nova-hp-rft-example-tool"></a>

다음 예제에서는 예상 동작이 있는 도구 사용을 보여줍니다.

```
{  
  "id": "tool-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful game master assistant"  
    },  
    {  
      "role": "user",  
      "content": "Generate a strength stat for a warrior character. Apply a +2 racial bonus modifier."  
    }  
  ],  
  "tools": [  
    {  
      "type": "function",  
      "function": {  
        "name": "StatRollAPI",  
        "description": "Generates character stats by rolling 4d6, dropping the lowest die result, and applying a modifier.",  
        "parameters": {  
          "type": "object",  
          "properties": {  
            "modifier": {  
              "description": "An integer representing the modifier to apply to the total of the stat roll.",  
              "type": "integer"  
            }  
          },  
          "required": ["modifier"]  
        }  
      }  
    }  
  ],  
  "reference_answer": {  
    "tool_called": "StatRollAPI",  
    "tool_parameters": {  
      "modifier": 2  
    },  
    "expected_behavior": "Call StatRollAPI with modifier=2 and return the calculated stat value"  
  }  
}
```

## 필드 설명
<a name="nova-hp-rft-field-descriptions"></a>


| 필드 | 설명 | 추가 참고 사항 | 필수 | 
| --- |--- |--- |--- |
| id | 이 RFT 예제의 고유 식별자 | 문자열(예: 'sample-001'). 추적 및 중복 제거에 유용합니다. | 아니요 | 
| messages | 프롬프트 및 컨텍스트를 정의하는 채팅 메시지의 정렬된 목록 |  객체의 배열입니다. 모델은 이를 순서대로 확인합니다. 일반적으로 시스템 메시지로 시작한 다음 사용자로 진행합니다. | 예 | 
| messages[].role | 메시지에서 화자 | 공통 값: 'system', 'user'(다른 컨텍스트에서 때때로 'assistant') | 아니요 | 
| messages[].content | 메시지의 텍스트 콘텐츠 | 일반 문자열. 시스템의 경우 지침, 사용자의 경우 태스크 또는 입력에 해당합니다. | 아니요 | 
| 도구 | 이 예제에서 모델에 사용할 수 있는 도구 사양 | 배열. 각 항목은 도구의 인터페이스와 메타데이터를 정의합니다. 유형으로 'function' 또는 'internal'이 포함될 수 있습니다. | 아니요 | 
| reference\$1answer | 이 예제의 예상 모델 출력 | 태스크에 따라 문자열 또는 객체에 해당합니다. 평가 또는 훈련의 대상으로 사용됩니다. | 아니요 | 

**참고**  
추가 사용자 지정 필드(예: task\$1id, difficulty\$1level, context\$1data)는 검증되지 않으며 보상 함수에 메타데이터로 전달됩니다.

## 하이퍼파라미터 지침
<a name="nova-hp-rft-monitoring-hyperparams"></a>

훈련 접근 방식을 기반으로 다음과 같은 권장 하이퍼파라미터를 사용합니다.

**일반:**
+ 에포크: 1
+ 학습률(lr): 1e-7
+ 세대 수: 8
+ 최대 새 토큰 수: 8192
+ 배치 크기: 256

**저순위 적응(LoRA)**
+ LoRA 순위: 32

**참고**  
데이터세트 크기 및 검증 성능에 따라 이러한 값을 조정합니다. 훈련 지표를 모니터링하여 과적합을 방지합니다.

## 추가 속성
<a name="nova-hp-rft-additional-properties"></a>

'additionalProperties': true 설정을 사용하면 핵심 스키마 요구 사항 이외의 사용자 지정 필드를 포함할 수 있으므로 적절한 평가를 위해 보상 함수에 필요한 데이터를 유연하게 추가할 수 있습니다.

### 일반적인 추가 필드
<a name="nova-hp-rft-common-fields"></a>

다음과 같은 유형의 추가 필드를 포함할 수 있습니다.

**메타데이터:**
+ task\$1id: 추적을 위한 고유 식별자
+ difficulty\$1level: 문제 복잡성 지표
+ domain: 주제 영역 또는 카테고리
+ expected\$1reasoning\$1steps: 해법의 단계 수

**평가 기준:**
+ evaluation\$1criteria: 특정 등급 루브릭
+ custom\$1scoring\$1weights: 여러 측면의 상대적 중요도
+ context\$1data: 문제에 대한 배경 정보
+ external\$1references: 관련 설명서 또는 리소스에 대한 링크

### 추가 속성이 있는 예제
<a name="nova-hp-rft-additional-example"></a>

다음 예제에는 사용자 지정 메타데이터 필드가 포함되어 있습니다.

```
{  
  "id": "algebra_001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a math tutor"  
    },  
    {  
      "role": "user",  
      "content": "Solve: 2x + 5 = 13"  
    }  
  ],  
  "reference_answer": {  
    "solution": "x = 4",  
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]  
  },  
  "task_id": "algebra_001",  
  "difficulty_level": "easy",  
  "domain": "algebra",  
  "expected_reasoning_steps": 3  
}
```

## 데이터세트 크기 권장 사항
<a name="nova-hp-rft-dataset-size"></a>

### 시작점
<a name="nova-hp-rft-starting-point"></a>

다음과 같은 최소 데이터세트 크기로 시작합니다.
+ 최소 100개의 훈련 예제
+ 최소 100개의 평가 예제

모델 응답에서 일관되게 실행되는 신뢰할 수 있는 보상 함수와 고품질 입력 데이터의 우선순위를 지정합니다.

### 평가 우선 접근 방식
<a name="nova-hp-rft-evaluation-first"></a>

대규모 RFT 훈련에 투자하기 전에 모델의 기준 성능을 평가합니다.
+ **높은 성능(> 95% 보상)**: RFT가 불필요할 수 있음 - 모델이 이미 잘 작동함
+ **매우 낮은 성능(0% 보상)**: 먼저 SFT로 전환하여 기본 기능을 설정함
+ **중간 성능**: RFT가 적절할 가능성이 큼

이 평가 우선 접근 방식은 보상 함수에 버그가 없도록 보장하고 RFT가 사용 사례에 올바른 방법인지를 결정합니다. 소규모로 시작하여 RFT 워크플로에 익숙해지면서, 문제를 조기에 식별 및 수정하고, 스케일 업하기 전에 접근 방식을 검증하며, 보상 함수 신뢰성을 테스트할 수 있습니다. 검증 후에 더 큰 데이터세트로 확장하여 성능을 더욱 개선할 수 있습니다.

## 효과적인 훈련 데이터의 특성
<a name="nova-hp-rft-effective-data"></a>

### 명확성 및 일관성
<a name="nova-hp-rft-clarity"></a>

좋은 RFT 예제에는 여러 모델 출력에서 정확한 보상을 계산할 수 있는 명확하고 모호하지 않은 입력 데이터가 필요합니다. 다음을 포함하여 데이터에서 노이즈를 방지합니다.
+ 일관되지 않은 형식 지정
+ 모순되는 레이블 또는 지침
+ 모호한 프롬프트
+ 참조 답변 충돌

모호할 경우 훈련 프로세스에서 오해가 발생하고 모델이 의도하지 않은 동작을 학습하게 됩니다.

### 다양성
<a name="nova-hp-rft-diversity"></a>

데이터세트는 강력한 실제 성능을 보장하기 위해 프로덕션 사용 사례의 완전한 다양성을 캡처해야 합니다. 포함:
+ 다양한 문제 유형 및 난이도
+ 여러 입력 형식 및 엣지 케이스
+ 모든 예상 시나리오의 대표 샘플

이러한 다양성은 과적합을 방지하는 데 도움이 되고 모델이 익숙하지 않은 입력을 정상적으로 처리하도록 보장합니다.

### 보상 함수 고려 사항
<a name="nova-hp-rft-reward-considerations"></a>

효율적인 훈련을 위해 보상 함수를 설계합니다.
+ 분이 아닌 초 단위 내 실행
+ Lambda를 사용하여 효과적으로 병렬 처리
+ 일관되고 신뢰할 수 있는 점수 반환
+ 여러 유형의 모델 출력을 정상적으로 처리

빠르고 확장 가능한 보상 함수를 사용하면 대규모로 신속한 반복과 비용 효율적인 실험이 가능합니다.

# RFT 훈련 모니터링
<a name="nova-hp-rft-monitoring"></a>

훈련 중 주요 지표를 모니터링하여 효과적인 학습을 보장하고 잠재적 문제를 조기에 식별합니다.

**Topics**
+ [

## 추적할 주요 지표
](#nova-hp-rft-monitoring-metrics)
+ [

## RFT 이후 평가
](#nova-hp-rft-monitoring-evaluation)
+ [

## 미세 조정 모델 사용
](#nova-hp-rft-monitoring-checkpoints)
+ [

## 제한 사항 및 모범 사례
](#nova-hp-rft-monitoring-limitations)
+ [

## 문제 해결
](#nova-hp-rft-monitoring-troubleshooting)

## 추적할 주요 지표
<a name="nova-hp-rft-monitoring-metrics"></a>

훈련 중에 MlFlow를 사용하여 다음 지표를 모니터링합니다.

**보상 지표:**
+ **평균 보상 점수**: 모델 응답의 전반적인 품질(시간 경과에 따라 증가해야 함)
+ **보상 분포**: 높음, 중간, 낮음 수준의 보상을 받는 응답 비율
+ **훈련 및 검증 보상 비교**: 과적합 감지와 비교

**훈련 지표:**
+ **정책 업데이트**: 성공적인 가중치 업데이트 수
+ **롤아웃 완료율**: 성공적으로 평가된 샘플 비율

**우려되는 패턴:**
+ 보상 정체(열악한 수준의 학습을 나타냄)
+ 훈련 보상이 증가하는 동안 검증 보상 삭제(과적합)
+ 시간 경과에 따라 크게 증가하는 보상 분산(불안정성)
+ 높은 비율의 보상 함수 오류(구현 문제)

**훈련을 중지하는 경우:**
+ 목표 성능 지표를 달성함
+ 보상 정체 및 더 이상 개선되지 않음
+ 검증 성능이 저하됨(과적합 감지됨)
+ 최대 훈련 예산에 도달함

## RFT 이후 평가
<a name="nova-hp-rft-monitoring-evaluation"></a>

훈련이 완료되면 미세 조정된 모델을 평가하여 성능 개선을 평가합니다.
+ **RFT 평가 작업 실행**: RFT 훈련의 체크포인트를 모델로 사용
+ **기준과 비교**: 동일한 테스트 세트에서 기본 모델과 미세 조정된 모델 모두 평가
+ **지표 분석**: 태스크별 지표(정확도, 보상 점수 등) 검토
+ **정성적 검토 수행**: 샘플 출력의 품질을 수동으로 검사

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

## 미세 조정 모델 사용
<a name="nova-hp-rft-monitoring-checkpoints"></a>

**체크포인트에 액세스:**

훈련이 완료되면 체크포인트를 찾습니다.

1. S3에서 `output_path`로 이동

1. `output.tar.gz` 다운로드 및 추출

1. `manifest.json`를 엽니다.

1. `checkpoint_s3_bucket` 값 복사

**추론에 대한 배포:**

추론 또는 추가 훈련을 위해 체크포인트 S3 경로를 사용합니다.

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

배포 및 추론 지침은 추론 섹션을 참조하세요.

## 제한 사항 및 모범 사례
<a name="nova-hp-rft-monitoring-limitations"></a>

**현재 제한 사항:**

**베타 제한 사항:**
+ RFT에 대한 새 RIG 그룹을 생성해야 합니다. 이 제한 사항은 GA에서 해결될 예정입니다.
+ 인스턴스 유형 요구 사항: P5 인스턴스(최소 8x P5.48xlarge)만 지원됩니다. 출시 예정: 더 작은 인스턴스 유형에 대한 지원(ETA: 2025년 1월 중순).

**기능 제한 사항:**
+ 15분의 Lambda 제한 시간: 보상 함수는 15분 이내에 완료되어야 함
+ 싱글턴만 - 멀티턴 대화는 지원되지 않음
+ 검증 데이터세트: 훈련 중에는 지원되지 않습니다. 별도의 평가 작업을 사용하여 훈련 진행 상황을 평가합니다.

**훈련 고려 사항:**
+ 낮은 보상 시나리오: 5% 미만의 예제에서 긍정적인 보상을 받을 때 어려움을 겪을 수 있음 - SFT 우선 고려
+ 데이터 요구 사항: 효과적으로 학습하려면 충분한 다양성이 필요함
+ 컴퓨팅 비용: 지도 미세 조정보다 비용이 많이 발생함

**Nova Forge에서는 다음과 같은 제한 사항 중 일부가 제거되었습니다.**
+ 멀티턴 대화 지원
+ 15분 제한 시간을 초과하는 보상 함수 허용
+ 고급 알고리즘 및 조정 옵션 제공
+ 복잡한 엔터프라이즈 사용 사례를 위해 설계되었으며, 특히 프론티어 모델을 빌드하도록 조정됨

**모범 사례:**

**작게 시작한 다음 규모 조정:**
+ 최소 데이터세트(100\$1200개의 예제)와 소수의 훈련 에포크로 시작
+ 스케일 업하기 전에 접근 방식 검증
+ 결과를 기반으로 점진적으로 데이터세트 크기 및 훈련 단계 증가

**SFT 우선 시 기준:**
+ 보상 점수가 지속적으로 낮은 경우(예: 항상 0) RFT 전에 SFT 수행
+ 효과적으로 개선하려면 RFT에 합리적인 기준 성능이 필요함

**효율적인 보상 함수 설계:**
+ 분이 아닌 초 단위 내 실행
+ 외부 API 직접 호출 최소화
+ 효율적인 알고리즘 및 데이터 구조 사용
+ 적절한 오류 처리 구현
+ 훈련 전에 철저하게 테스트
+ Lambda의 병렬 조정 기능 활용

**적극적으로 훈련 모니터링:**
+ 시간 경과에 따른 평균 보상 점수 추적
+ 여러 샘플에서 보상 분포 감시
+ 훈련 보상 및 검증 보상 비교
+ 우려되는 패턴(정체, 과적합, 불안정) 감지

**결과를 기반으로 반복:**
+ 여러 번 반복 후에도 보상이 개선되지 않으면 보상 함수 설계 조정
+ 데이터세트 다양성을 늘려 더 명확한 학습 신호 제공
+ 보상이 계속 0 근처로 유지되는 경우 SFT로 전환 고려
+ 여러 하이퍼파라미터(학습 속도, 배치 크기)로 실험

**데이터 품질 최적화:**
+ 다양한 대표 예제 보장
+ 엣지 케이스 및 어려운 샘플 포함
+ 보상 함수가 모든 예제 유형의 점수를 올바르게 매기는지 확인
+ 보상 함수를 혼동하는 샘플 제거 또는 수정

## 문제 해결
<a name="nova-hp-rft-monitoring-troubleshooting"></a>

**보상 함수 오류:**

증상: 훈련 중 보상 함수 직접 호출에서 높은 오류 비율


| 문제 | 증상 | 해결 방법 | 
| --- |--- |--- |
| Lambda 제한 시간 | 15분 후 빈번한 제한 시간 초과 | 함수 성능 최적화, 복잡한 평가에 Nova Forge 고려 | 
| 동시성 부족 | Lambda 스로틀링 오류 | lambda\$1concurrency\$1limit 증가 또는 할당량 증가 요청 | 
| 휴효하지 않은 반환 형식 | 형식 오류와 함께 훈련 실패 | 반환 구조가 필수 인터페이스 형식과 일치하는지 확인 | 
| 처리되지 않은 예외 | 간헐적 오류 | 포괄적인 오류 처리 및 로깅 추가 | 
| 외부 API 실패 | 일관되지 않은 점수 | 재시도 로직 및 대체 전략 구현 | 

**훈련 성능 저하:**

증상: 보상이 개선되지 않거나 낮은 값으로 정체됨

해결 방법:
+ **보상 함수 정확성 확인**: 알려진 좋은 예제 및 잘못된 예제로 테스트
+ **기준 성능 확인**: 기본 모델 평가, 정확도가 거의 0에 가까우면 SFT 우선 수행
+ **데이터 다양성 증가**: 여러 시나리오를 다루는 다양한 예제 더 추가
+ **하이퍼파라미터 조정**: 여러 학습률 또는 배치 크기 시도
+ **보상 신호 품질 검토**: 보상에서 좋은 응답과 나쁜 응답을 구별하는지 확인

**과적합:**

증상: 훈련 보상은 증가하지만 검증 보상은 감소함

해결 방법:
+ **훈련 단계 축소**: 조기에 훈련 중지
+ **데이터세트 크기 증가**: 훈련 예제 더 추가
+ **정규화 추가**: `weight_decay` 또는 `entropy_coeff` 조정
+ **데이터 다양성 증가**: 훈련 세트가 전체 분산을 나타내도록 보장