

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 모델 평가
<a name="model-customize-mtrl-evaluation"></a>

 평가는 프롬프트 세트에 대해 에이전트를 실행하고 보상, pass@k 및 궤적 지표를 보고합니다. 이를 사용하여 미세 조정된 모델을 기본 모델과 비교하거나 배포 전에 후보를 벤치마킹합니다.

 **참고:** 평가 작업은를 사용합니다`JobCategory: AgentRFTEvaluation`(학습에 사용된 `AgentRFT` 것과 다름). `CreateJob` 및에서이 범주를 사용하여 평가 작업을 `DescribeJob` 호출합니다.

## 평가 데이터 준비
<a name="model-customize-mtrl-evaluation-preparing-data"></a>

 평가 데이터 세트는 훈련 데이터 세트와 동일한 형식과 스키마를 사용합니다. [프롬프트 데이터 세트 형식](model-customize-mtrl-assets.md#model-customize-mtrl-assets-prompt-dataset-format)을(를) 참조하세요. 아래 지침은 평가별로 다릅니다.

1. **훈련 데이터 세트에서 평가 데이터를 보관합니다.** 점수가 성능을 과장하므로 훈련 프롬프트를 평가하지 마세요. 홀드아웃 세트에 대한 데이터 부분을 예약하거나 별도의 평가 데이터 세트를 유지 관리합니다. 결과가 비슷하도록 반복 간에 동일한 평가 세트를 유지합니다.

1. **훈련 프롬프트 형식과 일치시킵니다.** 에이전트는 훈련 프롬프트를 구문 분석한 것과 동일한 방식으로 평가 프롬프트를 구문 분석해야 합니다. 훈련 중에 인코딩 또는 암호화를 사용한 경우 여기에서 동일한 구조를 사용합니다. 동일한 코드 경로에서 둘 다 생성하면 드리프트가 방지됩니다.

1. **관심 있는 행동을 다룹니다.** 에이전트가 사용하는 각 도구와 도구 조합을 연습합니다. 회귀가 표시되도록 이전에 장애를 일으킨 프롬프트를 포함합니다.

1. 서비스가 검사 없이 프롬프트를 전달하는 것과 **동일한 방식으로 민감한 콘텐츠를 보호합니다**.

## 평가 작업 시작
<a name="model-customize-mtrl-evaluation-launching"></a>

훈련이 완료되면 다음 방법 중 하나를 사용하여 모델을 평가합니다.

### SageMaker AI Studio
<a name="model-customize-mtrl-evaluation-launching-studio"></a>
+ 사용자 지정 모델의 세부 정보 페이지로 이동합니다(**모델** > **내 모델** > MTRL 모델 선택).
+ **평가를** 선택하여 평가 구성 페이지를 엽니다.
+ 평가 유형으로 **Multi-Turn RL**을 선택합니다.
+ 에이전트 환경 구성 - Bedrock AgentCore 런타임을 선택하거나 Lambda 전달자 ARN을 제공합니다.
+ 평가 데이터 세트(S3 URI 또는 보류된 평가 프롬프트가 포함된 등록된 데이터 세트)를 제공합니다.
+ **제출**을 선택하여 평가 작업을 시작합니다.

### SageMaker AI Python SDK
<a name="model-customize-mtrl-evaluation-launching-sdk"></a>

는 평가 작업을 시작하기 위한 상위 수준 인터페이스를 `MultiTurnRLEvaluator` 제공합니다. 완료된 트레이너를 전달하면 평가자는 모델 패키지 ARN, 에이전트 구성 및 에이전트 한정자를 자동으로 확인합니다.

**미세 조정된 모델 평가**

```
from sagemaker.train.evaluate import MultiTurnRLEvaluator
from sagemaker.train.multi_turn_rl_trainer import MultiTurnRLTrainer

# Attach to a completed training job
trainer = MultiTurnRLTrainer.attach(job_name="my-mtrl-job-20260512082005")

# Minimal evaluator — everything else inferred from trainer
evaluator = MultiTurnRLEvaluator(
    model=trainer,
    dataset="s3://my-bucket/eval-prompts.parquet",
    s3_output_path="s3://my-bucket/eval-output/",
)

execution = evaluator.evaluate()
print(f"Evaluation started: {execution.arn}")

# Wait for completion
execution.wait()
print(f"Status: {execution.status.overall_status}")
print(f"S3 Output: {execution.s3_output_path}")
print(f"MLflow: {execution.mlflow_url}")
```

**기본 모델 평가(훈련 없음)**

기본 모델을 직접 평가할 때는 다음에서 상속할 트레이너가 없으므로가 `agent_config` 필요합니다.

```
from sagemaker.train.evaluate import MultiTurnRLEvaluator

# With Bedrock AgentCore
evaluator_base = MultiTurnRLEvaluator(
    model="openai-reasoning-gpt-oss-20b",
    dataset="s3://my-bucket/eval-prompts.parquet",
    agent_config="arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent",
    s3_output_path="s3://my-bucket/eval-output/base/",
    mlflow_resource_arn="arn:aws:sagemaker:us-west-2:123456789012:mlflow-tracking-server/my-mlflow",
    role="arn:aws:iam::123456789012:role/SageMakerRole",
    accept_eula=True,
)

execution = evaluator_base.evaluate()
execution.wait()
```

**Side-by-side 비교(기본 비교와 미세 조정 비교)**

하나의 파이프라인에서 기본 모델과 미세 조정된 모델을 모두 평가하는 단일 `evaluate()` 호출:

```
comparison_evaluator = MultiTurnRLEvaluator(
    model=trainer,
    dataset="s3://my-bucket/eval-prompts.parquet",
    s3_output_path="s3://my-bucket/eval-output/comparison/",
    evaluate_base_model=True,
)

execution = comparison_evaluator.evaluate()
execution.wait()
print(f"Status: {execution.status.overall_status}")
```

**결과 모니터링 및 검색**

```
# Refresh status
execution.refresh()
print(f"Status: {execution.status.overall_status}")

# Step-level detail
for step in execution.status.step_details:
    print(f"  {step.name}: {step.status}")
    if step.job_arn:
        print(f"    Job ARN: {step.job_arn}")

# MLflow URL
print(f"MLflow: {execution.mlflow_url}")
```

### AWS CLI 및 boto3
<a name="model-customize-mtrl-evaluation-launching-agentcore"></a>

`CreateJob` API를 사용하여 직접 평가 작업을 생성할 수도 있습니다.

**평가 작업 생성(Bedrock AgentCore)**

 평가 작업을 생성하려면가 로 `JobCategory` 설정된 `CreateJob` API를 호출합니다`AgentRFTEvaluation`. 에이전트 설정 및 구성은 훈련 작업과 동일한 프로세스를 따릅니다.

** AWS CLI 사용**

```
aws sagemaker create-job \
  --job-category AgentRFTEvaluation \
  --job-name "my-agent-rft-eval-job" \
  --role-arn "arn:aws:iam::123456789012:role/SageMakerFineTuningJobRole" \
  --job-config-schema-version "1.0.0" \
  --job-config-document '{
    "AgentConfig": {
      "BedrockAgentCoreConfig": {
        "AgentRuntimeArn": "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent"
      }
    },
    "InputDataConfig": [{
      "ChannelName": "evaluation",
      "DataSource": {
        "S3DataSource": {
          "S3DataType": "S3Prefix",
          "S3Uri": "s3://your-bucket-name/eval-prompts/"
        }
      }
    }],
    "OutputDataConfig": {
      "S3OutputPath": "s3://your-bucket-name/eval-output/",
      "MlflowConfig": {
        "MlflowResourceArn": "arn:aws:sagemaker:us-west-2:123456789012:mlflow-app/my-rft-mlflow-app"
      }
    },
    "EvaluationConfig": {
      "BaseModelArn": "arn:aws:sagemaker:us-west-2:aws:hub-content/SageMakerPublicHub/Model/openai-reasoning-gpt-oss-20b",
      "AcceptEula": true,
      "HyperParameters": {"batch": { "eval_group_size": 1 }, "eval_metrics_config": { "pass_k_values": [1, 2, 4, 8, 16, 32], "success_threshold": 1 }}
    }
  }' \
  --region us-west-2
```

**SageMaker AI Python SDK(boto3) 사용**

```
import json
import boto3

sm = boto3.client("sagemaker")

response = sm.create_job(
    JobName="my-agent-rft-eval-job",
    RoleArn="arn:aws:iam::123456789012:role/SageMakerFineTuningJobRole",
    JobCategory="AgentRFTEvaluation",
    JobConfigSchemaVersion="1.0.0",
    JobConfigDocument=json.dumps({
        "AgentConfig": {
            "BedrockAgentCoreConfig": {
                "AgentRuntimeArn": "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent"
            }
        },
        "InputDataConfig": [{
            "ChannelName": "evaluation",
            "DataSource": {
                "S3DataSource": {
                    "S3DataType": "S3Prefix",
                    "S3Uri": "s3://your-bucket-name/eval-prompts/"
                }
            }
        }],
        "OutputDataConfig": {
            "S3OutputPath": "s3://your-bucket-name/eval-output/",
            "MlflowConfig": {
                "MlflowResourceArn": "arn:aws:sagemaker:us-west-2:123456789012:mlflow-app/my-rft-mlflow-app"
            }
        },
        "EvaluationConfig": {
            "BaseModelArn": "arn:aws:sagemaker:us-west-2:aws:hub-content/SageMakerPublicHub/Model/openai-reasoning-gpt-oss-20b",
            "AcceptEula": True,
            "HyperParameters": {"batch": { "eval_group_size": 1 }, "eval_metrics_config": { "pass_k_values": [1, 2, 4, 8, 16, 32], "success_threshold": 1 }}
        }
    })
)

print(f"Eval Job ARN: {response['JobArn']}")
```

**미세 조정된 모델 평가**

 훈련 작업에서 생성된 모델을 평가하려면 `InputModelPackageArn``ModelPackageConfig`에를 포함합니다.

```
import json
import boto3

sm = boto3.client("sagemaker")

response = sm.create_job(
    JobName="my-agent-rft-eval-finetuned",
    RoleArn="arn:aws:iam::123456789012:role/SageMakerFineTuningJobRole",
    JobCategory="AgentRFTEvaluation",
    JobConfigSchemaVersion="1.0.0",
    JobConfigDocument=json.dumps({
        "AgentConfig": {...},
        "InputDataConfig": [...],
        "OutputDataConfig": {...},
        "ModelPackageConfig": {
            "InputModelPackageArn": "arn:aws:sagemaker:us-west-2:123456789012:model-package/my-final-models/1"
        },
        "EvaluationConfig": {...}
    })
)

print(f"Eval Job ARN: {response['JobArn']}")
```

**평가 작업 생성(Lambda 전달자를 사용하는 사용자 지정 에이전트)**

 Bedrock AgentCore 평가와 동일한 접근 방식을 사용하지만 `CustomAgentLambdaConfig`에서를 지정합니다`AgentConfig`.

```
"AgentConfig": {
    "CustomAgentLambdaConfig": {
        "LambdaArn": "arn:aws:lambda:us-west-2:account-id:function:rft-agent-forwarder"
    }
}
```

## 평가 하이퍼파라미터
<a name="model-customize-mtrl-evaluation-hyperparameters"></a>


| 카테고리 | 파라미터 | 유형 | 기본값 | 설명 | 
| --- | --- | --- | --- | --- | 
| 일괄 | eval\_group\_크기 | 정수 | 1 | 프롬프트당 롤아웃 수입니다. 참고: pass@k를 계산하려면 eval\_group\_size >= k를 설정합니다. | 
| eval\_metrics\_config | pass\_k\_값 | 배열 | [1, 2, 4, 8, 16, 32] | pass@k 및 pass^k 지표를 계산하기 위한 k 값 목록입니다. pass@k = 샘플링된 k 롤아웃 중 하나 이상이 성공할 확률입니다. pass^k = 모든 k 롤아웃이 성공할 확률입니다. | 
| eval\_metrics\_config | success\_threshold | 실수 | 1 | 보상 >= success\_threshold인 경우 롤아웃은 “성공”입니다. 이는 pass@k, pass^k, 성공/실패 개수 지표에 적용됩니다. | 
| eval\_샘플링\_파라미터 | temperature | 실수 | 0 | 평가 롤아웃의 샘플링 온도입니다. 참고: 결정적 동작을 방지하려면 pass@k 및 pass^k 지표에 대해이 값을 0 이상으로 늘리는 것이 좋습니다. | 
| eval\_샘플링\_파라미터 | 샘플링\_탑\_p | 실수 | 1 | 평가 롤아웃을 위한 Nucleus 샘플링 컷오프입니다. | 
| eval\_샘플링\_파라미터 | 샘플링\_최대\_토큰 | 정수 | 4096 | 평가 롤아웃 중에 모델이 턴당 생성할 수 있는 최대 토큰입니다. | 
| 롤아웃 | 제한 시간 | 실수 | 600 | 평가 롤아웃이 실패로 처리되고 재시도될 수 있는 시간(초)입니다. | 
| 롤아웃 | 최대\_동시성 | int | 96 | 병렬로 실행할 수 있는 최대 평가 롤아웃 수입니다. | 
| 롤아웃 | max\_retries | int | 3 | 영구 실패로 표시하기 전에 실패한 평가 롤아웃에 대한 재시도 횟수입니다. | 

## 모니터링 평가
<a name="model-customize-mtrl-evaluation-monitoring"></a>

```
aws sagemaker describe-job \
  --job-name "my-agent-rft-eval-job" \
  --job-category AgentRFTEvaluation \
  --region us-west-2
```

## 평가 결과 해석
<a name="model-customize-mtrl-evaluation-results"></a>

 MLflow 앱을 열어 평가 실행에 대해 로깅된 지표, 보상 분포 및 궤적 시각화를 봅니다. 각 지표의 의미에 대한 설명은 아래를 참조하세요.

### 보상 지표(`eval/reward/`)
<a name="model-customize-mtrl-evaluation-results-reward"></a>


| 지표 | 설명 | 
| --- | --- | 
| eval/reward/mean | 모든 롤아웃의 평균 보상 점수입니다. | 
| eval/reward/min | 모든 롤아웃에 대한 최소 보상 점수입니다. | 
| eval/reward/max | 모든 롤아웃의 최대 보상 점수입니다. | 
| eval/reward/std | 모든 롤아웃에서 보상 점수의 표준 편차입니다. | 
| eval/reward/zero\_frac | 정확히 0점을 받은 롤아웃 비율(완전 실패). | 
| eval/reward/pass\_at\_1 | 프롬프트당 샘플 1개 중 1개 이상이 성공할 확률입니다. 이는 주요 성공 지표입니다. | 
| eval/reward/pass\_power\_1 | 전력 가중치를 통한 통과율. | 
| eval/reward/succeeded\_rollouts | 긍정적인 보상을 달성한 총 롤아웃 수입니다. | 
| eval/reward/failed\_rollouts | 0점을 받은 총 롤아웃 수입니다. | 
| eval/reward/num\_prompts | 평가된 고유 프롬프트 수입니다. | 
| eval/reward/rollouts\_per\_prompt | 프롬프트당 생성된 시도 횟수(샘플)입니다. | 
| eval/reward/success\_threshold | 롤아웃을 "성공"으로 계산하는 데 필요한 보상 값입니다. | 
| eval/reward/mean\_within\_groups | 프롬프트 그룹당 평균 보상(rollouts\_per\_prompt > 1 설정 필요). | 
| eval/reward/std\_within\_groups | 각 프롬프트 그룹 내 보상의 표준 편차입니다. | 
| eval/reward/min\_within\_groups | 각 프롬프트 그룹 내의 최소 보상입니다. | 
| eval/reward/max\_within\_groups | 각 프롬프트 그룹 내의 최대 보상입니다. | 

### 토큰 지표(`eval/tokens/`)
<a name="model-customize-mtrl-evaluation-results-token"></a>


| 지표 | 설명 | 
| --- | --- | 
| eval/tokens/prompt\_mean | 토큰의 평균 프롬프트 길이(시스템 프롬프트, 도구 설명 및 멀티턴 컨텍스트 포함). | 
| eval/tokens/response\_mean | 턴당 토큰의 평균 모델 응답 길이입니다. | 
| eval/tokens/response\_min | 토큰에서 가장 짧은 모델 응답입니다. | 
| eval/tokens/response\_max | 토큰에서 가장 긴 모델 응답입니다. | 
| eval/tokens/response\_std | 응답 길이의 표준 편차입니다. 분산이 높으면 에이전트 동작이 일관되지 않을 수 있습니다. | 

### 턴 지표(`eval/turns/`)
<a name="model-customize-mtrl-evaluation-results-turn"></a>


| 지표 | 설명 | 
| --- | --- | 
| eval/turns/mean | 롤아웃당 평균 회전 수입니다. 값이 높으면 에이전트가 반복되거나 과도하게 재시도하고 있음을 나타낼 수 있습니다. | 
| eval/turns/min | 페스트는 모든 롤아웃을 전환합니다. | 
| eval/turns/max | 대부분의는 모든 롤아웃을 전환합니다. 매우 높은 값은 에이전트가 작업을 해결하지 않고 멈췄음을 나타냅니다. | 

### 로그 확률 지표(`eval/logprob/`)
<a name="model-customize-mtrl-evaluation-results-logprob"></a>


| 지표 | 설명 | 
| --- | --- | 
| eval/logprob/nz\_mean | 0이 아닌(패딩되지 않은) 토큰의 평균 로그 확률입니다. 값이 0에 가까우면 모델 신뢰도가 높음을 나타냅니다. | 
| eval/logprob/nz\_min | 가장 낮은 로그 확률 토큰(가장 신뢰도가 낮은 예측). | 
| eval/logprob/nz\_max | 가장 높은 로그 확률 토큰(가장 신뢰할 수 있는 예측). | 
| eval/logprob/nz\_std | 0이 아닌 로그 확률의 표준 편차입니다. 값이 낮으면 일관되게 높은 신뢰도를 의미합니다. | 
| eval/logprob/zero\_frac | 로그 확률이 정확히 0인 토큰 비율(확률 1.0), 일반적으로 패딩 또는 강제 토큰. | 
| eval/logprob/zero\_count | 제로 로그프로브 토큰의 총 수입니다. | 
| eval/logprob/zero\_per\_group | 프롬프트 그룹당 평균 제로 로그프로브 토큰입니다. | 

### 타이밍 지표(`timing_s/`)
<a name="model-customize-mtrl-evaluation-results-timing"></a>


| 지표 | 설명 | 
| --- | --- | 
| timing\_s/eval | 평가의 총 벽시계 시간을 초 단위로 표시합니다. 프롬프트당 평균 시간을 eval/reward/num\_prompts 로 나눕니다. | 

### 일반적인 패턴을 진단하는 방법
<a name="model-customize-mtrl-evaluation-results-diagnose"></a>


| 패턴 | 가능한 원인 | 
| --- | --- | 
| pass\_at\_1 = 0, 높음 turns/mean | 에이전트가 작업을 해결하지 않고 반복되고 있습니다. 궤적에서 도구 사용 및 작업 패턴을 확인합니다. | 
| pass\_at\_1 = 0, 낮음 tokens/response\_mean | 에이전트가 매우 짧은(비어 있거나 잘못된 형식일 수 있음) 응답을 생성합니다. 프롬프트 형식 및 모델 호환성을 확인합니다. | 
| 높음 turns/max 및 낮음 turns/min | 에이전트가 프롬프트 간에 일관되지 않은 동작을 보이고 있습니다. 일부 작업은 훨씬 더 어렵거나 에이전트가 특정 도구 상호 작용에서 실패할 수 있습니다. | 
| 높은 신뢰도(logprob/nz\_mean0에 가까움)이지만 낮은 보상 | 모델이 잘못된 출력을 자신 있게 생성하고 있습니다. 더 많은 훈련 데이터 다양성 또는 보상 신호 구체화가 필요할 수 있습니다. | 
| zero\_frac = 1.0 보상 | 전체 실패. 에이전트 배포, 도구 연결 및 평가 데이터 세트 형식이 올바른지 확인합니다. | 

 원시 결과의 경우에 `S3OutputPath` 지정된에 기록된 아티팩트를 검토합니다`OutputDataConfig`.

## 평가 한도 및 할당량
<a name="model-customize-mtrl-evaluation-limits"></a>

 AWS 서비스 할당량을 사용하여 최대 동시 평가 작업 수에 대한 한도 증가를 요청합니다.


| 할당량 | 기본값 | 
| --- | --- | 
| rft-evaluation-job 최대 동시 작업 | 1 | 