

# RFT 평가
<a name="nova-rft-evaluation"></a>

## RFT 평가란 무엇인가요?
<a name="nova-rft-eval-what-is"></a>

RFT 평가를 사용하면 강화 학습 훈련 이전, 도중 또는 이후에 사용자 지정 보상 함수를 통해 모델의 성능을 평가할 수 있습니다. 사전 정의된 지표를 사용하는 표준 평가와 달리, RFT 평가를 사용하면 특정 요구 사항에 따라 모델 출력의 점수를 계산하는 Lambda 함수를 통해 고유한 성공 기준을 정의할 수 있습니다.

## RFT로 평가하는 이유는 무엇인가요?
<a name="nova-rft-eval-why"></a>

RL 미세 조정 프로세스에서 다음을 지원하는지 확인하려면 평가가 중요합니다.
+ 특정 사용 사례 및 인적 값에 맞게 모델 정렬 개선
+ 주요 태스크에 대한 모델 기능 유지 관리 또는 개선
+ 다른 태스크에서 사실성 감소, 세부성 증가 또는 성능 저하와 같은 의도하지 않은 부작용 방지
+ 보상 함수에 정의된 대로 사용자 지정 성공 기준 충족

## RFT 평가를 사용해야 하는 경우
<a name="nova-rft-eval-when"></a>

다음 시나리오에서 RFT 평가를 사용합니다.
+ RFT 훈련 이전: 평가 데이터세트에서 기준 지표 설정
+ RFT 훈련 도중: 중간 체크포인트를 사용하여 훈련 진행 상황 모니터링
+ RFT 훈련 이후: 최종 모델이 요구 사항을 충족하는지 검증
+ 모델 비교: 일관된 보상 기준을 사용하여 여러 모델 버전 평가

**참고**  
사용자 지정 도메인별 지표가 필요한 경우 RFT 평가를 사용합니다. 범용 평가(정확성, 복잡성, BLEU)의 경우 표준 평가 방법을 사용합니다.

## 데이터 형식 요구 사항
<a name="nova-rft-eval-data-format"></a>

### 입력 데이터 구조
<a name="nova-rft-eval-input-structure"></a>

RFT 평가 입력 데이터는 OpenAI 강화 미세 조정 형식을 따라야 합니다. 각 예제는 다음을 포함하는 JSON 객체입니다.
+ `messages` - `system` 및 `user` 역할을 포함하는 대화 턴 배열
+ `reference_answer` - 보상 함수가 점수 계산을 위해 사용하는 예상 출력 또는 실측 데이터

### 데이터 형식 예제
<a name="nova-rft-eval-data-example"></a>

```
{  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "type": "text",  
          "text": "Solve for x. Return only JSON like {\"x\": <number>}. Equation: 2x + 5 = 13"  
        }  
      ]  
    }  
  ],  
  "reference_answer": {  
    "x": 4  
  }  
}
```

### 현재 제한 사항
<a name="nova-rft-eval-limitations"></a>
+ 텍스트만 해당: 멀티모달 입력(이미지, 오디오, 비디오)은 지원되지 않음
+ 싱글턴 대화: 단일 사용자 메시지만 지원(멀티턴 대화 없음)
+ JSON 형식: 입력 데이터는 JSONL 형식이어야 함(줄당 JSON 객체 1개)
+ 모델 출력: 지정된 모델에서 생성된 완료를 대상으로 평가가 수행됨

## 평가 레시피 준비
<a name="nova-rft-eval-recipe"></a>

### 샘플 노트북
<a name="nova-rft-eval-sample-notebook"></a>

전체 예제는 [평가 노트북](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-model-evaluation.html#nova-model-evaluation-notebook)을 참조하세요.

### 샘플 레시피 구성
<a name="nova-rft-eval-sample-recipe"></a>

```
run:  
  name: nova-lite-rft-eval-job    
  model_type: amazon.nova-lite-v1:0:300k    
  model_name_or_path: s3://escrow_bucket/model_location # [MODIFIABLE] S3 path to your model or model identifier  
  replicas: 1 # [MODIFIABLE] For SageMaker Training jobs only; fixed for HyperPod jobs  
  data_s3_path: "" # [REQUIRED FOR HYPERPOD] Leave empty for SageMaker Training jobs and use TrainingInput in sagemaker python SDK  
  output_s3_path: "" # [REQUIRED] Output artifact S3 path for evaluation results  
  
evaluation:  
  task: rft_eval # [FIXED] Do not modify  
  strategy: rft_eval # [FIXED] Do not modify  
  metric: all # [FIXED] Do not modify  
  
# Inference Configuration  
inference:  
  max_new_tokens: 8192 # [MODIFIABLE] Maximum tokens to generate  
  top_k: -1 # [MODIFIABLE] Top-k sampling parameter  
  top_p: 1.0 # [MODIFIABLE] Nucleus sampling parameter  
  temperature: 0 # [MODIFIABLE] Sampling temperature (0 = deterministic)  
  top_logprobs: 0 # [MODIFIABLE] Set between 1-20 to enable logprobs output  
  
# =============================================================================  
# Bring Your Own Reinforcement Learning Environment  
# =============================================================================  
rl_env:  
  reward_lambda_arn: arn:aws:lambda:<region>:<account_id>:function:<reward-function-name>
```

## 보상 함수 사전 설정
<a name="nova-rft-eval-preset-functions"></a>

RFT Lambda 함수에 쉽게 통합할 수 있도록 두 가지 사전 설정 보상 함수(`prime_code` 및 `prime_math`)를 Lambda 계층으로 사용할 수 있습니다.

### 개요
<a name="nova-rft-eval-preset-overview"></a>

이러한 사전 설정 함수는 다음에 대한 즉각적인 평가 기능을 제공합니다.
+ `prime_code` - 코드 생성 및 정확성 평가
+ `prime_math` - 수학적 추론 및 문제 해결 평가

### 빠른 설정
<a name="nova-rft-eval-preset-setup"></a>

1. [nova-custom-eval-sdk 릴리스](https://github.com/aws/nova-custom-eval-sdk/releases)에서 Lambda 계층을 다운로드하세요.

1. AWS Command Line Interface(AWS CLI)를 사용하여 Lambda 계층을 게시하세요.

   ```
   aws lambda publish-layer-version \
       --layer-name preset-function-layer \
       --description "Preset reward function layer with dependencies" \
       --zip-file fileb://universal_reward_layer.zip \
       --compatible-runtimes python3.9 python3.10 python3.11 python3.12 \
       --compatible-architectures x86_64 arm64
   ```

1. AWS Management Console에서 Lambda 함수에 계층을 추가하세요(사용자 지정 계층에서 preset-function-layer를 선택하고 numpy 종속성에서 AWSSDKPandas-Python312도 추가).

1. Lambda 코드에서 다음을 가져와 사용하세요.

   ```
   from prime_code import compute_score  # For code evaluation
   from prime_math import compute_score  # For math evaluation
   ```

### prime\_code 함수
<a name="nova-rft-eval-preset-code"></a>

테스트 사례를 기준으로 코드를 실행하고 정확성을 측정하여 Python 코드 생성 작업을 평가합니다.

**입력 데이터세트 형식 예제**

```
{"messages":[{"role":"user","content":"Write a function that returns the sum of two numbers."}],"reference_answer":{"inputs":["3\n5","10\n-2","0\n0"],"outputs":["8","8","0"]}}
{"messages":[{"role":"user","content":"Write a function to check if a number is even."}],"reference_answer":{"inputs":["4","7","0","-2"],"outputs":["True","False","True","True"]}}
```

**주요 기능**
+ 마크다운 코드 블록에서 자동 코드 추출
+ 함수 탐지 및 직접 호출 기반 테스트
+ 제한 시간 보호를 사용하는 테스트 사례 실행
+ 구문 검증 및 컴파일 검사
+ 트레이스백을 사용하는 세부 오류 보고

### prime\_math 함수
<a name="nova-rft-eval-preset-math"></a>

기호 수학 지원을 통해 수학 추론 및 문제 해결 기능을 평가합니다.

**입력 형식**

```
{"messages":[{"role":"user","content":"What is the derivative of x^2 + 3x?."}],"reference_answer":"2*x + 3"}
```

**주요 기능**
+ SymPy를 사용하는 기호 수학 평가
+ 여러 응답 형식(LaTeX, 일반 텍스트, 기호)
+ 수학적 동등성 검사
+ 표현식 정규화 및 단순화

### 데이터 형식 요구 사항
<a name="nova-rft-eval-preset-data-format"></a>

**코드 평가의 경우**
+ 입력: 함수 인수의 배열(적절한 유형: 정수, 문자열 등)
+ 출력: 예상 반환 값의 배열(적절한 유형: 부울, 숫자 등)
+ 코드: 명확한 함수 정의를 포함하는 Python에 있어야 함

**수학 평가의 경우**
+ 참조 답변: 수학 표현식 또는 숫자 값
+ 응답: LaTeX, 일반 텍스트 또는 기호 표기법일 수 있음
+ 동등성: 문자열 일치뿐만 아니라 기호적으로 확인됨

### 모범 사례
<a name="nova-rft-eval-preset-best-practices"></a>
+ 테스트 사례에서 적절한 데이터 유형 사용(정수 대 문자열, 부울 대 'True')
+ 코드 문제에서 명확한 함수 서명 제공
+ 테스트 입력에서 엣지 케이스 포함(0, 음수, 빈 입력)
+ 참조 답변에서 일관된 수학 표현식 형식 지정
+ 배포 전에 샘플 데이터를 사용하여 보상 함수 테스트

### 오류 처리
<a name="nova-rft-eval-preset-error-handling"></a>

두 함수 모두 다음에 대한 강력한 오류 처리 기능을 포함합니다.
+ 생성된 코드에서 컴파일 오류
+ 실행 중 런타임 예외
+ 잘못 구성된 입력 데이터
+ 무한 루프에 대한 제한 시간 시나리오
+ 유효하지 않은 수학 표현식

## 보상 함수 생성
<a name="nova-rft-eval-custom-reward"></a>

### Lambda ARN 요구 사항
<a name="nova-rft-eval-lambda-arn"></a>

Lambda ARN은 다음 형식을 따라야 합니다.

```
"arn:aws:lambda:*:*:function:*SageMaker*"
```

Lambda에 이 이름 지정 스키마가 없는 경우 이 오류가 발생하며 작업이 실패합니다.

```
[ERROR] Unexpected error: lambda_arn must contain one of: ['SageMaker', 'sagemaker', 'Sagemaker'] when running on SMHP platform (Key: lambda_arn)
```

### Lambda 요청 형식
<a name="nova-rft-eval-lambda-request"></a>

Lambda 함수는 다음 형식으로 데이터를 수신합니다.

```
[  
  {  
    "id": "sample-001",  
    "messages": [  
      {  
        "role": "user",  
        "content": [  
          {  
            "type": "text",  
            "text": "Do you have a dedicated security team?"  
          }  
        ]  
      },  
      {  
        "role": "nova_assistant",  
        "content": [  
          {  
            "type": "text",  
            "text": "As an AI developed by Company, I don't have a dedicated security team..."  
          }  
        ]  
      }  
    ],  
    "reference_answer": {  
      "compliant": "No",  
      "explanation": "As an AI developed by Company, I do not have a traditional security team..."  
    }  
  }  
]
```

**참고**  
메시지 구조에는 입력 데이터 형식과 일치하는 중첩된 `content` 배열이 포함됩니다. `nova_assistant` 역할이 있는 마지막 메시지에는 모델의 생성된 응답이 포함됩니다.

### Lambda 응답 형식
<a name="nova-rft-eval-lambda-response"></a>

Lambda 함수는 다음 형식으로 데이터를 반환해야 합니다.

```
[  
  {  
    "id": "sample-001",  
    "aggregate_reward_score": 0.75,  
    "metrics_list": [  
      {  
        "name": "accuracy",  
        "value": 0.85,  
        "type": "Metric"  
      },  
      {  
        "name": "fluency",  
        "value": 0.90,  
        "type": "Reward"  
      }  
    ]  
  }  
]
```

**응답 필드**
+ `id` - 입력 샘플 ID와 일치해야 함
+ `aggregate_reward_score` - 전체 점수(일반적으로 0.0\~1.0)
+ `metrics_list` - 다음을 포함하는 개별 지표의 배열:
  + `name` - 지표 식별자(예: 'accuracy', 'fluency')
  + `value` – 지표 점수(일반적으로 0.0\~1.0)
  + `type` - 'Metric'(보고용) 또는 'Reward'(훈련에 사용됨)

## IAM 권한
<a name="nova-rft-eval-iam"></a>

### 필수 권한
<a name="nova-rft-eval-iam-required"></a>

SageMaker 실행 역할에는 Lambda 함수를 간접 호출할 권한이 있어야 합니다. SageMaker 실행 역할에 이 정책을 추가합니다.

```
{  
  "Version": "2012-10-17",		 	 	   
  "Statement": [  
    {  
      "Effect": "Allow",  
      "Action": [  
        "lambda:InvokeFunction"  
      ],  
      "Resource": "arn:aws:lambda:region:account-id:function:function-name"  
    }  
  ]  
}
```

### Lambda 실행 역할
<a name="nova-rft-eval-iam-lambda"></a>

Lambda 함수의 실행 역할에는 기본 Lambda 실행 권한이 필요합니다.

```
{  
  "Version": "2012-10-17",		 	 	   
  "Statement": [  
    {  
      "Effect": "Allow",  
      "Action": [  
        "logs:CreateLogGroup",  
        "logs:CreateLogStream",  
        "logs:PutLogEvents"  
      ],  
      "Resource": "arn:aws:logs:*:*:*"  
    }  
  ]  
}
```

Lambda 함수가 다른 AWS 서비스(예: 참조 데이터의 경우 S3, 로깅의 경우 DynamoDB)에 액세스하는 경우 해당 권한을 Lambda 실행 역할에 추가합니다.

## 평가 작업 실행
<a name="nova-rft-eval-execute"></a>

1. **데이터 준비** - 데이터 형식 요구 사항에 따라 평가 데이터의 형식을 지정하고 S3에 JSONL 파일 업로드: `s3://your-bucket/eval-data/eval_data.jsonl`

1. **레시피 구성** - 사용자 구성으로 샘플 레시피 업데이트:
   + `model_name_or_path`를 모델 위치로 설정
   + `lambda_arn`을 보상 함수 ARN으로 설정
   + `output_s3_path`를 원하는 출력 위치로 설정
   + 필요에 따라 `inference` 파라미터 조정

   레시피를 `rft_eval_recipe.yaml`로 저장

1. **평가 실행** - 제공된 노트북: 평가 노트북을 사용하여 평가 작업 실행: [평가 노트북](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-model-evaluation.html#nova-model-evaluation-notebook)

1. **진행 상황 모니터링** - 다음을 통해 평가 작업을 모니터링합니다.
   + SageMaker 콘솔: 작업 상태 및 로그 확인
   + CloudWatch Logs: 세부 실행 로그 보기
   + Lambda 로그: 보상 함수 문제 디버깅

## 평가 결과 이해
<a name="nova-rft-eval-results"></a>

### 출력 형식
<a name="nova-rft-eval-output-format"></a>

평가 작업은 결과를 지정된 S3 위치에 JSONL 형식으로 출력합니다. 각 줄에는 하나의 샘플에 대한 평가 결과가 포함됩니다.

```
{  
  "id": "sample-001",  
  "aggregate_reward_score": 0.75,  
  "metrics_list": [  
    {  
      "name": "accuracy",  
      "value": 0.85,  
      "type": "Metric"  
    },  
    {  
      "name": "fluency",  
      "value": 0.90,  
      "type": "Reward"  
    }  
  ]  
}
```

**참고**  
RFT 평가 작업 출력은 Lambda 응답 형식과 동일합니다. 평가 서비스는 Lambda 함수의 응답을 수정하지 않고 전달하여 보상 계산과 최종 결과 사이의 일관성을 보장합니다.

### 결과 해석
<a name="nova-rft-eval-interpret"></a>

**보상 점수 집계**
+ 범위: 일반적으로 0.0(최저)\~1.0(최상)이지만 구현에 따라 다름
+ 용도: 전체 성능을 요약하는 단일 숫자
+ 사용법: 모델 비교, 훈련 대비 개선 추적

**개별 지표**
+ 지표 유형: 분석을 위한 정보용 지표
+ 보상 유형: RFT 훈련 도중 사용되는 지표
+ 해석: 반대 지표를 설계하지 않는 한, 값이 높을수록 일반적으로 더 나은 성능을 나타냄

### 성능 벤치마크
<a name="nova-rft-eval-benchmarks"></a>

'양호'한 성능을 구성하는 요소는 사용 사례에 따라 달라집니다.


| 점수 범위 | 해석 | 작업 | 
| --- | --- | --- | 
| 0.8 - 1.0 | 우수 | 배포 준비된 모델 | 
| 0.6\~0.8 | 양호 | 약간의 개선이 도움이 될 수 있음 | 
| 0.4\~0.6 | 공정 | 상당한 개선이 필요함 | 
| 0.0\~0.4 | 열악 | 훈련 데이터 및 보상 함수 검토 | 

**중요**  
다음은 일반적인 지침입니다. 비즈니스 요구 사항, 기준 모델 성능, 도메인별 제약 조건 및 추가 훈련의 비용 편익 분석을 기반으로 자체 임계치를 정의합니다.

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

### 일반적인 문제
<a name="nova-rft-eval-common-issues"></a>


| 문제 | 원인 | 솔루션 | 
| --- | --- | --- | 
| Lambda 제한 시간 | 복잡한 보상 계산 | Lambda 제한 시간 증가 또는 함수 최적화 | 
| 권한 거부됨 | IAM 권한 누락 | SageMaker 역할이 Lambda를 간접 호출할 수 있는지 확인 | 
| 일관되지 않은 점수 | 비결정적 보상 함수 | 고정 시드 또는 결정론적 로직 사용 | 
| 누락된 결과 | Lambda 오류가 발견되지 않음 | Lambda에서 포괄적인 오류 처리 추가 | 

### 디버그 체크리스트
<a name="nova-rft-eval-debug-checklist"></a>
+ 입력 데이터가 중첩된 콘텐츠 배열을 사용하여 올바른 형식을 따르는지 확인
+ Lambda ARN이 올바르고 함수가 배포되었는지 확인
+ SageMaker → Lambda 간접 호출에 대한 IAM 권한 확인
+ CloudWatch 로그에서 Lambda 오류 검토
+ Lambda 응답이 예상 형식과 일치하는지 확인

## 모범 사례
<a name="nova-rft-eval-best-practices-section"></a>
+ 간단하게 시작: 기본 보상 함수로 시작하고 반복
+ 별도로 Lambda 테스트: 전체 평가 전에 Lambda 테스트 이벤트 사용
+ 소규모 데이터세트에서 검증: 전체 데이터세트 이전에 하위 세트에서 평가 실행
+ 버전 제어: 모델 버전과 함께 보상 함수 버전 추적
+ 비용 모니터링: Lambda 간접 호출 및 컴퓨팅 시간이 비용에 미치는 영향
+ 포괄적인 로그: 디버깅을 위해 Lambda에서 print 문 사용
+ 적절한 제한 시간 설정: 인내와 비용 사이의 균형
+ 지표 문서화: 각 지표가 측정하는 항목을 명확하게 정의

## 다음 단계
<a name="nova-rft-eval-next-steps"></a>

RFT 평가를 완료한 후:
+ 결과가 만족스러운 경우: 프로덕션에 모델 배포
+ 개선이 필요한 경우:
  + 보상 함수 조정
  + 더 많은 훈련 데이터 수집
  + 훈련 하이퍼파라미터 수정
  + 추가 RFT 훈련 반복 실행
+ 지속적인 모니터링: 새 데이터를 사용하여 주기적으로 재평가