예측과 함께 예약 사용

이 문서에서는 Compute Engine 예약을 사용하여 예측 작업에 실행에 필요한 가상 머신 (VM) 리소스가 있는지 높은 수준으로 보장하는 방법을 설명합니다.

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

예약을 만들면 Compute Engine에서 지정된 영역에서 요청된 용량을 사용할 수 있는지 확인합니다. 이 경우 Compute Engine은 리소스를 예약하고 예약을 생성하며 다음이 실행됩니다.

  • 예약된 리소스는 즉시 사용할 수 있으며 예약을 삭제할 때까지 사용할 수 있습니다.
  • 예약이 삭제될 때까지 예약된 리소스에 대해 실행 중인 VM과 동일한 주문형 요금(해당하는 할인 포함)이 청구됩니다. 예약을 사용하는 VM에는 별도의 요금이 청구되지 않습니다. 자세한 내용은 Compute Engine 영역별 리소스 예약을 참고하세요.

제한사항 및 요구사항

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

  • Vertex AI는 GPU가 연결된 VM의 예약만 사용할 수 있습니다.
  • Vertex AI는 로컬 SSD 디스크가 수동으로 연결된 VM의 예약을 사용할 수 없습니다.
  • 커스텀 학습 및 예측에만 Vertex AI에서 Compute Engine 예약 사용이 지원됩니다.
  • 예약을 사용하려면 예약의 VM 속성이 Vertex AI 워크로드와 정확히 일치해야 합니다. 예를 들어 예약에서 a2-ultragpu-8g 머신 유형을 지정하면 Vertex AI 워크로드가 a2-ultragpu-8g 머신 유형도 사용하는 경우에만 예약을 사용할 수 있습니다. 요구사항을 참고하세요.
  • GPU VM의 공유 예약을 사용하려면 소유자 프로젝트 또는 예약이 공유된 소비자 프로젝트를 사용하여 사용해야 합니다. 공유 예약 작동 방식을 참고하세요.
  • 정기적인 Vertex AI 배포 업데이트를 지원하려면 DeployedModel에서 사용하는 예약 유형에 따라 다음과 같이 총 복제본 수보다 더 많은 VM 수를 늘리는 것이 좋습니다.
    • SPECIFIC_RESERVATION: VM을 1대 이상 추가로 지정해야 합니다. 10% (최소 1대)를 권장합니다. SPECIFIC_RESERVATION를 사용하여 배포된 모델은 예약의 VM만 사용할 수 있습니다. 추가 VM이 없으면 Vertex AI에서 업데이트를 실행할 수 없습니다.
    • ANY:
      • ANY 예약을 사용하는 배포된 모델은 예약 용량이 충분하지 않은 경우 주문형 VM을 사용하므로 VM을 추가로 보유할 필요가 없습니다. 그러나 추가 VM이 없으면 업그레이드 후 예약이 완전히 활용되지 않을 수 있습니다. 예를 들어 VM 40개가 포함된 예약이 있고 이 예약을 사용하여 복제본 40개가 있는 모델을 배포한다고 가정해 보겠습니다. 처음 배포할 때 예약의 모든 40대의 VM이 DeployedModel에서 사용됩니다. 업그레이드 후에는 36대의 VM만 예약에서 가져오고 4대의 VM은 주문형입니다.
      • 사용량을 예약 범위 내에 유지하려면 예약을 사용하는 각 DeployedModel 또는 DeploymentResourcePool에 VM을 1대 이상 추가하는 것이 좋습니다. ANY 예약에 있는 동일한 유형의 총 VM 수가 50개 미만인 경우 10% (최소 1개)를 더하는 것이 좋습니다. 50보다 크면 25% 더 늘리는 것이 좋습니다. 예를 들면 다음과 같습니다.
        • A3 VM 40대를 사용하여 모델을 배포하려는 경우 A3 예약 1개(VM 44대) 또는 A3 예약 2개(VM 30대의 예약 X와 VM 14대의 예약 Y, 총 44대)를 가질 수 있습니다. 예약 수가 모두 Vertex AI와 공유되고 예약의 총 VM 수가 44개 이상인 경우 다른 예약 수에도 동일하게 적용됩니다.
        • A3 VM 100대를 사용하여 모델을 배포하려는 경우 Vertex AI와 공유된 모든 A3 예약의 총 VM 수는 125개 이상이어야 합니다.
        • VM 10대를 사용하여 모델 2개를 배포하려는 경우 Vertex AI와 공유된 모든 A3 예약의 총 VM 수는 12개 이상이어야 합니다. VM 수가 50개 미만이지만 추가 VM 수가 2개(DeployedModel당 1개)입니다.
  • SPECIFIC_RESERVATION 예약을 사용하려면 예약을 소유한 프로젝트(service-${PROJECT_NUMBER}@gcp-sa-aiplatform.iam.gserviceaccount.com, 여기서 PROJECT_NUMBER은 예약을 사용하는 프로젝트의 프로젝트 번호임)의 Vertex AI 서비스 계정에 Compute 뷰어 IAM 역할을 부여합니다.
  • Vertex AI 예측에 Compute Engine 예약을 사용할 경우에는 다음 서비스와 기능이 지원되지 않습니다.

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

결제

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

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

시작하기 전에

예약 사용 허용

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

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

GPU VM의 단일 프로젝트 또는 공유 예약을 만들 때 다음과 같이 Vertex AI에서 예약을 사용할 수 있도록 허용할 수 있습니다.

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

기존 예약에서 사용 허용

Vertex AI에서 기존 GPU VM 예약을 사용하도록 허용하려면 예약의 공유 정책 수정을 참고하세요.

예약이 사용되었는지 확인

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

예약을 사용하여 예측 가져오기

GPU VM의 Compute Engine 예약을 사용하는 모델 배포를 만들려면 REST API 또는 Python용 Vertex AI SDK를 사용하세요.

REST

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

  • LOCATION_ID: Vertex AI를 사용하는 리전
  • PROJECT_ID: 예약이 생성된 프로젝트입니다. 다른 프로젝트의 공유 예약을 사용하려면 해당 프로젝트와 예약을 공유해야 합니다. 자세한 내용은 공유 예약에서 소비자 프로젝트 수정을 참고하세요.
  • ENDPOINT_ID: 엔드포인트의 ID
  • MODEL_ID: 배포할 모델의 ID
  • DEPLOYED_MODEL_NAME: DeployedModel의 이름. DeployedModelModel 표시 이름도 사용할 수 있습니다.
  • MACHINE_TYPE: 이 배포의 각 노드에 사용할 머신 유형입니다. 기본 설정은 n1-standard-2입니다. 지원되는 머신 유형에 관한 자세한 내용은 예측을 위한 컴퓨팅 리소스 구성을 참고하세요.
  • ACCELERATOR_TYPE: 머신에 연결할 가속기 유형입니다. 각 머신 유형에서 지원하는 GPU 유형에 관한 자세한 내용은 컴퓨팅 워크로드를 위한 GPU를 참고하세요.
  • ACCELERATOR_COUNT: 머신에 연결할 가속기 수입니다.
  • RESERVATION_AFFINITY_TYPE: ANY, SPECIFIC_RESERVATION 또는 NONE이어야 합니다.
    • ANYcustomJob VM에서 일치하는 속성이 있는 예약을 자동으로 사용할 수 있음을 의미합니다.
    • SPECIFIC_RESERVATIONcustomJob VM이 VM에서 이름별로 명확하게 타겟팅하는 예약만 사용할 수 있음을 의미합니다.
    • NONEcustomJob VM에서 어떠한 예약도 사용할 수 없음을 의미합니다. NONE을 지정하면 예약 어피니티 사양 생략과 동일한 효과가 있습니다.
  • RESERVATION_NAME: 예약 이름입니다.
  • 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/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

JSON 요청 본문:

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_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"
          ]
        }
      },
      "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_ID/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 참고 문서를 확인하세요.

다음 스크립트를 실행하기 전에 다음을 바꿉니다.

  • DEPLOYED_NAME: 배포된 모델의 이름입니다.
  • TRAFFIC_SPLIT: 배포된 모델 ID 키의 트래픽 분할 비율 값입니다.
  • MACHINE_TYPE: 이 배포의 각 노드에 사용되는 머신입니다. 기본 설정은 n1-standard-2입니다. 머신 유형에 대해 자세히 알아보세요.
  • ACCELERATOR_TYPE: 머신에 연결할 가속기 유형입니다. 각 머신 유형에서 지원하는 GPU 유형에 관한 자세한 내용은 컴퓨팅 워크로드를 위한 GPU를 참고하세요.
  • ACCELERATOR_COUNT: 머신에 연결할 가속기 수입니다.
  • PROJECT_ID: 예약이 생성된 프로젝트입니다. 다른 프로젝트의 공유 예약을 사용하려면 해당 프로젝트와 예약을 공유해야 합니다. 자세한 내용은 공유 예약에서 소비자 프로젝트 수정을 참고하세요.
  • ZONE: 예약이 있는 영역
  • RESERVATION_NAME: 예약 이름입니다.
  • MIN_REPLICA_COUNT: 이 배포의 최소 노드 수. 예측 로드 시 필요에 따라 최대 노드 수까지 노드 수를 늘리거나 줄일 수 있으며 이 노드 수 미만으로는 줄일 수 없습니다. 이 값은 1 이상이어야 합니다.
  • MAX_REPLICA_COUNT: 이 배포의 최대 노드 수. 예측 로드 시 필요에 따라 이 노드 수까지 노드 수를 늘리거나 줄일 수 있으며 최소 노드 수 미만으로는 줄일 수 없습니다.

사용할 예약 유형에 따라 다음 중 하나를 수행합니다.

  • 특정 예약을 사용하려면 다음 단계를 따르세요.
    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,
        reservation_affinity_type="SPECIFIC_RESERVATION",
        reservation_affinity_key="compute.googleapis.com/reservation-name",
        reservation_affinity_values=["projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"],
        min_replica_count=MIN_REPLICA_COUNT,
        max_replica_count=MAX_REPLICA_COUNT,
        sync=True
    )
  • 자동으로 사용되는 예약을 사용하려면 다음 단계를 따르세요.
    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,
        reservation_affinity_type="ANY_RESERVATION",
        min_replica_count=MIN_REPLICA_COUNT,
        max_replica_count=MAX_REPLICA_COUNT,
        sync=True
    )

다음 단계