일괄 추론과 함께 예약 사용

이 문서에서는 Compute Engine 예약을 사용하여 배치 추론 작업을 실행하는 데 필요한 가상 머신 (VM) 리소스를 확보하는 방법을 설명합니다.

예약은 Compute Engine 기능입니다. 이를 통해 필요할 때마다 동일한 하드웨어 (메모리 및 vCPU)와 선택적 리소스 (CPU, GPU, TPU, 로컬 SSD 디스크)를 사용하여 VM을 만들 수 있는 리소스를 확보할 수 있습니다.

예약을 만들면 Compute Engine에서 요청된 용량을 지정된 영역에서 사용할 수 있는지 확인합니다. 사용할 수 있으면 Compute Engine에서 리소스를 예약하고 예약을 만든 후 다음 작업이 수행됩니다.

  • 예약된 리소스는 즉시 사용할 수 있으며 예약을 삭제할 때까지 사용 가능한 상태로 유지됩니다.
  • 예약이 삭제될 때까지 적용 가능한 할인을 포함하여 실행 중인 VM과 동일한 주문형 가격으로 예약된 리소스에 대한 비용이 청구됩니다. 예약을 사용 중인 VM에는 별도의 요금이 청구되지 않습니다. 디스크나 IP 주소와 같이 예약 범위 외부의 리소스에 대해서만 요금이 청구됩니다. 자세한 내용은 예약 가격 책정을 참조하세요.

제한사항 및 요구사항

Vertex AI에 Compute Engine 예약을 사용할 때는 다음 제한사항과 요구사항을 고려하세요.

  • Vertex AI는 CPU, GPU VM 또는 TPU (프리뷰)의 예약만 사용할 수 있습니다.
  • Vertex AI는 로컬 SSD 디스크가 수동으로 연결된 VM의 예약을 사용할 수 없습니다.
  • 커스텀 학습 및 추론과 Vertex AI Workbench (미리보기)에만 Vertex AI에서 Compute Engine 예약 사용이 지원됩니다.
  • 예약을 사용하려면 예약의 VM 속성이 Vertex AI 워크로드와 정확하게 일치해야 합니다. 예를 들어 예약에 a2-ultragpu-8g 머신 유형이 지정된 경우에는 a2-ultragpu-8g 머신 유형을 사용하는 경우에만 Vertex AI 워크로드가 해당 예약을 사용할 수 있습니다. 요구사항을 참조하세요.
  • GPU VM 또는 TPU의 공유 예약을 사용하려면 소유자 프로젝트 또는 예약이 공유된 사용자 프로젝트를 사용하여 예약을 사용해야 합니다. 공유 예약 작동 방법을 참조하세요.
  • SPECIFIC_RESERVATION 예약을 사용하려면 예약을 소유하는 프로젝트에서 Vertex AI 서비스 계정에 컴퓨팅 뷰어 IAM 역할을 부여합니다(service-${PROJECT_NUMBER}@gcp-sa-aiplatform.iam.gserviceaccount.com, 여기서 PROJECT_NUMBER는 예약을 사용하는 프로젝트의 프로젝트 번호).
  • Vertex AI 배치 추론에 Compute Engine 예약을 사용하면 다음 서비스와 기능이 지원되지 않습니다.

    • 연방 위험 및 인증 관리 프로그램(FedRAMP) 규정 준수

결제

Compute Engine 예약을 사용하면 다음 항목에 대한 요금이 청구됩니다.

  • 해당하는 약정 사용 할인(CUD)을 포함하여 Compute Engine 리소스의 Compute Engine 가격 책정. Compute Engine 가격 책정을 참조하세요.
  • 인프라 사용량 외에도 Vertex AI 일괄 추론 관리 수수료가 있습니다. 예측 가격 책정을 참조하세요.

시작하기 전에

예약 사용 허용

CPU, GPU VM 또는 TPU 예약을 사용하기 전에 Vertex AI에서 예약을 사용할 수 있도록 공유 정책을 설정해야 합니다. 이렇게 하려면 다음 방법 중 하나를 사용합니다.

예약을 만드는 동안 사용 허용

GPU VM의 단일 프로젝트 또는 공유 예약을 만드는 동안 Vertex AI가 다음과 같이 예약을 사용하도록 지정할 수 있습니다.

  • Google Cloud 콘솔을 사용하는 경우 Google Cloud 서비스 섹션에서 예약 공유를 선택합니다.
  • Google Cloud CLI를 사용하는 경우 ALLOW_ALL로 설정된 --reservation-sharing-policy 플래그를 포함합니다.
  • REST API를 사용하는 경우 요청 본문에서 ALLOW_ALL로 설정된 serviceShareType 필드를 포함합니다.

기존 예약에서 사용 허용

예약 시작 시간 이후에만 미래용 예약의 GPU VM 또는 TPU 자동 생성 예약을 수정할 수 있습니다.

Vertex AI에서 기존 예약을 사용하도록 허용하려면 다음 방법 중 하나를 사용하세요.

예약이 사용되었는지 확인

예약이 사용되고 있는지 확인하려면 Compute Engine 문서에서 예약 사용 확인을 참조하세요.

예약을 사용하여 일괄 추론 가져오기

GPU VM의 Compute Engine 예약을 사용하는 일괄 추론 요청을 만들려면 REST API를 사용하고 소스와 대상으로 Cloud Storage 또는 BigQuery를 선택하면 됩니다.

Cloud Storage

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

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

  • PROJECT_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: 이 일괄 예측 작업에 사용할 머신 리소스입니다.

  • ACCELERATOR_TYPE: 머신에 연결할 가속기 유형입니다. 각 머신 유형이 지원하는 GPU 유형에 대한 자세한 내용은 컴퓨팅 워크로드의 GPU를 참고하세요.

  • ACCELERATOR_COUNT: 머신에 연결할 가속기 수입니다.

  • RESERVATION_AFFINITY_TYPE: ANY, SPECIFIC_RESERVATION 또는 NONE이어야 합니다.

    • ANYcustomJob VM에서 일치하는 속성이 있는 예약을 자동으로 사용할 수 있음을 의미합니다.
    • SPECIFIC_RESERVATIONcustomJob VM이 VM에서 이름별로 명확하게 타겟팅하는 예약만 사용할 수 있음을 의미합니다.
    • NONEcustomJob VM에서 어떠한 예약도 사용할 수 없음을 의미합니다. NONE을 지정하면 예약 어피니티 사양 생략과 동일한 효과가 있습니다.
  • 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,
      "acceleratorType": "ACCELERATOR_TYPE",
      "acceleratorCount": ACCELERATOR_COUNT,
      "reservationAffinity": {
        "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
        "key": "compute.googleapis.com/reservation-name",
        "values": [
          "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
        ]
      }
    },
    "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",
}

BigQuery

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

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

  • PROJECT_ID: 예약이 생성된 프로젝트입니다. 다른 프로젝트의 공유 예약을 사용하려면 해당 프로젝트와 예약을 공유해야 합니다. 자세한 내용은 공유 예약의 사용자 프로젝트 수정을 참고하세요.

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

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

  • INPUT_PROJECT_ID: 데이터를 가져오려는 Google Cloud 프로젝트의 ID입니다.

  • INPUT_DATASET_NAME: 데이터를 가져올 BigQuery 데이터 세트의 이름입니다.

  • INPUT_TABLE_NAME: 데이터를 가져올 BigQuery 테이블의 이름입니다.

  • OUTPUT_PROJECT_ID: 출력을 저장할 Google Cloud 프로젝트의 ID입니다.

  • OUTPUT_DATASET_NAME: 출력을 저장할 대상 BigQuery 데이터 세트의 이름입니다.

  • OUTPUT_TABLE_NAME: 출력을 저장할 BigQuery 대상 테이블의 이름입니다.

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

  • ACCELERATOR_TYPE: 머신에 연결할 가속기 유형입니다. 각 머신 유형이 지원하는 GPU 유형에 대한 자세한 내용은 컴퓨팅 워크로드의 GPU를 참고하세요.

  • ACCELERATOR_COUNT: 머신에 연결할 가속기 수입니다.

  • RESERVATION_AFFINITY_TYPE: ANY, SPECIFIC_RESERVATION 또는 NONE이어야 합니다.

    • ANYcustomJob VM에서 일치하는 속성이 있는 예약을 자동으로 사용할 수 있음을 의미합니다.
    • SPECIFIC_RESERVATIONcustomJob VM이 VM에서 이름별로 명확하게 타겟팅하는 예약만 사용할 수 있음을 의미합니다.
    • NONEcustomJob VM에서 어떠한 예약도 사용할 수 없음을 의미합니다. NONE을 지정하면 예약 어피니티 사양 생략과 동일한 효과가 있습니다.
  • 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": "bigquery",
    "bigquerySource": {
      "inputUri": "bq://INPUT_PROJECT_ID.INPUT_DATASET_NAME.INPUT_TABLE_NAME"
    },
  },
  "outputConfig": {
    "predictionsFormat":"bigquery",
    "bigqueryDestination":{
      "outputUri": "bq://OUTPUT_PROJECT_ID.OUTPUT_DATASET_NAME.OUTPUT_TABLE_NAME"
    }
  },
  "dedicatedResources" : {
    "machineSpec" : {
      "machineType": MACHINE_TYPE,
      "acceleratorType": "ACCELERATOR_TYPE",
      "acceleratorCount": ACCELERATOR_COUNT,
      "reservationAffinity": {
        "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
        "key": "compute.googleapis.com/reservation-name",
        "values": [
          "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
        ]
      }
    },
    "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",
    "bigquerySource": {
      "uris": [
        "INPUT_URI"
      ]
    }
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "bigqueryDestination": {
      "outputUri": "OUTPUT_URI"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-05-30T02:58:44.341643Z",
  "updateTime": "2020-05-30T02:58:44.341643Z",
}

일괄 추론 결과 가져오기

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

다음 단계