학습과 함께 예약 사용

이 문서에서는 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는 다음 머신 유형을 지정하는 예약을 지원합니다.
  • Vertex AI는 로컬 SSD 디스크가 수동으로 연결된 VM의 예약을 사용할 수 없습니다.
  • 커스텀 학습 및 예측에만 Vertex AI에서 Compute Engine 예약 사용이 지원됩니다.
  • 예약을 사용하려면 예약의 VM 속성이 Vertex AI 워크로드와 정확하게 일치해야 합니다. 예를 들어 예약에 a2-ultragpu-8g 머신 유형이 지정된 경우에는 a2-ultragpu-8g 머신 유형을 사용하는 경우에만 Vertex AI 워크로드가 해당 예약을 사용할 수 있습니다. 요구사항을 참조하세요.
  • GPU VM의 공유 예약을 사용하려면 소유자 프로젝트 또는 예약이 공유된 사용자 프로젝트를 사용해서 예약을 사용해야 합니다. 공유 예약 작동 방법을 참조하세요.
  • 정기적인 Vertex AI 배포 업데이트를 지원하려면 동시 배포마다 VM 수를 최소 1개 이상 늘리는 것이 좋습니다.
  • Vertex AI 학습에 Compute Engine 예약을 사용할 경우에는 다음 서비스와 기능이 지원되지 않습니다.

청구

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

시작하기 전에

예약 사용 허용

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 문서에서 예약 사용 확인을 참조하세요.

예약이 있는 커스텀 학습 작업 만들기

REST API를 사용하여 GPU VM의 Compute Engine 예약을 사용하는 커스텀 학습 작업을 만듭니다.

REST

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

  • LOCATION: 컨테이너 또는 Python 패키지가 실행될 리전입니다.
  • PROJECT_ID: 예약이 생성된 위치의 프로젝트입니다. 다른 프로젝트의 공유 예약을 사용하려면 해당 프로젝트와 예약을 공유해야 합니다. 자세한 내용은 공유 예약의 사용자 프로젝트 수정을 참조하세요.
  • JOB_NAME: 필수. CustomJob의 표시 이름입니다.
  • 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을 지정하면 예약 어피니티 사양 생략과 동일한 효과가 있습니다.
    • ZONE: 예약이 생성된 영역입니다.
    • RESERVATION_NAME: 예약의 이름입니다.
    • DISK_TYPE: 선택사항. 작업에 사용할 부팅 디스크의 유형으로 pd-standard(기본값) 또는 pd-ssd입니다. 디스크 유형에 대해 자세히 알아보세요.
    • DISK_SIZE: 선택사항. 작업에 사용할 부팅 디스크의 크기(GB)입니다. 기본값은 100입니다.
    • REPLICA_COUNT: 사용할 작업자 복제본 수입니다. 대부분의 경우 첫 작업자 풀에서는 1로 설정합니다.
    • 학습 애플리케이션이 커스텀 컨테이너에서 실행되는 경우 다음을 지정합니다.
      • CUSTOM_CONTAINER_IMAGE_URI: 각 작업자 복제본에서 실행될 Artifact Registry 또는 Docker Hub의 컨테이너 이미지 URI입니다.
      • CUSTOM_CONTAINER_COMMAND: 선택사항. 컨테이너가 시작될 때 호출되는 명령어입니다. 이 명령어는 컨테이너의 기본 진입점을 재정의합니다.
      • CUSTOM_CONTAINER_ARGS: 선택사항. 컨테이너 시작 시 전달될 인수입니다.
    • 학습 애플리케이션이 사전 빌드된 컨테이너에서 실행되는 Python 패키지인 경우 다음을 지정합니다.
      • EXECUTOR_IMAGE_URI: 제공된 코드를 실행하는 컨테이너 이미지의 URI입니다. 학습에 사용 가능한 사전 빌드된 컨테이너를 참고하세요.
      • PYTHON_PACKAGE_URIS: 학습 프로그램 및 종속 패키지인 Python 패키지 파일을 지정하는 쉼표로 구분된 Cloud Storage URI 목록입니다. 패키지 URI의 최대 개수는 100개입니다.
      • PYTHON_MODULE: 패키지를 설치한 후 실행할 Python 모듈 이름입니다.
      • PYTHON_PACKAGE_ARGS: 선택사항. Python 모듈로 전달할 명령줄 인수입니다.
    • TIMEOUT: 선택사항. 작업의 최대 실행 시간입니다.
  • 이 커스텀 작업에 적용할 모든 라벨의 LABEL_NAMELABEL_VALUE를 지정합니다.

HTTP 메서드 및 URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

JSON 요청 본문:

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "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"
            ]
          },
        },
        "replicaCount": REPLICA_COUNT,
        "diskSpec": {
          "bootDiskType": DISK_TYPE,
          "bootDiskSizeGb": DISK_SIZE
        },

        // Union field task can be only one of the following:
        "containerSpec": {
          "imageUri": CUSTOM_CONTAINER_IMAGE_URI,
          "command": [
            CUSTOM_CONTAINER_COMMAND
          ],
          "args": [
            CUSTOM_CONTAINER_ARGS
          ]
        },
        "pythonPackageSpec": {
          "executorImageUri": EXECUTOR_IMAGE_URI,
          "packageUris": [
            PYTHON_PACKAGE_URIS
          ],
          "pythonModule": PYTHON_MODULE,
          "args": [
            PYTHON_PACKAGE_ARGS
          ]
        }
        // End of list of possible types for union field task.
      }
      // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs
      // for distributed training.
    ],
    "scheduling": {
      "timeout": TIMEOUT
    }
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

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

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-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

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-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

응답에는 사양 및 TRAININGPIPELINE_ID에 대한 정보가 포함됩니다.

다음 단계