예측 모델의 온라인 예측 가져오기

Vertex AI는 학습된 예측 모델을 사용해서 이후 값을 예측하는 두 가지 옵션인 온라인 예측과 일괄 예측을 제공합니다.

온라인 예측은 동기식 요청입니다. 애플리케이션 입력에 대한 응답으로 요청하거나 적시의 추론이 필요한 다른 상황에서 요청하는 경우에는 온라인 예측을 사용합니다.

일괄 예측 요청은 비동기식 요청입니다. 즉각적인 응답이 필요하지 않고 단일 요청을 사용하여 누적된 데이터를 처리하고 싶은 경우에 일괄 예측을 사용하세요.

이 페이지에서는 온라인 예측을 사용하여 이후 값을 예측하는 방법을 보여줍니다. 일괄 예측을 사용하여 값을 예측하는 방법은 예측 모델의 일괄 예측 가져오기를 참조하세요.

모델을 예측에 사용하려면 먼저 엔드포인트에 배포해야 합니다. 엔드포인트는 물리적 리소스의 집합입니다.

예측 대신 설명을 요청할 수 있습니다. 설명의 로컬 특성 중요도 값은 각 특성이 예측 결과에 얼마나 기여했는지 나타냅니다. 개념 개요는 예측용 특성 기여 분석을 참조하세요.

온라인 예측의 가격 책정을 알아보려면 테이블 형식 워크플로의 가격 책정을 참조하세요.

시작하기 전에

온라인 예측 요청을 수행하려면 먼저 모델을 학습해야 합니다.

엔드포인트 만들기 또는 선택

aiplatform.Endpoint.create() 함수를 사용하여 엔드포인트를 만듭니다. 엔드포인트가 이미 있으면 aiplatform.Endpoint() 함수를 사용하여 선택합니다.

다음 코드는 예시를 제공합니다.

# Import required modules
from google.cloud import aiplatform
from google.cloud.aiplatform import models

PROJECT_ID = "PROJECT_ID"
REGION = "REGION"

# Initialize the Vertex SDK for Python for your project.
aiplatform.init(project=PROJECT_ID, location=REGION)
endpoint = aiplatform.Endpoint.create(display_name='ENDPOINT_NAME')

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • REGION: Vertex AI를 사용하는 리전
  • ENDPOINT_NAME: 엔드포인트의 표시 이름

학습된 모델 선택

aiplatform.Model() 함수를 사용하여 학습된 모델을 선택합니다.

# Create reference to the model trained ahead of time.
model_obj = models.Model("TRAINED_MODEL_PATH")

다음을 바꿉니다.

  • TRAINED_MODEL_PATH: 예를 들면 projects/PROJECT_ID/locations/REGION/models/[TRAINED_MODEL_ID]입니다.

엔드포인트에 모델 배포

deploy() 함수를 사용하여 모델을 엔드포인트에 배포합니다. 다음 코드는 예시를 제공합니다.

deployed_model = endpoint.deploy(
    model_obj,
    machine_type='MACHINE_TYPE',
    traffic_percentage=100,
    min_replica_count='MIN_REPLICA_COUNT',
    max_replica_count='MAX_REPLICA_COUNT',
    sync=True,
    deployed_model_display_name='DEPLOYED_MODEL_NAME',
)

다음을 바꿉니다.

  • MACHINE_TYPE: 예를 들면 n1-standard-8과 같습니다. 머신 유형 자세히 알아보기
  • MIN_REPLICA_COUNT: 이 배포의 최소 노드 수. 예측 로드 시 필요에 따라 최대 노드 수까지 노드 수를 늘리거나 줄일 수 있으며 이 노드 수 미만으로는 줄일 수 없습니다. 값은 1 이상이어야 합니다. min_replica_count 변수가 설정되지 않은 경우 기본값은 1입니다.
  • MAX_REPLICA_COUNT: 이 배포의 최대 노드 수. 예측 로드 시 필요에 따라 이 노드 수까지 노드 수를 늘리거나 줄일 수 있으며 최소 노드 수 미만으로는 줄일 수 없습니다. max_replica_count 변수를 설정하지 않으면 최대 노드 수가 min_replica_count 값으로 설정됩니다.
  • DEPLOYED_MODEL_NAME: DeployedModel의 이름. DeployedModelModel 표시 이름도 사용할 수 있습니다.

모델 배포에는 약 10분 정도 걸릴 수 있습니다.

온라인 예측 수행

예측을 가져오려면 predict() 함수를 사용하고 입력 인스턴스를 하나 이상 제공합니다. 다음 코드는 예시를 보여줍니다.

predictions = endpoint.predict(instances=[{...}, {...}])

각 입력 인스턴스는 모델이 학습된 것과 동일한 스키마를 사용하는 Python 사전입니다. 시간 열에 해당하는 예측에 사용 가능 키-값 쌍과 타겟팅된 예측 열의 이전 값을 포함하는 예측에 사용 불가 키-값 쌍을 포함해야 합니다. Vertex AI는 각 입력 인스턴스가 단일 시계열에 속할 것으로 예상합니다. 인스턴스에서 키-값 쌍의 순서는 중요하지 않습니다.

입력 인스턴스에는 다음과 같은 제약조건이 적용됩니다.

  • 예측에 사용 가능 키-값 쌍은 데이터 포인트 개수가 모두 동일해야 합니다.
  • 예측에 사용 불가 키-값 쌍은 데이터 포인트 개수가 모두 동일해야 합니다.
  • 예측에 사용 가능 키-값 쌍의 데이터 포인트 개수는 예측에 사용 불가 키-값 쌍보다 많거나 같아야 합니다.

예측에 사용되는 열 유형에 대한 자세한 내용은 예측 시 특성 유형 및 가용성을 참조하세요.

다음 코드는 입력 인스턴스가 두 개인 집합을 보여줍니다. Category 열에는 속성 데이터가 포함됩니다. Timestamp 열에는 예측에 사용 가능한 데이터가 포함됩니다. 포인트 세 개는 컨텍스트 데이터이고 포인트 두 개는 범위 데이터입니다. Sales 열에는 예측 시 사용할 수 없는 데이터가 포함됩니다. 포인트 세 개 모두 컨텍스트 데이터입니다. 예측에 컨텍스트와 범위가 사용되는 방식에 대해서는 예측 범위, 환경설정 기간, 예측 기간을 참조하세요.

instances=[
  {
    # Attribute
    "Category": "Electronics",
    # Available at forecast: three days of context, two days of horizon
    "Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
    # Unavailable at forecast: three days of context
    "Sales": [490.50, 325.25, 647.00],
  },
  {
    # Attribute
    "Category": "Food",
    # Available at forecast: three days of context, two days of horizon
    "Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
    # Unavailable at forecast: three days of context
    "Sales": [190.50, 395.25, 47.00],
  }
])

각 인스턴스에 대해 Vertex AI는 두 가지 범위 타임스탬프('2023-08-06' 및 '2023-08-07')에 해당하는 두 개의 Sales 예측을 응답합니다.

최적의 성능을 위해서는 각 입력 인스턴스의 컨텍스트 데이터 포인트 수와 범위 데이터 포인트 수가 모델 학습에 사용된 컨텍스트 및 범위 길이와 일치해야 합니다. 불일치가 있으면 Vertex AI가 모델의 크기에 맞게 인스턴스를 패딩하거나 자릅니다.

입력 인스턴스의 컨텍스트 데이터 포인트 수가 모델 학습에 사용된 컨텍스트 데이터 포인트 수보다 적거나 많은 경우, 이 포인트 수가 모든 예측에 사용 가능 키-값 쌍과 모든 예측에 사용 불가 키-값 쌍에서 일관되는지 확인하세요.

예를 들어 모델이 컨텍스트 데이터 4일과 범위 데이터 2일로 학습되었다고 가정해 보겠습니다. 컨텍스트 데이터가 3일만 있어도 예측 요청을 수행할 수 있습니다. 이 경우 예측에 사용 불가 키-값 쌍에 값이 세 개 포함됩니다. 예측에 사용 가능 키-값 쌍에는 값이 5개 포함되어야 합니다.

온라인 예측 출력

Vertex AI는 value 필드에 온라인 예측 출력을 제공합니다.

{
  'value': [...]
}

예측 응답의 길이는 모델 학습에 사용된 범위와 입력 인스턴스의 범위에 따라 다릅니다. 예측 응답의 길이는 이 두 값 중에서 작은 값입니다.

다음 예를 고려하세요.

  • context = 15horizon = 50으로 모델을 학습시킵니다. 입력 인스턴스는 context = 15, horizon = 20입니다. 예측 응답의 길이는 20입니다.
  • context = 15horizon = 50으로 모델을 학습시킵니다. 입력 인스턴스는 context = 15, horizon = 100입니다. 예측 응답의 길이는 50입니다.

TFT 모델의 온라인 예측 출력

TFT(Temporal Fusion Transformer)로 학습된 모델의 경우 Vertex AI는 value 필드에 예측 외에 TFT 해석 가능성 tft_feature_importance를 제공합니다.

{
  "tft_feature_importance": {
    "attribute_weights": [...],
    "attribute_columns": [...],
    "context_columns": [...],
    "context_weights": [...],
    "horizon_weights": [...],
    "horizon_columns": [...]
  },
  "value": [...]
}
  • attribute_columns: 시불변인 예측 특성입니다.
  • attribute_weights: 각 attribute_columns에 연결된 가중치입니다.
  • context_columns: 환경설정 기간 값이 TFT 장단기 메모리(LSTM) 인코더 입력으로 사용되는 예측 특성입니다.
  • context_weights: 예측 인스턴스의 각 context_columns에 연결된 특성 중요도 가중치입니다.
  • horizon_columns: 예측 범위 값이 TFT 장단기 메모리(LSTM) 디코더 입력으로 사용되는 예측 특성입니다.
  • horizon_weights: 예측 인스턴스의 각 horizon_columns에 연결된 특성 중요도 가중치입니다.

분위수 손실에 최적화된 모델의 온라인 예측 출력

분위수 손실에 최적화된 모델의 경우 Vertex AI는 다음과 같은 온라인 예측 출력을 제공합니다.

{
  "value": [...],
  "quantile_values": [...],
  "quantile_predictions": [...]
}
  • value: 분위수 집합에 중앙값이 포함된 경우 value는 중앙값의 예측 값입니다. 그렇지 않으면 value가 집합에서 분위수가 가장 낮은 예측 값입니다. 예를 들어 분위수 집합이 [0.1, 0.5, 0.9]value0.5 분위수의 예측입니다. 분위수 집합이 [0.1, 0.9]value0.1 분위수의 예측입니다.
  • quantile_values: 모델 학습 중에 설정된 분위수의 값입니다.
  • quantile_predictions: quantile_values에 연결된 예측 값입니다.

예를 들어 대상 열이 판매 값인 모델이 있다고 가정해 보세요. 분위수 값은 [0.1, 0.5, 0.9]로 정의됩니다. Vertex AI는 분위수 예측을 [4484, 5615, 6853]으로 반환합니다. 여기서 분위수 집합에는 중앙값이 포함되므로 value0.5(5615) 분위수에 대한 예측입니다. 분위수 예측은 다음과 같이 해석될 수 있습니다.

  • P(판매 값 < 4484) = 10%
  • P(판매 값 < 5615) = 50%
  • P(판매 값 < 6853) = 90%

확률적 추론을 사용하는 모델의 온라인 예측 출력

모델에서 확률적 추론을 사용하는 경우 value 필드에 최적화 목표의 최소화 도구가 포함됩니다. 예를 들어 최적화 목표가 minimize-rmsevalue 필드에 평균 값이 포함됩니다. minimize-maevalue 필드에 중앙값이 포함됩니다.

모델에서 분위수로 확률적 추론을 사용하는 경우 Vertex AI는 최적화 목표의 최소화 도구 외에 분위수 값과 예측을 제공합니다. 분위수 값은 모델 학습 중에 설정됩니다. 분위수 예측은 분위수 값과 연결된 예측 값입니다.

온라인 설명 보기

설명을 가져오려면 explain() 함수를 사용하고 입력 인스턴스를 하나 이상 제공합니다. 다음 코드는 예시를 보여줍니다.

explanations = endpoint.explain(instances=[{...}, {...}])

입력 인스턴스의 형식은 온라인 예측과 온라인 설명에서 동일합니다. 자세한 내용은 온라인 예측 가져오기를 참조하세요.

특성 기여 분석의 개념 개요는 예측용 특성 기여 분석을 참조하세요.

온라인 설명 출력

다음 코드는 설명 결과를 출력하는 방법을 보여줍니다.

# Import required modules
import json
from google.protobuf import json_format

def explanation_to_dict(explanation):
  """Converts the explanation proto to a human-friendly json."""
  return json.loads(json_format.MessageToJson(explanation._pb))

for response in explanations.explanations:
  print(explanation_to_dict(response))

설명 결과의 형식은 다음과 같습니다.

{
  "attributions": [
    {
      "baselineOutputValue": 1.4194682836532593,
      "instanceOutputValue": 2.152980089187622,
      "featureAttributions": {
        ...
        "store_id": [
          0.007947325706481934
        ],
        ...
        "dept_id": [
          5.960464477539062e-08
        ],
        "item_id": [
          0.1100526452064514
        ],
        "date": [
          0.8525647521018982
        ],
        ...
        "sales": [
          0.0
        ]
      },
      "outputIndex": [
        2
      ],
      "approximationError": 0.01433318599207033,
      "outputName": "value"
    },
    ...
  ]
}

attributions 요소의 수는 모델 학습에 사용된 범위 및 입력 인스턴스의 범위에 따라 다릅니다. 요소 수는 이 두 값 중에서 작은 값입니다.

attributions 요소의 featureAttributions 필드에는 입력 데이터 세트의 열마다 값이 하나씩 포함됩니다. Vertex AI는 속성, 예측에 사용 가능, 예측에 사용 불가 등 모든 유형의 특성에 대한 설명을 생성합니다. attributions 요소의 필드에 대한 자세한 내용은 기여 분석을 참조하세요.

엔드포인트 삭제

undeploy_all()delete() 함수를 사용하여 엔드포인트를 삭제합니다. 다음 코드는 예시를 보여줍니다.

endpoint.undeploy_all()
endpoint.delete()

다음 단계