학습에 스팟 VM 사용

개요

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

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

제한사항 및 요구사항

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

  • Vertex AI에서 스팟 VM을 사용할 때는 모든 스팟 VM 제한사항이 적용됩니다.
  • Vertex AI에서 스팟 VM을 사용하는 것은 커스텀 학습 및 예측에만 지원됩니다.
  • TPU 포드에서 스팟 VM을 사용하는 것은 지원되지 않습니다.
  • Vertex AI 학습은 다음 머신 시리즈의 스팟 VM만 사용할 수 있습니다.

    • A2
    • A3
  • Google Cloud 콘솔을 통한 작업 제출은 지원되지 않습니다.

결제

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

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

선점 처리

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

다음은 커스텀 학습 작업을 내결함성을 갖도록 만드는 데 사용할 수 있는 몇 가지 방법입니다.

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

시작하기 전에

커스텀 학습 애플리케이션을 준비합니다.

스팟 VM을 사용하도록 학습 작업 구성

예약 구성에서 SPOT 전략을 지정하여 스팟 VM을 사용하도록 커스텀 학습 작업을 구성할 수 있습니다.

REST

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

  • LOCATION: 컨테이너 또는 Python 패키지가 실행될 리전입니다.
  • PROJECT_ID: 프로젝트 ID
  • JOB_NAME: 필수. CustomJob의 표시 이름입니다.
  • 커스텀 학습 작업을 다음과 같이 정의합니다.
    • MACHINE_TYPE: 머신 유형입니다. 학습에 사용 가능한 머신 유형을 참고하세요.
    • REPLICA_COUNT: 사용할 작업자 복제본의 수입니다. 대부분의 경우 첫 작업자 풀에서는 1로 설정합니다.
    • 학습 애플리케이션이 커스텀 컨테이너에서 실행되는 경우 다음을 지정합니다.
      • CUSTOM_CONTAINER_IMAGE_URI: 학습 코드가 포함된 Docker 컨테이너 이미지의 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 모듈로 전달할 명령줄 인수입니다.

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"
          }
        },
        "replicaCount": REPLICA_COUNT,

        // 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": {
      "strategy": "SPOT"
    }
  }
}

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

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

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

Python

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

customJob = aiplatform.CustomJob(
    display_name=TEST_CASE_NAME,
    worker_pool_specs=worker_pool_spec,
    staging_bucket=OUTPUT_DIRECTORY
)
customJob.run(
    scheduling_strategy=aiplatform.compat.types.custom_job.Scheduling.Strategy.SPOT
)

다음 단계