

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

# 모델 평가 작업 제출
<a name="model-customize-open-weight-evaluation"></a>

이 섹션에서는 개방형 사용자 지정 모델 평가에 대해 설명합니다. 이를 통해 평가 작업 제출 프로세스를 안내할 수 있습니다. 고급 평가 작업 제출 사용 사례에 대한 추가 리소스가 제공됩니다.

**Topics**
+ [시작하기](model-customize-evaluation-getting-started.md)
+ [평가 유형 및 작업 제출](model-customize-evaluation-types.md)
+ [평가 지표 형식](model-customize-evaluation-metrics-formats.md)
+ [BYOD(Bring-Your-Own-Dataset) 작업에 지원되는 데이터 세트 형식](model-customize-evaluation-dataset-formats.md)
+ [프리셋 및 사용자 지정 스코어러로 평가](model-customize-evaluation-preset-custom-scorers.md)

# 시작하기
<a name="model-customize-evaluation-getting-started"></a>

## SageMaker Studio를 통해 평가 작업 제출
<a name="model-customize-evaluation-studio"></a>

### 1단계: 모델 카드에서 평가로 이동
<a name="model-customize-evaluation-studio-step1"></a>

모델을 사용자 지정한 후 모델 카드에서 평가 페이지로 이동합니다.

개방형 사용자 지정 모델 훈련에 대한 자세한 내용은 [https://docs.aws.amazon.com/sagemaker/latest/dg/model-customize-open-weight-job.html](https://docs.aws.amazon.com/sagemaker/latest/dg/model-customize-open-weight-job.html) 참조하십시오.

SageMaker는 내 모델 탭에서 사용자 지정 모델을 시각화합니다.

![\[등록된 모델 카드 페이지\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/getting-started-registered-model-card.png)


최신 버전 보기를 선택한 다음 평가를 선택합니다.

![\[모델 사용자 지정 페이지\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/getting-started-evaluate-from-model-card.png)


### 2단계: 평가 작업 제출
<a name="model-customize-evaluation-studio-step2"></a>

제출 버튼을 선택하고 평가 작업을 제출합니다. 이렇게 하면 최소 MMLU 벤치마크 작업이 제출됩니다.

지원되는 평가 작업 유형에 대한 자세한 내용은 섹션을 참조하세요[평가 유형 및 작업 제출](model-customize-evaluation-types.md).

![\[평가 작업 제출 페이지\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/getting-started-benchmark-submission.png)


### 3단계: 평가 작업 진행 상황 추적
<a name="model-customize-evaluation-studio-step3"></a>

평가 작업 진행 상황은 평가 단계 탭에서 추적됩니다.

![\[평가 작업 진행 상황\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/getting-started-benchmark-tracking.png)


### 4단계: 평가 작업 결과 보기
<a name="model-customize-evaluation-studio-step4"></a>

평가 작업 결과는 평가 결과 탭에 시각화됩니다.

![\[평가 작업 지표\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/getting-started-benchmark-results.png)


### 5단계: 완료된 평가 보기
<a name="model-customize-evaluation-studio-step5"></a>

완료된 평가 작업은 모델 카드의 평가에 표시됩니다.

![\[완료된 평가 작업\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/getting-started-benchmark-completed-model-card.png)


## SageMaker Python SDK를 통해 평가 작업 제출
<a name="model-customize-evaluation-sdk"></a>

### 1단계: BenchMarkEvaluator 생성
<a name="model-customize-evaluation-sdk-step1"></a>

등록된 훈련된 모델, AWS S3 출력 위치 및 MLFlow 리소스 ARN을에 전달`BenchMarkEvaluator`한 다음 초기화합니다.

```
from sagemaker.train.evaluate import BenchMarkEvaluator, Benchmark  
  
evaluator = BenchMarkEvaluator(  
    benchmark=Benchmark.MMLU,  
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",  
    s3_output_path="s3://<bucket-name>/<prefix>/eval/",  
    mlflow_resource_arn="arn:aws:sagemaker:<region>:<account-id>:mlflow-tracking-server/<tracking-server-name>",  
    evaluate_base_model=False  
)
```

### 2단계: 평가 작업 제출
<a name="model-customize-evaluation-sdk-step2"></a>

`evaluate()` 메서드를 호출하여 평가 작업을 제출합니다.

```
execution = evaluator.evaluate()
```

### 3단계: 평가 작업 진행 상황 추적
<a name="model-customize-evaluation-sdk-step3"></a>

실행 `wait()` 메서드를 호출하여 평가 작업 진행 상황을 실시간으로 업데이트합니다.

```
execution.wait(target_status="Succeeded", poll=5, timeout=3600)
```

### 4단계: 평가 작업 결과 보기
<a name="model-customize-evaluation-sdk-step4"></a>

`show_results()` 메서드를 호출하여 평가 작업 결과를 표시합니다.

```
execution.show_results()
```

# 평가 유형 및 작업 제출
<a name="model-customize-evaluation-types"></a>

## 표준화된 데이터 세트를 사용한 벤치마킹
<a name="model-customize-evaluation-benchmarking"></a>

벤치마크 평가 유형을 사용하여 MMLU 및 BBH와 같은 인기 있는 데이터세트를 포함한 표준화된 벤치마크 데이터세트에서 모델의 품질을 평가합니다.


| 벤치마크 | 사용자 지정 데이터 세트 지원 | 모달리티 | 설명 | Metrics | 전략 | 하위 태스크 사용 가능 | 
| --- | --- | --- | --- | --- | --- | --- | 
| mmlu | 아니요 | 텍스트 | 다중 태스크 언어 이해 - 57개 주제에 걸친 지식을 테스트합니다. | 정확도 | zs\$1cot | 예 | 
| mmlu\$1pro | 아니요 | 텍스트 | MMLU - 전문 하위 세트 - 법률, 의학, 회계, 엔지니어링 등 전문 분야에 중점을 둡니다. | 정확도 | zs\$1cot | 아니요 | 
| bbh | 아니요 | 텍스트 | 고급 추론 태스크 - 높은 수준의 인지 능력과 문제 해결 능력을 테스트하는 도전적 문제의 모음입니다. | 정확도 | fs\$1cot | 예 | 
| gpqa | 아니요 | 텍스트 | 일반 물리학 질문 응답 - 물리 개념 이해와 관련 문제 해결 능력을 평가합니다. | 정확도 | zs\$1cot | 아니요 | 
| math | 아니요 | 텍스트 | 수학적 문제 해결 - 대수학, 미적분학, 문장제 문제 등 여러 주제에서 수학적 추론 능력을 측정합니다. | exact\$1match | zs\$1cot | 예 | 
| strong\$1reject | 아니요 | 텍스트 | 품질 제어 작업 - 부적절하거나 유해하거나 잘못된 콘텐츠를 감지하고 거부하는 모델의 능력을 테스트합니다. | deflection | zs | 예 | 
| ifeval | 아니요 | 텍스트 | 지침 준수 평가 - 모델이 주어진 지침을 얼마나 정확하게 따르고 요구 조건에 맞게 태스크를 완료하는지 측정합니다. | 정확도 | zs | 아니요 | 

BYOD 형식에 대한 자세한 내용은 섹션을 참조하세요[BYOD(Bring-Your-Own-Dataset) 작업에 지원되는 데이터 세트 형식](model-customize-evaluation-dataset-formats.md).

### 사용 가능한 하위 작업
<a name="model-customize-evaluation-benchmarking-subtasks"></a>

다음은 MMLU(Massive Multitask Language Understanding), BBH(Big Bench Hard), StrongReject 및 MATH를 포함한 여러 도메인에서 모델 평가에 사용할 수 있는 하위 작업을 나열합니다. 이러한 하위 태스크를 통해 모델의 특정 기능 및 지식 영역에서 성능을 평가할 수 있습니다.

**MMLU 하위 작업**

```
MMLU_SUBTASKS = [
    "abstract_algebra",
    "anatomy",
    "astronomy",
    "business_ethics",
    "clinical_knowledge",
    "college_biology",
    "college_chemistry",
    "college_computer_science",
    "college_mathematics",
    "college_medicine",
    "college_physics",
    "computer_security",
    "conceptual_physics",
    "econometrics",
    "electrical_engineering",
    "elementary_mathematics",
    "formal_logic",
    "global_facts",
    "high_school_biology",
    "high_school_chemistry",
    "high_school_computer_science",
    "high_school_european_history",
    "high_school_geography",
    "high_school_government_and_politics",
    "high_school_macroeconomics",
    "high_school_mathematics",
    "high_school_microeconomics",
    "high_school_physics",
    "high_school_psychology",
    "high_school_statistics",
    "high_school_us_history",
    "high_school_world_history",
    "human_aging",
    "human_sexuality",
    "international_law",
    "jurisprudence",
    "logical_fallacies",
    "machine_learning",
    "management",
    "marketing",
    "medical_genetics",
    "miscellaneous",
    "moral_disputes",
    "moral_scenarios",
    "nutrition",
    "philosophy",
    "prehistory",
    "professional_accounting",
    "professional_law",
    "professional_medicine",
    "professional_psychology",
    "public_relations",
    "security_studies",
    "sociology",
    "us_foreign_policy",
    "virology",
    "world_religions"
]
```

**BBH 하위 작업**

```
BBH_SUBTASKS = [
    "boolean_expressions",
    "causal_judgement",
    "date_understanding",
    "disambiguation_qa",
    "dyck_languages",
    "formal_fallacies",
    "geometric_shapes",
    "hyperbaton",
    "logical_deduction_five_objects",
    "logical_deduction_seven_objects",
    "logical_deduction_three_objects",
    "movie_recommendation",
    "multistep_arithmetic_two",
    "navigate",
    "object_counting",
    "penguins_in_a_table",
    "reasoning_about_colored_objects",
    "ruin_names",
    "salient_translation_error_detection",
    "snarks",
    "sports_understanding",
    "temporal_sequences",
    "tracking_shuffled_objects_five_objects",
    "tracking_shuffled_objects_seven_objects",
    "tracking_shuffled_objects_three_objects",
    "web_of_lies",
    "word_sorting"
]
```

**수학 하위 작업**

```
MATH_SUBTASKS = [
    "algebra", 
    "counting_and_probability", 
    "geometry",
    "intermediate_algebra", 
    "number_theory", 
    "prealgebra", 
    "precalculus"
]
```

**StrongReject 하위 작업**

```
STRONG_REJECT_SUBTASKS = [
    "gcg_transfer_harmbench", 
    "gcg_transfer_universal_attacks",
    "combination_3", 
    "combination_2", 
    "few_shot_json", 
    "dev_mode_v2",
    "dev_mode_with_rant",
    "wikipedia_with_title", 
    "distractors",
    "wikipedia",
     "style_injection_json", 
    "style_injection_short",
    "refusal_suppression", 
    "prefix_injection", 
    "distractors_negated",
    "poems", 
    "base64", 
    "base64_raw", "
    base64_input_only",
    "base64_output_only", 
    "evil_confidant", 
    "aim", 
    "rot_13",
    "disemvowel", 
    "auto_obfuscation", 
    "auto_payload_splitting", 
    "pair",
    "pap_authority_endorsement", 
    "pap_evidence_based_persuasion",
    "pap_expert_endorsement", 
    "pap_logical_appeal", 
    "pap_misrepresentation"
]
```

### 벤치마크 작업 제출
<a name="model-customize-evaluation-benchmarking-submit"></a>

------
#### [ SageMaker Studio ]

![\[SageMaker Studio를 통한 벤치마킹을 위한 최소 구성\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/benchmark-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
from sagemaker.train.evaluate import get_benchmarks
from sagemaker.train.evaluate import BenchMarkEvaluator

Benchmark = get_benchmarks()

# Create evaluator with MMLU benchmark
evaluator = BenchMarkEvaluator(
benchmark=Benchmark.MMLU,
model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
s3_output_path="s3://<bucket-name>/<prefix>/",
evaluate_base_model=False
)

execution = evaluator.evaluate()
```

SageMaker Python SDK를 통한 평가 작업 제출에 대한 자세한 내용은 [https://sagemaker.readthedocs.io/en/stable/model\$1customization/evaluation.html](https://sagemaker.readthedocs.io/en/stable/model_customization/evaluation.html) 참조하세요.

------

## 판사로서의 대규모 언어 모델(LLMAJ) 평가
<a name="model-customize-evaluation-llmaj"></a>

LLM-as-a-judge(LLMAJ) 평가를 사용하여 다른 경계 모델을 활용하여 대상 모델 응답의 등급을 매깁니다. 평가 작업을 시작하기 위해 `create_evaluation_job` API를 호출하여 AWS Bedrock 모델을 판단자로 사용할 수 있습니다.

지원되는 판사 모델에 대한 자세한 내용은 [https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html) 참조하십시오.

2가지 지표 형식을 사용하여 평가를 정의할 수 있습니다.
+ **기본 제공 지표:** AWS Bedrock 기본 제공 지표를 활용하여 모델의 추론 응답 품질을 분석합니다. 자세한 내용은 [https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-type-judge-prompt.html](https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-type-judge-prompt.html) 참조하십시오.
+ **사용자 지정 지표:** Bedrock Evaluation 사용자 지정 지표 형식으로 사용자 지정 지표를 정의하여 자체 지침을 사용하여 모델의 추론 응답 품질을 분석합니다. 자세한 내용은 [https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-custom-metrics-prompt-formats.html](https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-custom-metrics-prompt-formats.html) 참조하십시오.

### 기본 제공 지표 LLMAJ 작업 제출
<a name="model-customize-evaluation-llmaj-builtin"></a>

------
#### [ SageMaker Studio ]

![\[SageMaker Studio를 통한 LLMAJ 벤치마킹을 위한 최소 구성\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/llmaj-as-judge-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
from sagemaker.train.evaluate import LLMAsJudgeEvaluator

evaluator = LLMAsJudgeEvaluator(
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    evaluator_model="<bedrock-judge-model-id>",
    dataset="s3://<bucket-name>/<prefix>/<dataset-file>.jsonl",
    builtin_metrics=["<builtin-metric-1>", "<builtin-metric-2>"],
    s3_output_path="s3://<bucket-name>/<prefix>/",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

SageMaker Python SDK를 통한 평가 작업 제출에 대한 자세한 내용은 [https://sagemaker.readthedocs.io/en/stable/model\$1customization/evaluation.html](https://sagemaker.readthedocs.io/en/stable/model_customization/evaluation.html) 참조하십시오.

------

### 사용자 지정 지표 LLMAJ 작업 제출
<a name="model-customize-evaluation-llmaj-custom"></a>

사용자 지정 지표(들)를 정의합니다.

```
{
    "customMetricDefinition": {
        "name": "PositiveSentiment",
        "instructions": (
            "You are an expert evaluator. Your task is to assess if the sentiment of the response is positive. "
            "Rate the response based on whether it conveys positive sentiment, helpfulness, and constructive tone.\n\n"
            "Consider the following:\n"
            "- Does the response have a positive, encouraging tone?\n"
            "- Is the response helpful and constructive?\n"
            "- Does it avoid negative language or criticism?\n\n"
            "Rate on this scale:\n"
            "- Good: Response has positive sentiment\n"
            "- Poor: Response lacks positive sentiment\n\n"
            "Here is the actual task:\n"
            "Prompt: {{prompt}}\n"
            "Response: {{prediction}}"
        ),
        "ratingScale": [
            {"definition": "Good", "value": {"floatValue": 1}},
            {"definition": "Poor", "value": {"floatValue": 0}}
        ]
    }
}
```

자세한 내용은 [https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-custom-metrics-prompt-formats.html](https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-custom-metrics-prompt-formats.html) 참조하십시오.

------
#### [ SageMaker Studio ]

![\[사용자 지정 지표 > 사용자 지정 지표 추가를 통해 사용자 지정 지표 업로드\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/custom-llmaj-metrics-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
evaluator = LLMAsJudgeEvaluator(
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    evaluator_model="<bedrock-judge-model-id>",
    dataset="s3://<bucket-name>/<prefix>/<dataset-file>.jsonl",
    custom_metrics=custom_metric_dict = {
        "customMetricDefinition": {
            "name": "PositiveSentiment",
            "instructions": (
                "You are an expert evaluator. Your task is to assess if the sentiment of the response is positive. "
                "Rate the response based on whether it conveys positive sentiment, helpfulness, and constructive tone.\n\n"
                "Consider the following:\n"
                "- Does the response have a positive, encouraging tone?\n"
                "- Is the response helpful and constructive?\n"
                "- Does it avoid negative language or criticism?\n\n"
                "Rate on this scale:\n"
                "- Good: Response has positive sentiment\n"
                "- Poor: Response lacks positive sentiment\n\n"
                "Here is the actual task:\n"
                "Prompt: {{prompt}}\n"
                "Response: {{prediction}}"
            ),
            "ratingScale": [
                {"definition": "Good", "value": {"floatValue": 1}},
                {"definition": "Poor", "value": {"floatValue": 0}}
            ]
        }
    },
    s3_output_path="s3://<bucket-name>/<prefix>/",
    evaluate_base_model=False
)
```

------

## 사용자 지정 득점자
<a name="model-customize-evaluation-custom-scorers"></a>

자체 사용자 지정 scorer 함수를 정의하여 평가 작업을 시작합니다. 시스템은 프라임 수학과 프라임 코드라는 두 가지 기본 제공 득점자를 제공합니다. 자체 득점자 함수를 가져올 수도 있습니다. scorer 함수 코드를 직접 복사하거나 연결된 ARN을 사용하여 자체 Lambda 함수 정의를 가져올 수 있습니다. 기본적으로 두 scorer 유형 모두 F1 점수, ROUGE 및 BLEU와 같은 표준 지표를 포함하는 평가 결과를 생성합니다.

기본 제공 및 사용자 지정 득점자와 해당 요구 사항/계약에 대한 자세한 내용은 섹션을 참조하세요[프리셋 및 사용자 지정 스코어러로 평가](model-customize-evaluation-preset-custom-scorers.md).

### 데이터 세트 등록
<a name="model-customize-evaluation-custom-scorers-register-dataset"></a>

사용자 지정 득점자를 위한 자체 데이터 세트를 SageMaker Hub 콘텐츠 데이터 세트로 등록하여 가져옵니다.

------
#### [ SageMaker Studio ]

Studio에서 전용 데이터 세트 페이지를 사용하여 데이터 세트를 업로드합니다.

![\[SageMaker Studio에 등록된 평가 데이터 세트\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/dataset-registration-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

SageMaker Python SDK에서 전용 데이터 세트 페이지를 사용하여 데이터 세트를 업로드합니다.

```
from sagemaker.ai_registry.dataset import DataSet

dataset = DataSet.create(
    name="your-bring-your-own-dataset",
    source="s3://<bucket-name>/<prefix>/<dataset-file>.jsonl"
)
dataset.refresh()
```

------

### 기본 제공 scorer 작업 제출
<a name="model-customize-evaluation-custom-scorers-builtin"></a>

------
#### [ SageMaker Studio ]

![\[기본 제공 사용자 지정 점수에 대한 코드 실행 또는 수학 답변 중에서 선택\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/builtin-scorer-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
from sagemaker.train.evaluate import CustomScorerEvaluator
from sagemaker.train.evaluate import get_builtin_metrics

BuiltInMetric = get_builtin_metrics()

evaluator_builtin = CustomScorerEvaluator(
    evaluator=BuiltInMetric.PRIME_MATH,
    dataset="arn:aws:sagemaker:<region>:<account-id>:hub-content/<hub-content-id>/DataSet/your-bring-your-own-dataset/<version>",
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    s3_output_path="s3://<bucket-name>/<prefix>/",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

`BuiltInMetric.PRIME_CODE` 기본 제공 점수 평가에서 `BuiltInMetric.PRIME_MATH` 또는를 선택합니다.

------

### 사용자 지정 scorer 작업 제출
<a name="model-customize-evaluation-custom-scorers-custom"></a>

사용자 지정 보상 함수를 정의합니다. 자세한 내용은 [사용자 지정 득점자(자체 지표 가져오기)](model-customize-evaluation-preset-custom-scorers.md#model-customize-evaluation-custom-scorers-byom) 단원을 참조하십시오.

**사용자 지정 보상 함수 등록**

------
#### [ SageMaker Studio ]

![\[SageMaker Studio > 자산 > 평가자 > 평가자 생성 > 보상 함수 생성으로 이동\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/custom-scorer-submission-sagemaker-studio.png)


![\[사용자 지정 득점자 > 사용자 지정 지표에서 등록된 사전 설정 보상 함수를 참조하는 사용자 지정 득점자 평가 작업 제출\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/custom-scorer-benchmark-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
from sagemaker.ai_registry.evaluator import Evaluator
from sagemaker.ai_registry.air_constants import REWARD_FUNCTION

evaluator = Evaluator.create(
    name = "your-reward-function-name",
    source="/path_to_local/custom_lambda_function.py",
    type = REWARD_FUNCTION
)
```

```
evaluator = CustomScorerEvaluator(
    evaluator=evaluator,
    dataset="s3://<bucket-name>/<prefix>/<dataset-file>.jsonl",
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    s3_output_path="s3://<bucket-name>/<prefix>/",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

------

# 평가 지표 형식
<a name="model-customize-evaluation-metrics-formats"></a>

다음 지표 형식에서 모델의 품질을 평가합니다.
+ 모델 평가 요약
+ MLFlow
+ TensorBoard

## 모델 평가 요약
<a name="model-customize-evaluation-metrics-summary"></a>

평가 작업을 제출할 때 AWS S3 출력 위치를 지정합니다. SageMaker는 평가 요약 .json 파일을 위치에 자동으로 업로드합니다. 벤치마크 요약 S3 경로는 다음과 같습니다.

```
s3://<your-provide-s3-location>/<training-job-name>/output/output/<evaluation-job-name>/eval_results/
```

** AWS S3 위치 전달**

------
#### [ SageMaker Studio ]

![\[출력 아티팩트 위치로 전달(AWS S3 URI)\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/s3-output-path-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
evaluator = BenchMarkEvaluator(
    benchmark=Benchmark.MMLU,
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    s3_output_path="s3://<bucket-name>/<prefix>/eval/",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

------

`.json` AWS S3 위치에서 로 직접 읽거나 UI에서 자동으로 시각화합니다.

```
{
  "results": {
    "custom|gen_qa_gen_qa|0": {
      "rouge1": 0.9152812653966208,
      "rouge1_stderr": 0.003536439199232507,
      "rouge2": 0.774569918517409,
      "rouge2_stderr": 0.006368825746765958,
      "rougeL": 0.9111255645823356,
      "rougeL_stderr": 0.003603841524881021,
      "em": 0.6562150055991042,
      "em_stderr": 0.007948251702846893,
      "qem": 0.7522396416573348,
      "qem_stderr": 0.007224355240883467,
      "f1": 0.8428757602152095,
      "f1_stderr": 0.005186300690881584,
      "f1_score_quasi": 0.9156170336744968,
      "f1_score_quasi_stderr": 0.003667700152375464,
      "bleu": 100.00000000000004,
      "bleu_stderr": 1.464411857851008
    },
    "all": {
      "rouge1": 0.9152812653966208,
      "rouge1_stderr": 0.003536439199232507,
      "rouge2": 0.774569918517409,
      "rouge2_stderr": 0.006368825746765958,
      "rougeL": 0.9111255645823356,
      "rougeL_stderr": 0.003603841524881021,
      "em": 0.6562150055991042,
      "em_stderr": 0.007948251702846893,
      "qem": 0.7522396416573348,
      "qem_stderr": 0.007224355240883467,
      "f1": 0.8428757602152095,
      "f1_stderr": 0.005186300690881584,
      "f1_score_quasi": 0.9156170336744968,
      "f1_score_quasi_stderr": 0.003667700152375464,
      "bleu": 100.00000000000004,
      "bleu_stderr": 1.464411857851008
    }
  }
}
```

![\[SageMaker Studio에서 시각화된 사용자 지정 gen-qa 벤치마크의 샘플 성능 지표\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/gen-qa-metrics-visualization-sagemaker-studio.png)


## MLFlow 로깅
<a name="model-customize-evaluation-metrics-mlflow"></a>

**SageMaker MLFlow 리소스 ARN 제공**

SageMaker Studio는 모델 사용자 지정 기능을 처음 사용할 때 각 Studio 도메인에 프로비저닝되는 기본 MLFlow 앱을 사용합니다. SageMaker Studio는 평가 작업 제출 시 기본 MLflow 앱 관련 ARN을 사용합니다.

또한 평가 작업을 제출하고 MLFlow 리소스 ARN을 명시적으로 제공하여 실시간 분석을 위해 지표를 연결된 추적 서버/앱으로 스트리밍할 수 있습니다.

**SageMaker Python SDK**

```
evaluator = BenchMarkEvaluator(
    benchmark=Benchmark.MMLU,
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    s3_output_path="s3://<bucket-name>/<prefix>/eval/",
    mlflow_resource_arn="arn:aws:sagemaker:<region>:<account-id>:mlflow-tracking-server/<tracking-server-name>",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

모델 수준 및 시스템 수준 지표 시각화:

![\[MMLU 벤치마킹 작업에 대한 샘플 모델 수준 오류 및 정확도\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/model-metrics-mlflow.png)


![\[LLMAJ 벤치마킹 작업에 대한 기본 제공 지표 샘플\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/llmaj-metrics-mlflow.png)


![\[MMLU 벤치마킹 작업에 대한 샘플 시스템 수준 지표\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/system-metrics-mlflow.png)


## TensorBoard
<a name="model-customize-evaluation-metrics-tensorboard"></a>

 AWS S3 출력 위치를 사용하여 평가 작업을 제출합니다. SageMaker는 TensorBoard 파일을 위치에 자동으로 업로드합니다.

SageMaker는 TensorBoard 파일을 다음 위치에 있는 AWS S3에 업로드합니다.

```
s3://<your-provide-s3-location>/<training-job-name>/output/output/<evaluation-job-name>/tensorboard_results/eval/
```

**다음과 같이 AWS S3 위치를 전달합니다.**

------
#### [ SageMaker Studio ]

![\[출력 아티팩트 위치로 전달(AWS S3 URI)\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/s3-output-path-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
evaluator = BenchMarkEvaluator(
    benchmark=Benchmark.MMLU,
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    s3_output_path="s3://<bucket-name>/<prefix>/eval/",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

------

**샘플 모델 수준 지표**

![\[벤치마킹 작업의 결과를 표시하는 SageMaker TensorBoard\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/metrics-in-tensorboard.png)


# BYOD(Bring-Your-Own-Dataset) 작업에 지원되는 데이터 세트 형식
<a name="model-customize-evaluation-dataset-formats"></a>

Custom Scorer 및 LLM-as-judge 평가 유형에는 AWS S3에 위치한 사용자 지정 데이터 세트 JSONL 파일이 필요합니다. 다음 지원되는 형식 중 하나를 준수하는 JSON Lines 파일로 파일을 제공해야 합니다. 이 문서의 예제는 명확성을 위해 확장되었습니다.

각 형식에는 고유한 뉘앙스가 있지만 최소한 모두 사용자 프롬프트가 필요합니다.


**필수 필드**  

| Field | 필수 | 
| --- | --- | 
| 사용자 프롬프트 | 예 | 
| 시스템 프롬프트 | 아니요 | 
| 실측 정보 | 사용자 지정 Scorer에만 해당 | 
| 카테고리 | 아니요 | 

**1: OpenAI 형식**

```
{
    "messages": [
        {
            "role": "system",    # System prompt (looks for system role)
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",       # Query (looks for user role)
            "content": "Hello!"
        },
        {
            "role": "assistant",  # Ground truth (looks for assistant role)
            "content": "Hello to you!"
        }
    ]
}
```

**2. SageMaker 평가**

```
{
   "system":"You are an English major with top marks in class who likes to give minimal word responses: ",
   "query":"What is the symbol that ends the sentence as a question",
   "response":"?", # Ground truth
   "category": "Grammar"
}
```

**3. HuggingFace 프롬프트 완료**

표준 형식과 대화 형식이 모두 지원됩니다.

```
# Standard

{
    "prompt" : "What is the symbol that ends the sentence as a question", # Query
    "completion" : "?" # Ground truth
}

# Conversational
{
    "prompt": [
        {
            "role": "user", # Query (looks for user role)
            "content": "What is the symbol that ends the sentence as a question"
        }
    ],
    "completion": [
        {
            "role": "assistant", # Ground truth (looks for assistant role)
            "content": "?"
        }
    ]
}
```

**4. HuggingFace 기본 설정**

표준 형식(문자열)과 대화 형식(메시지 배열)을 모두 지원합니다.

```
# Standard: {"prompt": "text", "chosen": "text", "rejected": "text"}
{
     "prompt" : "The sky is", # Query
     "chosen" : "blue", # Ground truth
     "rejected" : "green"
}

# Conversational:
{
    "prompt": [
        {
            "role": "user", # Query (looks for user role)
            "content": "What color is the sky?"
        }
    ],
    "chosen": [
        {
            "role": "assistant", # Ground truth (looks for assistant role)
            "content": "It is blue."
        }
    ],
    "rejected": [
        {
            "role": "assistant",
            "content": "It is green."
        }
    ]
}
```

**5. Verl 형식**

Verl 형식(현재 및 레거시 형식 모두)은 강화 학습 사용 사례에 지원됩니다. 참조용 Verl 문서: [https://verl.readthedocs.io/en/latest/preparation/prepare\$1data.html](https://verl.readthedocs.io/en/latest/preparation/prepare_data.html)

VERL 형식의 사용자는 일반적으로 실제 응답을 제공하지 않습니다. 어쨌든 제공하려면 `extra_info.answer` 또는 필드 중 하나를 사용합니다. `reward_model.ground_truth``extra_info`가 우선합니다.

SageMaker는 다음 VERL 관련 필드가 있는 경우 메타데이터로 보존합니다.
+ `id`
+ `data_source`
+ `ability`
+ `reward_model`
+ `extra_info`
+ `attributes`
+ `difficulty`

```
# Newest VERL format where `prompt` is an array of messages.
{
  "data_source": "openai/gsm8k",
  "prompt": [
    {
      "content": "You are a helpful math tutor who explains solutions to questions step-by-step.",
      "role": "system"
    },
    {
      "content": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May? Let's think step by step and output the final answer after \"####\".",
      "role": "user"
    }
  ],
  "ability": "math",
  "extra_info": {
    "answer": "Natalia sold 48/2 = <<48/2=24>>24 clips in May.\nNatalia sold 48+24 = <<48+24=72>>72 clips altogether in April and May.\n#### 72",
    "index": 0,
    "question": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May?",
    "split": "train"
  },
  "reward_model": {
    "ground_truth": "72" # Ignored in favor of extra_info.answer
  }
}

# Legacy VERL format where `prompt` is a string. Also supported.
{
  "data_source": "openai/gsm8k",
  "prompt": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May? Let's think step by step and output the final answer after \"####\".",
  "extra_info": {
    "answer": "Natalia sold 48/2 = <<48/2=24>>24 clips in May.\nNatalia sold 48+24 = <<48+24=72>>72 clips altogether in April and May.\n#### 72",
    "index": 0,
    "question": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May?",
    "split": "train"
  }
}
```

# 프리셋 및 사용자 지정 스코어러로 평가
<a name="model-customize-evaluation-preset-custom-scorers"></a>

사용자 지정 득점자 평가 유형을 사용하는 경우 SageMaker Evaluation은 [volcengine/verl](https://github.com/volcengine/verl) RL 훈련 라이브러리에서 가져온 두 개의 기본 제공 득점자('보상 함수'라고도 함) 프라임 수학 및 프라임 코드 또는 Lambda 함수로 구현된 사용자 지정 득점자를 지원합니다.

## 기본 제공 Scorer
<a name="model-customize-evaluation-builtin-scorers"></a>

**프라임 수학**

프라임 수학 채점자는 수학 질문을 프롬프트/쿼리로 포함하고 올바른 답변을 실측 정보로 포함하는 사용자 지정 JSONL 항목 데이터 세트를 기대합니다. 데이터 세트는에 언급된 지원되는 형식 중 하나일 수 있습니다[BYOD(Bring-Your-Own-Dataset) 작업에 지원되는 데이터 세트 형식](model-customize-evaluation-dataset-formats.md).

예제 데이터 세트 항목(명확성을 위해 확장됨):

```
{
    "system":"You are a math expert: ",
    "query":"How many vertical asymptotes does the graph of $y=\\frac{2}{x^2+x-6}$ have?",
    "response":"2" # Ground truth aka correct answer
}
```

**프라임 코드**

프라임 코드 득점자는 `metadata` 필드에 지정된 코딩 문제 및 테스트 사례를 포함하는 항목의 사용자 지정 JSONL 데이터 세트를 기대합니다. 테스트 사례를 각 항목의 예상 함수 이름, 샘플 입력 및 예상 출력으로 구성합니다.

예제 데이터 세트 항목(명확성을 위해 확장됨):

```
{
    "system":"\\nWhen tackling complex reasoning tasks, you have access to the following actions. Use them as needed to progress through your thought process.\\n\\n[ASSESS]\\n\\n[ADVANCE]\\n\\n[VERIFY]\\n\\n[SIMPLIFY]\\n\\n[SYNTHESIZE]\\n\\n[PIVOT]\\n\\n[OUTPUT]\\n\\nYou should strictly follow the format below:\\n\\n[ACTION NAME]\\n\\n# Your action step 1\\n\\n# Your action step 2\\n\\n# Your action step 3\\n\\n...\\n\\nNext action: [NEXT ACTION NAME]\\n\\n",
    "query":"A number N is called a factorial number if it is the factorial of a positive integer. For example, the first few factorial numbers are 1, 2, 6, 24, 120,\\nGiven a number N, the task is to return the list/vector of the factorial numbers smaller than or equal to N.\\nExample 1:\\nInput: N = 3\\nOutput: 1 2\\nExplanation: The first factorial number is \\n1 which is less than equal to N. The second \\nnumber is 2 which is less than equal to N,\\nbut the third factorial number is 6 which \\nis greater than N. So we print only 1 and 2.\\nExample 2:\\nInput: N = 6\\nOutput: 1 2 6\\nExplanation: The first three factorial \\nnumbers are less than equal to N but \\nthe fourth factorial number 24 is \\ngreater than N. So we print only first \\nthree factorial numbers.\\nYour Task:  \\nYou don't need to read input or print anything. Your task is to complete the function factorialNumbers() which takes an integer N as an input parameter and return the list/vector of the factorial numbers smaller than or equal to N.\\nExpected Time Complexity: O(K), Where K is the number of factorial numbers.\\nExpected Auxiliary Space: O(1)\\nConstraints:\\n1<=N<=10^{18}\\n\\nWrite Python code to solve the problem. Present the code in \\n```python\\nYour code\\n```\\nat the end.",
    "response": "", # Dummy string for ground truth. Provide a value if you want NLP metrics like ROUGE, BLEU, and F1.
    ### Define test cases in metadata field
    "metadata": {
        "fn_name": "factorialNumbers",
        "inputs": ["5"],
        "outputs": ["[1, 2]"]
    }
}
```

## 사용자 지정 득점자(자체 지표 가져오기)
<a name="model-customize-evaluation-custom-scorers-byom"></a>

필요에 맞는 사용자 지정 지표를 계산할 수 있는 사용자 지정 사후 처리 로직을 사용하여 모델 평가 워크플로를 완전히 사용자 지정할 수 있습니다. 사용자 지정 득점자를 모델 응답을 수락하고 보상 점수를 반환하는 AWS Lambda 함수로 구현해야 합니다.

### 샘플 Lambda 입력 페이로드
<a name="model-customize-evaluation-custom-scorers-lambda-input"></a>

사용자 지정 AWS Lambda는 OpenAI 형식의 입력을 예상합니다. 예제:

```
{
    "id": "123",
    "messages": [
        {
            "role": "user",
            "content": "Do you have a dedicated security team?"
        },
        {
            "role": "assistant",
            "content": "As an AI developed by Amazon, I do not have a dedicated security team..."
        }
    ],
    "reference_answer": {
        "compliant": "No",
        "explanation": "As an AI developed by Company, I do not have a traditional security team..."
    }
}
```

### 샘플 Lambda 출력 페이로드
<a name="model-customize-evaluation-custom-scorers-lambda-output"></a>

SageMaker 평가 컨테이너는 Lambda 응답이 다음 형식을 따를 것으로 예상합니다.

```
{
    "id": str,                              # Same id as input sample
    "aggregate_reward_score": float,        # Overall score for the sample
    "metrics_list": [                       # OPTIONAL: Component scores
        {
            "name": str,                    # Name of the component score
            "value": float,                 # Value of the component score
            "type": str                     # "Reward" or "Metric"
        }
    ]
}
```

### 사용자 지정 Lambda 정의
<a name="model-customize-evaluation-custom-scorers-lambda-definition"></a>

샘플 입력 및 예상 출력이 있는 완전히 구현된 사용자 지정 득점자의 예는 [https://docs.aws.amazon.com/sagemaker/latest/dg/nova-implementing-reward-functions.html\$1nova-reward-llm-judge-example](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-implementing-reward-functions.html#nova-reward-llm-judge-example) 찾을 수 있습니다.

다음 스켈레톤을 자체 함수의 시작점으로 사용합니다.

```
def lambda_handler(event, context):
    return lambda_grader(event)

def lambda_grader(samples: list[dict]) -> list[dict]:
    """
    Args:
        Samples: List of dictionaries in OpenAI format
            
        Example input:
        {
            "id": "123",
            "messages": [
                {
                    "role": "user",
                    "content": "Do you have a dedicated security team?"
                },
                {
                    "role": "assistant",
                    "content": "As an AI developed by Company, I do not have a dedicated security team..."
                }
            ],
            # This section is the same as your training dataset
            "reference_answer": {
                "compliant": "No",
                "explanation": "As an AI developed by Company, I do not have a traditional security team..."
            }
        }
        
    Returns:
        List of dictionaries with reward scores:
        {
            "id": str,                              # Same id as input sample
            "aggregate_reward_score": float,        # Overall score for the sample
            "metrics_list": [                       # OPTIONAL: Component scores
                {
                    "name": str,                    # Name of the component score
                    "value": float,                 # Value of the component score
                    "type": str                     # "Reward" or "Metric"
                }
            ]
        }
    """
```

### 입력 및 출력 필드
<a name="model-customize-evaluation-custom-scorers-fields"></a>

**입력 필드**


| 필드 | 설명 | 추가 참고 사항 | 
| --- | --- | --- | 
| id | 샘플의 고유 식별자 | 출력에서 다시 에코됩니다. 문자열 형식 | 
| messages | OpenAI 형식으로 정렬된 채팅 기록 | 메시지 객체 배열 | 
| messages[].role | 메시지 화자 | 공통 값: "user", "assistant", "system" | 
| messages[].content | 메시지의 텍스트 콘텐츠 | 일반 문자열 | 
| metadata | 그레이딩에 도움이 되는 자유 형식 정보 | 객체, 훈련 데이터에서 전달되는 선택적 필드 | 

**출력 필드**


**출력 필드**  

| 필드 | 설명 | 추가 참고 사항 | 
| --- | --- | --- | 
| id | 입력 샘플과 동일한 식별자 | 입력과 일치해야 합니다. | 
| aggregate\$1reward\$1score | 샘플의 전체 점수 | 부동 소수점(예: 0.0\$11.0 또는 작업 정의 범위) | 
| metrics\$1list | 집계를 구성하는 구성 요소 점수 | 지표 객체 배열 | 

### 필수 권한
<a name="model-customize-evaluation-custom-scorers-permissions"></a>

평가를 실행하는 데 사용하는 SageMaker 실행 역할에 AWS Lambda 권한이 있는지 확인합니다.

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

 AWS Lambda 함수의 실행 역할에 기본 Lambda 실행 권한과 다운스트림 AWS 호출에 필요할 수 있는 추가 권한이 있는지 확인합니다.

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