평가 실행

Vertex AI SDK for PythonGen AI Evaluation 모듈을 사용하여 Gen AI Evaluation Service API로 생성형 언어 모델과 애플리케이션을 프로그래매틱 방식으로 평가할 수 있습니다. 이 페이지에서는 Vertex AI SDK로 평가를 실행하는 방법을 보여줍니다.

시작하기 전에

Vertex AI SDK를 설치합니다.

Vertex AI SDK for Python에서 Gen AI Evaluation 모듈을 설치하려면 다음 명령어를 실행합니다.

!pip install -q google-cloud-aiplatform[evaluation]

자세한 내용은 Python용 Vertex AI SDK 설치를 참조하세요.

Vertex AI SDK 인증

Vertex AI SDK for Python을 설치한 후 인증을 수행해야 합니다. 다음 주제에서는 로컬에서 작업하는 경우와 Colaboratory에서 작업하는 경우 Vertex AI SDK로 인증하는 방법을 설명합니다.

  • 로컬에서 개발하는 경우 로컬 환경에서 애플리케이션 기본 사용자 인증 정보(ADC)를 설정합니다.

    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
      
    2. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login
      

      로그인 화면이 표시됩니다. 로그인한 후에 사용자 인증 정보는 ADC에서 사용하는 로컬 사용자 인증 정보 파일에 저장됩니다. 로컬 환경에서 ADC 사용에 대한 자세한 내용은 로컬 개발 환경을 참조하세요.

  • Colaboratory에서 작업하는 경우 Colab 셀에서 다음 명령어를 실행하여 인증합니다.

    from google.colab import auth
    auth.authenticate_user()
    

    이 명령어를 실행하면 인증을 완료할 수 있는 창이 열립니다.

서비스 계정 이해

서비스 계정은 Gen AI Evaluation Service에서 모델 기반 평가 측정항목을 위해 Vertex AI의 Gemini API로부터 예측을 가져오는 데 사용됩니다. 이 서비스 계정은 Gen AI Evaluation Service에 대한 첫 번째 요청이 발생하면 자동으로 프로비저닝됩니다.

이름 설명 이메일 주소 역할
Vertex AI Rapid Eval 서비스 에이전트 모델 기반 평가를 위한 예측을 가져오는 데 사용되는 서비스 계정입니다. service-PROJECT_NUMBER@gcp-sa-vertex-eval.iam.gserviceaccount.com roles/aiplatform.rapidevalServiceAgent

Rapid Eval 서비스 에이전트와 관련된 권한은 다음과 같습니다.

역할 권한
Vertex AI Rapid Eval 서비스 에이전트(roles/aiplatform.rapidevalServiceAgent) aiplatform.endpoints.predict

평가 실행

EvalTask 클래스를 사용하여 다음 사용 사례에 대한 평가를 실행합니다.

EvalTask 클래스

EvalTask 클래스는 특정 태스크를 기반으로 모델과 애플리케이션을 평가하는 데 도움이 됩니다. 생성 모델 간의 공정한 비교를 위해서는 일반적으로 특정 측정항목을 사용하여 고정된 평가 데이터 세트에 대해 다양한 모델과 프롬프트 템플릿을 반복적으로 평가해야 합니다. 단일 평가 실행 내에서 여러 측정항목을 동시에 평가하는 것도 중요합니다.

또한 EvalTaskVertex AI Experiments와 통합되어 각 평가 실행의 구성과 결과를 추적하는 데 도움이 됩니다. Vertex AI Experiments는 평가 결과를 관리하고 해석하는 데 도움이 되므로 사용자가 정보에 입각한 결정을 내릴 수 있습니다.

다음 예시에서는 EvalTask 클래스를 인스턴스화하고 평가를 실행하는 방법을 보여줍니다.

from vertexai.evaluation import (
    EvalTask,
    PairwiseMetric,
    PairwiseMetricPromptTemplate,
    PointwiseMetric,
    PointwiseMetricPromptTemplate,
    MetricPromptTemplateExamples
)

eval_task = EvalTask(
    dataset=DATASET,
    metrics=[METRIC_1, METRIC_2, METRIC_3],
    experiment=EXPERIMENT_NAME,
)

eval_result = eval_task.evaluate(
    model=MODEL,
    prompt_template=PROMPT_TEMPLATE,
    experiment_run=EXPERIMENT_RUN,
)

모델 기반 측정항목을 사용한 평가 실행

모델 기반 측정항목의 경우 PointwiseMetricPairwiseMetric 클래스를 사용하여 특정 기준에 맞게 조정된 측정항목을 정의합니다. 다음 옵션을 사용하여 평가를 실행합니다.

모델 기반 측정항목 예시 사용

Vertex AI SDK 내에서 기본 제공되는 상수 Metric Prompt Template Examples를 바로 사용할 수 있습니다. 자유 형식 측정항목 정의 인터페이스에서 이를 수정하고 통합해도 됩니다.

대부분의 주요 사용 사례를 다루는 측정항목 프롬프트 템플릿 예시의 전체 목록은 측정항목 프롬프트 템플릿을 참고하세요.

다음 Vertex AI SDK 예시에서는 MetricPromptTemplateExamples 클래스를 사용하여 측정항목을 정의하는 방법을 보여줍니다.

# View all the available examples of model-based metrics
MetricPromptTemplateExamples.list_example_metric_names()

# Display the metric prompt template of a specific example metric
print(MetricPromptTemplateExamples.get_prompt_template('fluency'))

# Use the pre-defined model-based metrics directly
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[MetricPromptTemplateExamples.Pointwise.FLUENCY],
)

eval_result = eval_task.evaluate(
    model=MODEL,
)

모델 기반 측정항목 템플릿 인터페이스 사용

Vertex AI SDK 내에서 PointwiseMetricPromptTemplatePairwiseMetricPromptTemplate 클래스를 사용하여 CriteriaRating Rubrics와 같은 필드를 채워 측정항목을 커스터마이징합니다. 입력을 제공하지 않으면 Instruction과 같은 특정 필드에 기본값이 할당됩니다.

원하는 경우 측정항목 프롬프트 템플릿에서 모델 기반 평가 결과를 생성하는 데 사용하는 입력란 목록인 input_variables를 지정할 수 있습니다. 기본적으로 점별 측정항목의 경우 모델의 response 열이 포함되고, 쌍별 측정항목의 경우에는 후보 모델의 responsebaseline_model_response 열이 모두 포함됩니다.

자세한 내용은 측정항목 프롬프트 템플릿의 '측정항목 프롬프트 템플릿 구조화' 섹션을 참고하세요.

# Define a pointwise metric with two custom criteria
custom_text_quality = PointwiseMetric(
    metric="custom_text_quality",
    metric_prompt_template=PointwiseMetricPromptTemplate(
        criteria={
          "fluency": "Sentences flow smoothly and are easy to read, avoiding awkward phrasing or run-on sentences. Ideas and sentences connect logically, using transitions effectively where needed.",
          "entertaining": "Short, amusing text that incorporates emojis, exclamations and questions to convey quick and spontaneous communication and diversion.",
        },
        rating_rubric={
          "1": "The response performs well on both criteria.",
          "0": "The response is somewhat aligned with both criteria",
          "-1": "The response falls short on both criteria",
        },
        input_variables=["prompt"],
    ),
)

# Display the serialized metric prompt template
print(custom_text_quality.metric_prompt_template)

# Run evaluation using the custom_text_quality metric
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[custom_text_quality],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

모델 기반 측정항목 자유 형식 SDK 인터페이스 사용

측정항목 프롬프트 템플릿을 보다 유연하게 커스터마이징하려면 문자열 직접 입력을 허용하는 자유 형식 인터페이스를 사용하여 측정항목을 직접 정의하면 됩니다.

# Define a pointwise multi-turn chat quality metric
pointwise_chat_quality_metric_prompt = """Evaluate the AI's contribution to a meaningful conversation, considering coherence, fluency, groundedness, and conciseness.
 Review the chat history for context. Rate the response on a 1-5 scale, with explanations for each criterion and its overall impact.

# Conversation History
{history}

# Current User Prompt
{prompt}

# AI-generated Response
{response}
"""

freeform_multi_turn_chat_quality_metric = PointwiseMetric(
    metric="multi_turn_chat_quality_metric",
    metric_prompt_template=pointwise_chat_quality_metric_prompt,
)

# Run evaluation using the freeform_multi_turn_chat_quality_metric metric
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[freeform_multi_turn_chat_quality_metric],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

계산 기반 측정항목을 사용한 평가 실행

계산 기반 측정항목은 단독으로 사용하거나 모델 기반 측정항목과 함께 사용할 수 있습니다.

# Combine computation-based metrics "ROUGE" and "BLEU" with model-based metrics
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=["rouge_l_sum", "bleu", custom_text_quality],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

추가 측정항목 커스텀

모델 기반 측정항목에 대해 다른 판단 모델을 선택하는 등 측정항목을 추가로 커스마이징하거나 새로운 계산 기반 측정항목을 정의해야 하는 경우 Vertex AI SDK의 CustomMetric 클래스를 사용하면 됩니다. 자세한 내용은 다음 노트북을 참고하세요.

증가된 비율 제한 및 할당량으로 모델 기반 평가 실행

모델 기반 측정항목에 대한 단일 평가 요청으로 인해 Vertex AI의 Gemini API에 대한 여러 기본 요청이 발생하고 심사 모델 gemini-1.5-pro 할당량이 사용됩니다. 분당 모델 요청 수(RPM) 할당량은 프로젝트별로 계산됩니다. 즉, 심사 모델 gemini-1.5-pro에 대한 요청과 모델 기반 측정항목을 위한 Gen AI Evaluation Service에 대한 요청이 모두 특정 리전의 gemini-1.5-pro 프로젝트 심사 모델 RPM 할당량에 반영됩니다.

다음과 같은 사용 사례에서는 심사 모델 RPM 할당량을 늘리고 평가 서비스 비율 한도 evaluation_service_qps를 더 높게 설정해야 합니다.

  • 데이터 양 증가: 모델 기반 측정항목을 사용하여 훨씬 더 많은 데이터를 처리하는 경우 기본 RPM 할당량에 도달할 수 있습니다. 할당량을 늘리면 성능 저하나 중단 없이 더 많은 양을 처리할 수 있습니다.

  • 빠른 평가: 애플리케이션에 평가 처리 시간 단축이 필요한 경우 RPM 할당량을 더 높여야 할 수 있습니다. 이는 시간에 민감한 애플리케이션이나 평가 지연이 사용자 경험에 영향을 미칠 수 있는 실시간 상호작용이 있는 애플리케이션에 특히 중요합니다.

  • 복잡한 평가 작업: RPM 할당량이 높을수록 복잡한 작업이나 대량의 텍스트에 대한 리소스 집약적인 평가를 처리할 수 있는 충분한 용량이 확보됩니다.

  • 높은 사용자 동시 실행: 프로젝트 내에서 많은 사용자가 동시에 모델 기반 평가 및 모델 추론을 요청할 것으로 예상되는 경우 병목 현상을 방지하고 응답성을 유지하려면 모델 RPM 한도를 높여야 합니다.

모델 할당량을 늘리고 증가된 비율 한도와 함께 Gen AI Evaluation Service SDK를 사용하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 IAM 및 관리자 할당량 페이지로 이동합니다.

    콘솔에서 할당량 보기

  2. 필터 필드에서 측정기준(모델 식별자) 및 측정항목(Gemini 모델의 할당량 식별자)를 base_model:gemini-1.5-proMetric:aiplatform.googleapis.com/generate_content_requests_per_minute_per_project_per_base_model로 지정합니다.

  3. 늘릴 할당량의 작업 더보기 메뉴 버튼을 클릭합니다.

  4. 드롭다운 메뉴에서 할당량 수정을 클릭합니다. 할당량 변경사항 패널이 열립니다.

  5. 할당량 수정에서 새 할당량 값을 입력합니다.

  6. 요청 제출을 클릭합니다.

  7. 할당량 상향 요청은 이메일로 확인되며 일반적으로 처리되는 데 영업일 기준 2일이 걸립니다.

  8. 할당량 증가 요청이 이메일을 통해 승인되면 다음과 같이 evaluation_service_qps 매개변수를 설정할 수 있습니다.

from vertexai.evaluation import EvalTask

# GEMINI_RPM is the requests per minute (RPM) quota for gemini-1.5-pro in your region
# Evaluation Service QPS limit is equal to (gemini-1.5-pro RPM / 60 sec / default number of samples)
CUSTOM_EVAL_SERVICE_QPS_LIMIT = GEMINI_RPM / 60 / 4

eval_task = EvalTask(
    dataset=DATASET,
    metrics=[METRIC_1, METRIC_2, METRIC_3],
)

eval_result = eval_task.evaluate(
    evaluation_service_qps=CUSTOM_EVAL_SERVICE_QPS_LIMIT,
    # Specify a retry_timeout limit for a more responsive evaluation run
    # the default value is 600 (in seconds, or 10 minutes)
    retry_timeout=RETRY_TIMEOUT,
)

할당량 및 한도에 대한 자세한 내용은 Gen AI Evaluation Service 할당량Gen AI Evaluation Service API를 참고하세요.

다음 단계