예측에 Spot VM 사용

개요

스팟 VM을 사용하면 예측 작업 실행 비용을 줄일 수 있습니다. 스팟 VM은 Compute Engine 용량을 초과하는 가상 머신(VM) 인스턴스입니다. 스팟 VM에는 상당한 할인이 적용되지만 Compute Engine은 언제든지 용량을 회수하기 위해 스팟 VM을 사전에 중지하거나 삭제(선점)할 수 있습니다.

자세한 내용은 스팟 VM을 참고하세요.

제한사항 및 요구사항

Vertex AI에서 스팟 VM을 사용할 때는 다음 제한사항 및 요구사항을 고려하세요.

  • Vertex AI에서 스팟 VM을 사용할 때는 모든 스팟 VM 제한사항이 적용됩니다.
  • Vertex AI에서 스팟 VM을 사용하는 것은 커스텀 학습 및 예측에만 지원됩니다.
  • TPU 포드에서 스팟 VM을 사용하는 것은 지원되지 않습니다.
  • Google Cloud 콘솔을 통한 작업 제출은 지원되지 않습니다.

결제

워크로드가 내결함성이 있고 잠재적인 VM 선점을 견딜 수 있는 경우 Spot VM은 컴퓨팅 비용을 크게 줄여줄 수 있습니다. 처리 과정에서 일부 VM이 종료되면 작업이 느려지지만 완전히 중지되지는 않습니다. 스팟 VM은 기존 VM에 추가 로드를 배치하지 않고 추가 표준 VM에 대한 전체 비용을 지불할 필요도 없이 일괄 처리 태스크를 완료합니다. 선점 처리를 참고하세요.

스팟 VM을 사용하면 작업 기간 및 머신 유형에 따라 요금이 청구됩니다. 작업이 대기열에 있거나 선점된 시간에 대해서는 요금이 청구되지 않습니다.

선점 처리

Compute Engine은 언제든지 스팟 VM을 회수할 수 있습니다. 따라서 스팟 VM의 이점을 최대한 활용하려면 예측 작업에 내결함성이 있어야 합니다. 스팟 VM이 선점되면 STOCKOUT 오류가 표시되면서 예측 작업이 실패하고 Compute Engine에서 작업을 최대 6회까지 다시 시작하려고 시도합니다. 스팟 VM을 최대한 활용하는 방법을 알아보려면 스팟 VM 권장사항을 참고하세요.

다음은 예측 작업에 내결함성이 있도록 하는 데 사용할 수 있는 몇 가지 방법입니다.

  • 진행 상황을 저장할 체크포인트를 만듭니다. 모델의 진행 상황을 주기적으로 저장하면 종료된 예측 작업을 처음부터 다시 시작하는 대신 마지막으로 저장된 체크포인트에서 재개할 수 있습니다.
  • 종료 스크립트를 사용합니다. Compute Engine이 스팟 VM을 선점하면 종료 스크립트를 사용하여 VM이 선점되기 전에 정리 작업을 수행할 수 있습니다. 자세한 내용은 종료 스크립트로 선점 처리를 참고하세요.

스팟 VM을 사용하여 예측 가져오기

모델을 배포하여 예측을 가져올 때 스팟 VM을 사용하려면 REST API 또는 Vertex AI SDK for Python을 사용하면 됩니다.

REST

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

  • LOCATION_ID: Vertex AI를 사용하는 리전
  • PROJECT_ID: 프로젝트 ID
  • ENDPOINT_ID: 엔드포인트의 ID
  • MODEL_ID: 배포할 모델의 ID
  • DEPLOYED_MODEL_NAME: DeployedModel의 이름. DeployedModelModel 표시 이름도 사용할 수 있습니다.
  • MACHINE_TYPE: 선택사항. 이 배포의 각 노드에 사용되는 머신 리소스입니다. 기본 설정은 n1-standard-2입니다. 머신 유형에 대해 자세히 알아보세요.
  • ACCELERATOR_TYPE: 선택사항. 머신에 연결할 가속기 유형입니다. 자세히 알아보기
  • ACCELERATOR_COUNT: 선택사항. 사용할 각 복제본의 가속기 수입니다.
  • MIN_REPLICA_COUNT: 이 배포의 최소 노드 수. 예측 로드 시 필요에 따라 최대 노드 수까지 노드 수를 늘리거나 줄일 수 있으며 이 노드 수 미만으로는 줄일 수 없습니다. 값은 1 이상이어야 합니다.
  • MAX_REPLICA_COUNT: 이 배포의 최대 노드 수. 예측 로드 시 필요에 따라 이 노드 수까지 노드 수를 늘리거나 줄일 수 있으며 최소 노드 수 미만으로는 줄일 수 없습니다.
  • TRAFFIC_SPLIT_THIS_MODEL: 이 작업과 함께 배포되는 모델로 라우팅될 이 엔드포인트에 대한 예측 트래픽 비율입니다. 기본값은 100입니다. 모든 트래픽 비율의 합은 100이 되어야 합니다. 트래픽 분할에 대해 자세히 알아보기
  • DEPLOYED_MODEL_ID_N: (선택사항) 다른 모델이 이 엔드포인트에 배포된 경우 모든 비율의 합이 100이 되도록 트래픽 분할 비율을 업데이트해야 합니다.
  • TRAFFIC_SPLIT_MODEL_N: 배포된 모델 ID 키의 트래픽 분할 비율 값
  • PROJECT_NUMBER: 프로젝트의 자동으로 생성된 프로젝트 번호

HTTP 메서드 및 URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

JSON 요청 본문:

{


"acceleratorCount": 1}, "spot": true, "minReplicaCount": 1, "maxReplicaCount": 1}}, "trafficSplit": {"0": 100}}' \
  "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel"

  "deployedModel": {
    "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_NAME",
    "enableContainerLogging": true,
    "dedicatedResources": {
      "machineSpec": {
        "machineType": "MACHINE_TYPE",
        "acceleratorType": "ACCELERATOR_TYPE",
        "acceleratorCount": ACCELERATOR_COUNT
      },
      "spot": true,
      "minReplicaCount": MIN_REPLICA_COUNT,
      "maxReplicaCount": MAX_REPLICA_COUNT
    },
  },
  "trafficSplit": {
    "0": TRAFFIC_SPLIT_THIS_MODEL,
    "DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1,
    "DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2
  },
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

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

{
  "name": "projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-10-19T17:53:16.502088Z",
      "updateTime": "2020-10-19T17:53:16.502088Z"
    }
  }
}

Python

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

endpoint5.deploy(
    model = model,
    deployed_model_display_name=DEPLOYED_NAME,
    traffic_split=TRAFFIC_SPLIT,
    machine_type="MACHINE_TYPE",
    accelerator_type="ACCELERATOR_TYPE",
    accelerator_count=ACCELERATOR_COUNT,
    min_replica_count=MIN_REPLICA_COUNT,
    max_replica_count=MAX_REPLICA_COUNT,
    spot=True,
    sync=True
)

다음 단계