커스텀 학습 모델에서 일괄 예측 가져오기

이 페이지에서는 Google Cloud 콘솔 또는 Vertex AI API를 사용해서 커스텀 학습 모델에서 일괄 예측을 가져오는 방법을 보여줍니다.

일괄 예측 요청을 수행하려면 Vertex AI가 예측 결과를 저장하는 입력 소스와 출력 위치(Cloud Storage 또는 BigQuery)를 지정합니다.

처리 시간을 최소화하려면 입력 및 출력 위치가 동일한 리전 또는 멀티 리전에 있어야 합니다. 예를 들어 입력이 us-central1에 있으면 출력은 us-central1 또는 US에 있을 수 있지만 europe-west4에는 있을 수 없습니다. 자세한 내용은 Cloud Storage 위치BigQuery 위치를 참조하세요.

또한 입력 및 출력은 모델과 동일한 리전 또는 멀티 리전에 있어야 합니다.

입력 데이터 요구사항

일괄 요청의 입력은 예측을 위해 모델에 보낼 항목을 지정합니다. Google에서는 다음 입력 형식을 지원합니다.

JSON Lines

JSON Lines 파일을 사용하여 예측할 입력 인스턴스 목록을 지정합니다. Cloud Storage 버킷에 JSON Lines 파일을 저장합니다.

예시 1

다음 예시에서는 각 줄에 배열이 포함된 JSON Lines 파일을 보여줍니다.

[1, 2, 3, 4]
[5, 6, 7, 8]

다음은 HTTP 요청 본문의 예측 컨테이너로 전송되는 항목입니다.

다른 모든 컨테이너

{"instances": [ [1, 2, 3, 4], [5, 6, 7, 8] ]}

PyTorch 컨테이너

{"instances": [
{ "data": [1, 2, 3, 4] },
{ "data": [5, 6, 7, 8] } ]}

예시 2

다음 예시에서는 각 줄에 객체가 포함된 JSON Lines 파일을 보여줍니다.

{ "values": [1, 2, 3, 4], "key": 1 }
{ "values": [5, 6, 7, 8], "key": 2 }

다음은 HTTP 요청 본문의 예측 컨테이너로 전송되는 항목입니다. 동일한 요청 본문이 모든 컨테이너로 전송됩니다.

{"instances": [
  { "values": [1, 2, 3, 4], "key": 1 },
  { "values": [5, 6, 7, 8], "key": 2 }
]}

예시 3

PyTorch의 사전 빌드된 TorchServe의 기본 핸들러에서 요청하는 대로 각 인스턴스를 data 필드로 래핑해야 합니다. Vertex AI는 인스턴스를 래핑하지 않습니다. 예를 들면 다음과 같습니다.

{ "data": { "values": [1, 2, 3, 4], "key": 1 } }
{ "data": { "values": [5, 6, 7, 8], "key": 2 } }

다음은 HTTP 요청 본문의 예측 컨테이너로 전송되는 항목입니다.

{"instances": [
  { "data": { "values": [1, 2, 3, 4], "key": 1 } },
  { "data": { "values": [5, 6, 7, 8], "key": 2 } }
]}

TFRecord

입력 인스턴스를 TFRecord 형식으로 저장합니다. 원하는 경우 Gzip으로 TFRecord 파일을 압축할 수 있습니다. TFRecord 파일을 Cloud Storage 버킷에 저장합니다.

Vertex AI는 TFRecord 파일의 각 인스턴스를 바이너리로 읽은 후 b64라는 단일 키를 사용하여 인스턴스를 JSON 객체로 base64로 인코딩합니다.

다음은 HTTP 요청 본문의 예측 컨테이너로 전송되는 항목입니다.

다른 모든 컨테이너

{"instances": [
{ "b64": "b64EncodedASCIIString" },
{ "b64": "b64EncodedASCIIString" } ]}

PyTorch 컨테이너

{"instances": [ { "data": {"b64": "b64EncodedASCIIString" } }, { "data": {"b64": "b64EncodedASCIIString" } }
]}

예측 컨테이너가 인스턴스를 디코딩하는 방법을 알고 있는지 확인합니다.

CSV

CSV 파일에서 행마다 입력 인스턴스를 한 개 지정하세요. 첫 번째 행은 헤더 행이어야 합니다. 모든 문자열을 큰따옴표(")로 묶어야 합니다. 줄바꿈 문자를 포함한 셀 값은 허용되지 않습니다. 따옴표가 없는 값은 부동 소수점 숫자로 읽힙니다.

다음 예시는 두 개의 입력 인스턴스가 있는 CSV 파일을 보여줍니다.

"input1","input2","input3"
0.1,1.2,"cat1"
4.0,5.0,"cat2"

다음은 HTTP 요청 본문의 예측 컨테이너로 전송되는 항목입니다.

다른 모든 컨테이너

{"instances": [ [0.1,1.2,"cat1"], [4.0,5.0,"cat2"] ]}

PyTorch 컨테이너

{"instances": [
{ "data": [0.1,1.2,"cat1"] },
{ "data": [4.0,5.0,"cat2"] } ]}

파일 목록

각 행이 파일의 Cloud Storage URI인 텍스트 파일을 만듭니다. Vertex AI는 각 파일의 콘텐츠를 바이너리로 읽은 후 b64라는 단일 키를 사용하여 인스턴스를 JSON 객체로 base64로 인코딩합니다.

Google Cloud 콘솔을 사용하여 일괄 예측을 가져오려면 먼저 Google Cloud 콘솔에 직접 파일 목록을 붙여넣습니다. 그렇지 않으면 파일 목록을 Cloud Storage 버킷에 저장합니다.

다음 예시는 두 개의 입력 인스턴스가 있는 파일 목록을 보여줍니다.

gs://path/to/image/image1.jpg
gs://path/to/image/image2.jpg

다음은 HTTP 요청 본문의 예측 컨테이너로 전송되는 항목입니다.

다른 모든 컨테이너

{ "instances": [
{ "b64": "b64EncodedASCIIString" },
{ "b64": "b64EncodedASCIIString" } ]}

PyTorch 컨테이너

{ "instances": [ { "data": { "b64": "b64EncodedASCIIString" } }, { "data": { "b64": "b64EncodedASCIIString" } }
]}

예측 컨테이너가 인스턴스를 디코딩하는 방법을 알고 있는지 확인합니다.

BigQuery

BigQuery 테이블을 projectId.datasetId.tableId로 지정합니다. Vertex AI는 테이블의 각 행을 JSON 인스턴스로 변환합니다.

예를 들어 테이블에 다음이 포함되어 있다고 가정합니다.

열 1 열 2 열 3
1.0 3.0 "Cat1"
2.0 4.0 "Cat2"

다음은 HTTP 요청 본문의 예측 컨테이너로 전송되는 항목입니다.

다른 모든 컨테이너

{"instances": [ [1.0,3.0,"cat1"], [2.0,4.0,"cat2"] ]}

PyTorch 컨테이너

{"instances": [
{ "data": [1.0,3.0,"cat1"] },
{ "data": [2.0,4.0,"cat2"] } ]}

BigQuery 데이터 유형이 JSON으로 변환되는 방식은 다음과 같습니다.

BigQuery 유형 JSON 유형 예시 값
문자열 문자열 "abc"
정수 정수 1
부동 소수점 부동 소수점 1.2
숫자 부동 소수점 4925.000000000
불리언 불리언 true
TimeStamp 문자열 "2019-01-01 23:59:59.999999+00:00"
Date 문자열 "2018-12-31"
시간 문자열 "23:59:59.999999"
DateTime 문자열 "2019-01-01T00:00:00"
레코드 객체 { "A": 1,"B": 2}
반복 유형 Array[Type] [1, 2]
중첩 레코드 객체 {"A": {"a": 0}, "B": 1}

데이터 파티션 나누기

일괄 예측은 맵리듀스를 사용하여 입력을 각 복제본으로 샤딩합니다. 맵리듀스 기능을 사용하려면 입력을 분할할 수 있어야 합니다.

Vertex AI는 BigQuery, 파일 목록, JSON lines 입력을 자동으로 분할합니다.

CSV 파일은 기본적으로 파티션 나누기에 적합하지 않으므로 Vertex AI는 자동으로 파티션을 나누지 않습니다. CSV 파일의 행은 자체 설명이 아니며 유형이 지정되지 않고 줄바꿈이 포함될 수 있습니다. 처리량에 민감한 애플리케이션에는 CSV 입력을 사용하지 않는 것이 좋습니다.

TFRecord 입력의 경우 인스턴스를 더 작은 파일로 분할하고 와일드 카드(예: gs://my-bucket/*.tfrecord)를 사용하여 작업에 파일을 전달하여 데이터의 파티션을 수동으로 나눠야 합니다. 파일 수는 지정된 복제본 수 이상이어야 합니다.

입력 데이터 필터링 및 변환

BatchPredictionJob 요청에서 instanceConfig를 지정하여 일괄 입력을 필터링하거나 변환할 수 있습니다.

필터링을 사용하면 예측 컨테이너에서 커스텀 사전/사후 처리를 수행할 필요 없이 예측 요청의 입력 데이터에 있는 특정 필드를 제외하거나 예측 요청의 입력 데이터에 있는 필드 하위 집합만 포함할 수 있습니다. 이는 입력 데이터 파일에 키 또는 추가 데이터와 같이 모델에 필요하지 않은 추가 열이 있는 경우에 유용합니다.

변환을 사용하면 인스턴스를 JSON array 또는 object 형식으로 예측 컨테이너에 보낼 수 있습니다. 자세한 내용은 instanceType을 참조하세요.

예를 들어 입력 테이블에 다음이 포함되어 있다고 가정합니다.

customerId col1 col2
1001 1 2
1002 5 6

그리고 다음 instanceConfig을 지정합니다.

{
  "name": "batchJob1",
  ...
  "instanceConfig": {
    "excludedFields":"customerId"
    "instanceType":"object"
  }
}

그런 다음 예측 요청의 인스턴스가 JSON 객체로 전송되고 customerId 열이 제외됩니다.

{"col1":1,"col2":2}
{"col1":5,"col2":6}

다음 instanceConfig를 지정하면 동일한 결과가 발생하는 점에 유의하세요.

{
  "name": "batchJob1",
  ...
  "instanceConfig": {
    "includedFields": ["col1","col2"]
    "instanceType":"object"
  }
}

특성 필터를 사용하는 방법에 대한 설명은 특성 필터링이 포함된 커스텀 모델 일괄 예측 노트북을 참조하세요.

배치 예측 요청

일괄 예측 요청의 경우 Google Cloud 콘솔 또는 Vertex AI API를 사용할 수 있습니다. 제출한 입력 항목 수에 따라 일괄 예측 태스크를 완료하는 데 다소 시간이 걸릴 수 있습니다.

일괄 예측을 요청하면 예측 컨테이너는 사용자가 제공한 커스텀 서비스 계정으로 실행됩니다. 데이터 소스에서 예측 인스턴스를 읽거나 예측 결과를 쓰는 등의 읽기/쓰기 작업은 기본적으로 BigQuery 및 Cloud Storage에 액세스할 수 있는 Vertex AI 서비스 에이전트를 사용하여 수행됩니다.

Google Cloud 콘솔

Google Cloud 콘솔을 사용하여 일괄 예측을 요청합니다.

  1. Google Cloud 콘솔의 Vertex AI 섹션에서 일괄 예측 페이지로 이동합니다.

일괄 예측 페이지로 이동

  1. 만들기를 클릭하여 새 일괄 예측 창을 엽니다.

  2. 일괄 예측 정의에서 다음 단계를 완료합니다.

    1. 일괄 예측의 이름을 입력합니다.

    2. 모델 이름에서 이 일괄 예측에 사용할 모델의 이름을 선택합니다.

    3. 소스 선택에 대해 입력 데이터에 적용되는 소스를 선택합니다.

      • 입력 형식을 JSON Lines, CSV 또는 TFRecord로 지정한 경우 Cloud Storage의 파일(JSON Lines, CSV, TFRecord, TFRecord Gzip)을 선택합니다. 그런 다음 소스 경로 필드에 입력 파일을 지정합니다.
      • 파일 목록을 입력으로 사용하는 경우 Cloud Storage의 파일(기타)을 선택하고 다음 텍스트 상자에 파일 목록을 붙여넣습니다.
      • BigQuery 입력에 BigQuery 경로를 선택합니다. BigQuery를 입력으로 선택하면 BigQuery를 출력 및 Google 관리 암호화 키로 선택해야 합니다. BigQuery에서 입력/출력으로 고객 관리 암호화 키(CMEK)가 지원되지 않습니다.
    4. 대상 경로 필드에 Vertex AI에서 일괄 예측 출력을 저장할 Cloud Storage 디렉터리를 지정하세요.

    5. 원하는 경우 일괄 예측 응답의 일부로 특성 기여 분석을 가져오려면 이 모델에 특성 기여 분석 사용 설정을 선택하면 됩니다. 그런 다음 수정을 클릭하여 설명 설정을 구성합니다. 이전에 모델에 대한 설명 설정을 구성한 경우 설명 설정 수정은 선택사항이며 그렇지 않으면 필요합니다.

    6. 일괄 예측 작업의 컴퓨팅 옵션인 컴퓨팅 노드 수, 머신 유형, 원하는 경우 가속기 유형가속기 수를 지정합니다.

  3. 선택사항: 일괄 예측을 위한 모델 모니터링 분석은 미리보기로 제공됩니다. 일괄 예측 작업에 편향 감지 구성을 추가하는 방법은 기본 요건을 참조하세요.

    1. 이 일괄 예측에 모델 모니터링 사용 설정을 클릭하여 켜거나 끕니다.

    2. 학습 데이터 소스를 선택합니다. 선택한 학습 데이터 소스의 데이터 경로 또는 위치를 입력합니다.

    3. 선택사항: 알림 기준 아래에서 알림을 트리거할 임곗값을 지정합니다.

    4. 알림 이메일의 경우 모델이 알림 기준을 초과하면 알림을 받을 하나 이상의 이메일 주소를 쉼표로 구분하여 입력합니다.

    5. 선택사항: 알림 채널의 경우 모델이 알림 기준을 초과할 때 알림을 받을 Cloud Monitoring 채널을 추가합니다. 기존 Cloud Monitoring 채널을 선택하거나 알림 채널 관리를 클릭하여 새 항목을 만들 수 있습니다. 콘솔에서는 PagerDuty, Slack, Pub/Sub 알림 채널이 지원됩니다.

  4. 만들기를 클릭합니다.

API

Vertex AI API를 사용하여 일괄 예측 요청을 전송합니다. 일괄 예측을 가져오는 데 사용할 도구에 따라 탭을 선택합니다.

REST

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • LOCATION_ID: 모델이 저장되고 일괄 예측 작업이 실행되는 리전입니다. 예를 들면 us-central1입니다.

  • PROJECT_ID: 프로젝트 ID

  • BATCH_JOB_NAME: 일괄 예측 작업의 표시 이름입니다.

  • MODEL_ID: 예측을 수행하는 데 사용할 모델의 ID입니다.

  • INPUT_FORMAT: 입력 데이터의 형식(jsonl, csv, tf-record, tf-record-gzip 또는 file-list)입니다.

  • INPUT_URI: 입력 데이터의 Cloud Storage URI입니다. 와일드 카드를 포함할 수도 있습니다.

  • OUTPUT_DIRECTORY: Vertex AI에서 출력을 저장할 디렉터리의 Cloud Storage URI입니다.

  • MACHINE_TYPE: 이 일괄 예측 작업에 사용할 머신 리소스입니다.

    원하는 경우 가속기를 사용하도록 machineSpec 필드를 구성할 수 있지만 다음 예시에서는 이를 보여주지 않습니다.

  • BATCH_SIZE: 각 예측 요청에서 전송할 인스턴스 수로, 기본값은 64입니다. 배치 크기를 늘리면 처리량이 증가할 수 있지만 요청 시간 초과가 발생할 수도 있습니다.

  • STARTING_REPLICA_COUNT: 이 일괄 예측 작업의 노드 수입니다.

HTTP 메서드 및 URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs

JSON 요청 본문:

{
  "displayName": "BATCH_JOB_NAME",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "INPUT_FORMAT",
    "gcsSource": {
      "uris": ["INPUT_URI"],
    },
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_DIRECTORY",
    },
  },
  "dedicatedResources" : {
    "machineSpec" : {
      "machineType": MACHINE_TYPE
    },
    "startingReplicaCount": STARTING_REPLICA_COUNT
  },
  "manualBatchTuningParameters": {
    "batch_size": BATCH_SIZE,
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID",
  "displayName": "BATCH_JOB_NAME 202005291958",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "jsonl",
    "gcsSource": {
      "uris": [
        "INPUT_URI"
      ]
    }
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_DIRECTORY"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-05-30T02:58:44.341643Z",
  "updateTime": "2020-05-30T02:58:44.341643Z",
}

Java

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용Java 설정 안내를 따르세요. 자세한 내용은 Vertex AI Java API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

다음 샘플에서 PREDICTIONS_FORMATjsonl로 바꿉니다. 다른 자리표시자를 바꾸는 방법을 알아보려면 이 섹션의 REST & CMD LINE 탭을 참조하세요.

import com.google.cloud.aiplatform.util.ValueConverter;
import com.google.cloud.aiplatform.v1.AcceleratorType;
import com.google.cloud.aiplatform.v1.BatchDedicatedResources;
import com.google.cloud.aiplatform.v1.BatchPredictionJob;
import com.google.cloud.aiplatform.v1.GcsDestination;
import com.google.cloud.aiplatform.v1.GcsSource;
import com.google.cloud.aiplatform.v1.JobServiceClient;
import com.google.cloud.aiplatform.v1.JobServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.MachineSpec;
import com.google.cloud.aiplatform.v1.ModelName;
import com.google.protobuf.Value;
import java.io.IOException;

public class CreateBatchPredictionJobSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";
    String modelName = "MODEL_NAME";
    String instancesFormat = "INSTANCES_FORMAT";
    String gcsSourceUri = "GCS_SOURCE_URI";
    String predictionsFormat = "PREDICTIONS_FORMAT";
    String gcsDestinationOutputUriPrefix = "GCS_DESTINATION_OUTPUT_URI_PREFIX";
    createBatchPredictionJobSample(
        project,
        displayName,
        modelName,
        instancesFormat,
        gcsSourceUri,
        predictionsFormat,
        gcsDestinationOutputUriPrefix);
  }

  static void createBatchPredictionJobSample(
      String project,
      String displayName,
      String model,
      String instancesFormat,
      String gcsSourceUri,
      String predictionsFormat,
      String gcsDestinationOutputUriPrefix)
      throws IOException {
    JobServiceSettings settings =
        JobServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();
    String location = "us-central1";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient client = JobServiceClient.create(settings)) {

      // Passing in an empty Value object for model parameters
      Value modelParameters = ValueConverter.EMPTY_VALUE;

      GcsSource gcsSource = GcsSource.newBuilder().addUris(gcsSourceUri).build();
      BatchPredictionJob.InputConfig inputConfig =
          BatchPredictionJob.InputConfig.newBuilder()
              .setInstancesFormat(instancesFormat)
              .setGcsSource(gcsSource)
              .build();
      GcsDestination gcsDestination =
          GcsDestination.newBuilder().setOutputUriPrefix(gcsDestinationOutputUriPrefix).build();
      BatchPredictionJob.OutputConfig outputConfig =
          BatchPredictionJob.OutputConfig.newBuilder()
              .setPredictionsFormat(predictionsFormat)
              .setGcsDestination(gcsDestination)
              .build();
      MachineSpec machineSpec =
          MachineSpec.newBuilder()
              .setMachineType("n1-standard-2")
              .setAcceleratorType(AcceleratorType.NVIDIA_TESLA_K80)
              .setAcceleratorCount(1)
              .build();
      BatchDedicatedResources dedicatedResources =
          BatchDedicatedResources.newBuilder()
              .setMachineSpec(machineSpec)
              .setStartingReplicaCount(1)
              .setMaxReplicaCount(1)
              .build();
      String modelName = ModelName.of(project, location, model).toString();
      BatchPredictionJob batchPredictionJob =
          BatchPredictionJob.newBuilder()
              .setDisplayName(displayName)
              .setModel(modelName)
              .setModelParameters(modelParameters)
              .setInputConfig(inputConfig)
              .setOutputConfig(outputConfig)
              .setDedicatedResources(dedicatedResources)
              .build();
      LocationName parent = LocationName.of(project, location);
      BatchPredictionJob response = client.createBatchPredictionJob(parent, batchPredictionJob);
      System.out.format("response: %s\n", response);
      System.out.format("\tName: %s\n", response.getName());
    }
  }
}

Python

Python을 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python API 참고 문서를 참조하세요.

def create_batch_prediction_job_dedicated_resources_sample(
    project: str,
    location: str,
    model_resource_name: str,
    job_display_name: str,
    gcs_source: Union[str, Sequence[str]],
    gcs_destination: str,
    instances_format: str = "jsonl",
    machine_type: str = "n1-standard-2",
    accelerator_count: int = 1,
    accelerator_type: Union[str, aiplatform_v1.AcceleratorType] = "NVIDIA_TESLA_K80",
    starting_replica_count: int = 1,
    max_replica_count: int = 1,
    sync: bool = True,
):
    aiplatform.init(project=project, location=location)

    my_model = aiplatform.Model(model_resource_name)

    batch_prediction_job = my_model.batch_predict(
        job_display_name=job_display_name,
        gcs_source=gcs_source,
        gcs_destination_prefix=gcs_destination,
        instances_format=instances_format,
        machine_type=machine_type,
        accelerator_count=accelerator_count,
        accelerator_type=accelerator_type,
        starting_replica_count=starting_replica_count,
        max_replica_count=max_replica_count,
        sync=sync,
    )

    batch_prediction_job.wait()

    print(batch_prediction_job.display_name)
    print(batch_prediction_job.resource_name)
    print(batch_prediction_job.state)
    return batch_prediction_job

특성 중요도

예측에 특성 중요도 값을 반환하려면 generateExplanation 속성을 true로 설정합니다. 예측 모델은 특성 중요도를 지원하지 않으므로 일괄 예측 요청에 포함할 수 없습니다.

특성 기여 분석이라고도 하는 특성 중요도는 Vertex Explainable AI의 일부입니다.

설명을 위해 Model을 구성했거나 BatchPredictionJobexplanationSpec 필드를 지정한 경우에만 generateExplanationtrue로 설정할 수 있습니다.

머신 유형 및 복제본 수 선택

복제본 수를 늘려 수평으로 확장하면 더 큰 머신 유형을 사용할 때보다 처리량이 더욱 선형적이고 예측 가능하게 개선됩니다.

일반적으로 작업에 가능한 가장 작은 머신 유형을 지정하고 복제본 수를 늘리는 것이 좋습니다.

비용 효율을 위해 일괄 예측 작업이 10분 이상 실행되도록 복제본 수를 선택하는 것이 좋습니다. 각 복제본이 시작될 때마다 소요되는 약 5분을 포함하여 복제본 노드 시간당 요금이 부과되기 때문입니다. 몇 초만 처리하고 종료하는 방식은 비용 효율적이지 않습니다.

일반적으로 수천 개의 인스턴스의 경우 수십 개 단위의 starting_replica_count를 사용하는 것이 좋습니다. 인스턴스가 수백만 개라면 수백 개 단위의 starting_replica_count가 권장됩니다. 또한 다음 공식을 사용하여 복제본 수를 추정할 수 있습니다.

N / (T * (60 / Tb))

각 항목의 의미는 다음과 같습니다.

  • N: 작업의 배치 수입니다. 예를 들어 100만 개의 인스턴스/100개의 배치 크기 = 10,000개의 배치입니다.
  • T: 일괄 예측 작업에 원하는 시간입니다. 예를 들면 10분입니다.
  • Tb: 복제본이 단일 배치를 처리하는 데 걸리는 시간(초)입니다. 예를 들어 2코어 머신 유형에서는 배치당 1초입니다.

이 예시에서는 배치 10,000개/(10분 * (60/1초))가 복제본 17개로 올림됩니다.

온라인 예측과 달리 일괄 예측 작업은 자동 확장을 수행하지 않습니다. 모든 입력 데이터를 미리 알고 있으므로 작업이 시작될 때 시스템은 데이터를 각 복제본으로 분할합니다. 시스템은 starting_replica_count 매개변수를 사용합니다. max_replica_count 매개변수는 무시됩니다.

이 권장사항은 모두 대략적인 가이드라인입니다. 모든 모델에 대해 최적의 처리량을 제공한다는 보장은 없습니다. 처리 시간 및 비용에 대한 정확한 예측은 제공하지 않습니다. 또한 각 시나리오에서 최적의 비용/처리량 절충을 확보하지 못할 수도 있습니다. 적절한 출발점으로 사용하고 필요에 따라 조정하세요. 모델의 처리량과 같은 특성을 측정하려면 이상적인 머신 유형 찾기 노트북을 실행하세요.

GPU 또는 TPU 가속 머신의 경우

CPU 전용 모델 가이드라인과 다음과 같은 추가 고려 사항을 참조하세요.

  • CPU 및 GPU가 더 필요할 수 있습니다 (예: 데이터 사전 처리용).
  • GPU 머신 유형은 시작하는 데 시간이 더 오래 걸리므로(10분) 일괄 예측 작업의 경우 더 긴 시간(예: 10분 대신 20분 이상)을 목표로 하여 예측 수행에 적절한 비율의 시간과 비용이 소요되도록 하는 것이 좋습니다.

일괄 예측 결과 검색

일괄 예측 태스크가 완료되면 예측 출력은 요청에서 지정한 Cloud Storage 버킷 또는 BigQuery 위치에 저장됩니다.

일괄 예측 결과 예시

출력 폴더에는 JSON Line 파일 집합이 있습니다.

파일 이름은 {gcs_path}/prediction.results-{file_number}-of-{number_of_files_generated}입니다. 일괄 예측의 분산 특성으로 인해 파일 수는 확정되지 않습니다.

파일의 각 줄은 입력의 인스턴스에 해당하며 다음과 같은 키-값 쌍이 있습니다.

  • prediction: 예측 컨테이너에서 반환된 값이 포함됩니다.
  • instance: FileList의 경우 Cloud Storage URI가 포함됩니다. 다른 모든 입력 형식의 경우 HTTP 요청 본문의 예측 컨테이너로 전송된 값이 포함됩니다.

예시 1

HTTP 요청에 다음이 포함된 경우 다음을 실행합니다.

{
  "instances": [
    [1, 2, 3, 4],
    [5, 6, 7, 8]
]}

예측 컨테이너에서 다음을 반환합니다.

{
  "predictions": [
    [0.1,0.9],
    [0.7,0.3]
  ],
}

그러면 jsonl 출력 파일은 다음과 같습니다.

{ "instance": [1, 2, 3, 4], "prediction": [0.1,0.9]}
{ "instance": [5, 6, 7, 8], "prediction": [0.7,0.3]}

예시 2

HTTP 요청에 다음이 포함된 경우 다음을 실행합니다.

{
  "instances": [
    {"values": [1, 2, 3, 4], "key": 1},
    {"values": [5, 6, 7, 8], "key": 2}
]}

예측 컨테이너에서 다음을 반환합니다.

{
  "predictions": [
    {"result":1},
    {"result":0}
  ],
}

그러면 jsonl 출력 파일은 다음과 같습니다.

{ "instance": {"values": [1, 2, 3, 4], "key": 1}, "prediction": {"result":1}}
{ "instance": {"values": [5, 6, 7, 8], "key": 2}, "prediction": {"result":0}}

Explainable AI 사용

많은 양의 데이터에는 특성 기반 설명을 실행하지 않는 것이 좋습니다. 이는 각 입력이 가능한 특성 값 세트에 따라 수천 개의 요청으로 팬아웃될 수 있으며, 이로 인해 처리 시간과 비용이 크게 증가할 수 있기 때문입니다. 일반적으로 작은 데이터 세트로도 특성 중요도를 파악할 수 있습니다.

일괄 예측에서는 예시 기반 설명을 지원하지 않습니다.

다음 단계