VM 예약을 사용하여 리소스 가용성 확보

이 문서에서는 예약된 리소스에서 실행되는 작업을 만드는 방법에 대해 설명합니다.

예약은 Compute Engine의 기능입니다. 예약은 지정된 하드웨어 구성으로 하나 이상의 VM에 대한 용량을 확보하는 데 매우 높은 수준의 확신을 제공합니다. VM을 예약하면 예약을 만들 때부터 예약을 삭제할 때까지 VM 비용이 발생합니다. 하지만 이 VM을 사용하는 동안 총 비용은 예약이 없는 VM과 같습니다.

일반적으로 예약은 용량 가용성이 매우 중요한 작업이거나 리소스를 가져오는 데 오류가 발생해서는 안 될 때 유용합니다. 특히 Batch의 경우 작업 예약 시간을 최소화하는 데 도움이 되는 전용 예약을 사용하거나 사용하지 않고 있던 기존 예약을 사용해 보세요. 약정 사용 할인에 필요한 예약과 같이 사용량이 적은 예약이 있으면, 사용되지 않는 동안 이를 사용하도록 작업을 구성하여 이를 통해 발생하게 되는 비용을 최적화할 수 있습니다.

예약에 대한 자세한 내용은 예약에 대한 Compute Engine 문서를 참조하세요.

시작하기 전에

제한사항

예약의 일반 제한사항 외에도 Batch에는 다음과 같은 제한사항이 있습니다.

  • 작업의 VM은 공유 예약을 사용할 수 없습니다.
  • 압축 배치 정책을 지정하면 작업의 VM이 예약을 사용할 수 없습니다.

요구사항

이 섹션에는 작업의 VM이 예약을 사용할 때의 요구사항이 요약되어 있습니다. 모든 요구사항에 대한 자세한 내용은 Compute Engine 문서의 예약 일반 요구사항구성 계획 절차를 참조하세요.

  • 작업의 VM이 일반적으로 예약을 사용할 수 있으려면 다음 조건을 모두 충족해야 합니다.

    • 작업 및 예약은 정확하게 일치하는 VM 속성을 지정해야 합니다.

    • 이 문서의 모든 제한사항 및 예약에 대한 기타 일반 요구사항을 모두 준수해야 합니다.

  • 작업의 VM마다 예약이 성공적으로 사용되도록 하려면 예약에 사용되지 않는 용량이 VM 실행 시간 동안 사용 가능해야 합니다.

    예약에 사용되지 않은 용량은 VM 수와 현재 이를 사용하는 VM 수의 차이입니다. VM은 사용되지 않는 예약 용량이 있을 때마다 예약을 사용하려고 시도합니다. 따라서 VM이 만들어진 후 또는 나중에 실행되었을 때 VM이 예약을 사용하기 시작할 수 있습니다. VM은 VM 실행이 중지되거나 예약이 삭제될 때까지 예약 사용을 중지하지 않습니다.

    사용되지 않은 총 예약 용량에 따라 작업의 VM 또는 일부 또는 전부가 예약을 사용할 수 있으며, 예약된 VM의 양은 작업 실행 시간 동안 달라질 수 있습니다.

예약된 VM을 사용할 수 있는 작업 만들기 및 실행

  1. 구성 계획하기: 작업 및 예약이 호환되는지 확인하려면 다음 단계를 완료하세요.

    이미 존재하는 예약을 사용하려면 해당 구성으로 작업을 만들어야 합니다. 그렇지 않고 새 예약을 만들려는 경우에는 원하는 구성 옵션을 선택합니다.

    1. 예약 속성 결정하기: 제한으로 인해 공유 유형은 예약의 기본 옵션인 단일 프로젝트여야 합니다. 다음 예약 속성에 사용할 값을 결정합니다.

      • 소비 유형*
      • VM 수

      *예약의 소비 유형(특히 타겟팅됨 또는 자동 소비됨)은 어느 VM이 예약을 사용할 것인지 결정합니다.

      VM 수는 예약의 총 용량을 나타냅니다. 이 값을 결정할 때는 작업의 VM 수를 고려하세요.

    2. 작업 및 예약의 VM 속성 확인하기. 이러한 제약으로 인해 작업과 예약 모두 예약 및 작업의 기본 옵션인 압축 배치 정책을 지정할 수 없습니다. 다음 VM 속성에 대해서 예약과 작업에 대해 정확히 일치하는 값을 결정하세요.

      • 프로젝트
      • 영역*
      • 머신 유형
      • 최소 CPU 플랫폼(해당하는 경우)
      • GPU 유형 및 수량(해당하는 경우)
      • 로컬 SSD 유형 및 수량(해당하는 경우)
      • 예약 어피니티#

      *작업 VM은 예약된 VM과 동일한 영역에 있어야 합니다. 작업의 allowedLocations[] 필드에 이 영역을 포함하거나 allowedLocations[] 필드를 생략할 경우 작업 위치를 이 영역이 포함된 리전으로 설정해야 합니다.

      작업은 policy 하위 필드 또는 VM 인스턴스 템플릿을 사용하여 이러한 속성을 모두 정의해야 합니다. 작업은 policy 하위 필드와 템플릿 조합을 지정할 수 없습니다.

      한 리소스에서는 선택적 필드를 정의하고 다른 리소스에서 생략할 수 없습니다. 예약과 작업에 대한 선택적 필드를 정의하거나 생략합니다. 작업이 VM 인스턴스 템플릿을 지정하는 경우 지정된 템플릿의 필드에도 적용됩니다.

      #예약의 소비 유형은 작업의 VM에 필요한 예약 어피니티를 결정하며 이를 다음과 같이 작업에 지정해야 합니다.

      • 작업이 VM 인스턴스 템플릿을 사용하는 경우 템플릿은 예약 문서에 설명된 대로 예약 어피니티를 구성해야 합니다.
      • 작업이 템플릿을 사용하지 않고 예약이 명시적으로 타겟팅된 경우 작업의 reservation 필드에 예약 이름을 지정합니다.
      • 그렇지 않고 작업에서 템플릿을 사용하지 않고 예약이 자동으로 사용되는 경우 작업의 reservation 필드를 생략합니다.
  2. 예약 준비하기: 아직 만들지 않았으면 작업의 VM이 사용할 예약을 만듭니다. 예약에 계획한 속성이 있는지 확인합니다.

  3. 작업을 만들고 실행하기: gcloud CLI 또는 Batch API를 사용하여 준비된 예약에서 VM을 사용하는 작업을 만들고 실행할 수 있습니다.

    gcloud

    1. VM 인스턴스 리소스(instances[]) 하위 필드를 예약의 VM 속성과 정확하게 일치하도록 설정하여 작업의 구성 세부정보를 지정하는 JSON 파일을 만듭니다.

      예를 들어 예약의 VM을 사용하는 기본 스크립트 작업을 만들려면 다음 콘텐츠가 포함된 JSON 파일을 만듭니다.

      {
        "taskGroups": [
          {
            "taskSpec": {
              "runnables": [
                {
                  "script": {
                    "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                  }
                }
              ]
            },
            "taskCount": 3
          }
        ],
        "allocationPolicy": {
          "instances": [
            {
              VM_RESOURCES
            }
          ],
        },
        "logsPolicy": {
          "destination": "CLOUD_LOGGING"
        }
      }
      

      VM_RESOURCES를 이전 단계에서 계획한 instances[] 하위 필드를 지정하여 작업에서 사용할 예약과 일치하는 VM 리소스로 바꿉니다.

      예를 들어 VM_RESOURCES의 다음 값에서 시작합니다.

      "installGpuDrivers": INSTALL_GPU_DRIVERS,
      "policy": {
        "machineType": "MACHINE_TYPE",
        "minCpuPlatform": "MIN_CPU_PLATFORM",
        "accelerators": [
          {
            "type": "GPU_TYPE",
            "count": GPU_COUNT
          }
        ],
        "disks": [
          {
            "newDisk": {
              "sizeGb": LOCAL_SSD_SIZE,
              "type": "local-ssd"
            },
            "deviceName": "LOCAL_SSD_NAME"
          }
        ],
        "reservation": "SPECIFIC_RESERVATION_NAME"
      }
      

      이 값을 사용하려면 다음과 같이 모두 변경합니다.

      1. 인스턴스 템플릿을 사용하시겠습니까?

        • 예: policy 필드를 instanceTemplate 필드로 바꾸고 예약과 일치하는 기존 VM 인스턴스 템플릿을 지정합니다. 예를 들어 VM 인스턴스 템플릿을 사용하는 코드 샘플을 참조하세요. 예약이 GPU 또는 로컬 SSD를 사용하는 경우 작업의 installGpuDrivers 필드와 volumes[] 필드를 각각 구성해야 합니다. 그렇지 않으면 나머지 변경사항을 건너뜁니다.

        • 아니요: MACHINE_TYPE을 예약과 동일한 머신 유형으로 바꿉니다.

      2. 예약에 최소 CPU 플랫폼이 포함되어 있나요?

        • 예: MIN_CPU_PLATFORM을 동일한 최소 CPU 플랫폼으로 바꿉니다.

        • 아니요: minCpuPlatform 필드를 삭제합니다.

      3. 예약에 GPU가 포함되어 있나요?

        • 예: 예약과 일치하도록 INSTALL_GPU_DRIVERS, GPU_TYPE, GPU_COUNT를 바꿉니다. 예를 들어 GPU 사용에 대한 코드 샘플을 참조하세요.

        • 아니요: installGpuDrivers 필드와 accelerators[] 필드를 삭제합니다.

      4. 예약에 로컬 SSD가 포함되나요?

        • : LOCAL_SSD_SIZELOCAL_SSD_NAME를 예약과 일치하도록 바꾸고 작업에 volumes[] 필드를 추가하여 로컬 SSD를 마운트합니다. 예를 들어 로컬 SSD 사용에 대한 코드 샘플을 참조하세요.

        • 아니요: disks[] 필드를 삭제합니다.

      5. 예약이 특별히 타겟팅된 소비 유형을 사용하나요?

        • 예: SPECIFIC_RESERVATION_NAME을 예약 이름으로 바꿉니다.

        • 아니요: reservation 필드를 삭제합니다.

      예를 들어 최소 CPU 플랫폼, GPU 또는 로컬 SSD를 지정하지 않는 n2-standard-32 VM에 자동으로 소비된 예약을 사용한다고 가정해 보겠습니다. 또한 VM 인스턴스 템플릿을 지정하지 않아야 합니다. 이 경우 VM_RESOURCES를 다음 값으로 바꿔야 합니다.

      "policy": {
        "machineType": "n2-standard-32"
      }
      
    2. 작업을 만들고 실행하려면 gcloud batch jobs submit 명령어를 사용합니다.

      gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
      

      다음을 바꿉니다.

      • JOB_NAME: 작업의 이름

      • LOCATION: 작업의 위치 작업에서 allowedLocations[] 필드를 지정하지 않으면 예약 영역이 포함된 리전이어야 합니다.

      • JSON_CONFIGURATION_FILE: 작업의 구성 세부정보가 포함된 JSON 파일의 경로

    API

    VM 인스턴스 리소스(instances[]) 하위 필드가 예약의 VM 속성과 정확하게 일치하도록 설정하는 jobs.create 메서드POST 요청을 만듭니다.

    예를 들어 예약의 VM을 사용하는 기본 스크립트 작업을 만들려면 다음 요청을 수행합니다.

    POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "allocationPolicy": {
        "instances": [
          {
            VM_RESOURCES
          }
        ],
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트의 프로젝트 ID

    • LOCATION: 작업의 위치 작업에서 allowedLocations[] 필드를 지정하지 않으면 예약 영역이 포함된 리전이어야 합니다.

    • JOB_NAME: 작업의 이름

    • VM_RESOURCES: 이전 단계에서 계획한 instances[] 하위 필드를 지정하여 작업에서 사용할 예약과 일치하는 VM 리소스

      예를 들어 VM_RESOURCES의 다음 값에서 시작합니다.

      "installGpuDrivers": INSTALL_GPU_DRIVERS,
      "policy": {
        "machineType": "MACHINE_TYPE",
        "minCpuPlatform": "MIN_CPU_PLATFORM",
        "accelerators": [
          {
            "type": "GPU_TYPE",
            "count": GPU_COUNT
          }
        ],
        "disks": [
          {
            "newDisk": {
              "sizeGb": LOCAL_SSD_SIZE,
              "type": "local-ssd"
            },
            "deviceName": "LOCAL_SSD_NAME"
          }
        ],
        "reservation": "SPECIFIC_RESERVATION_NAME"
      }
      

      이 값을 사용하려면 다음과 같이 모두 변경합니다.

      1. 인스턴스 템플릿을 사용하시겠습니까?

        • 예: policy 필드를 instanceTemplate 필드로 바꾸고 예약과 일치하는 기존 VM 인스턴스 템플릿을 지정합니다. 예를 들어 VM 인스턴스 템플릿을 사용하는 코드 샘플을 참조하세요. 예약이 GPU 또는 로컬 SSD를 사용하는 경우 작업의 installGpuDrivers 필드와 volumes[] 필드를 각각 구성해야 합니다. 그렇지 않으면 나머지 변경사항을 건너뜁니다.

        • 아니요: MACHINE_TYPE을 예약과 동일한 머신 유형으로 바꿉니다.

      2. 예약에 최소 CPU 플랫폼이 포함되어 있나요?

        • 예: MIN_CPU_PLATFORM을 동일한 최소 CPU 플랫폼으로 바꿉니다.

        • 아니요: minCpuPlatform 필드를 삭제합니다.

      3. 예약에 GPU가 포함되어 있나요?

        • 예: 예약과 일치하도록 INSTALL_GPU_DRIVERS, GPU_TYPE, GPU_COUNT를 바꿉니다. 예를 들어 GPU 사용에 대한 코드 샘플을 참조하세요.

        • 아니요: installGpuDrivers 필드와 accelerators[] 필드를 삭제합니다.

      4. 예약에 로컬 SSD가 포함되나요?

        • : LOCAL_SSD_SIZELOCAL_SSD_NAME를 예약과 일치하도록 바꾸고 작업에 volumes[] 필드를 추가하여 로컬 SSD를 마운트합니다. 예를 들어 로컬 SSD 사용에 대한 코드 샘플을 참조하세요.

        • 아니요: disks[] 필드를 삭제합니다.

      5. 예약이 특별히 타겟팅된 소비 유형을 사용하나요?

        • 예: SPECIFIC_RESERVATION_NAME을 예약 이름으로 바꿉니다.

        • 아니요: reservation 필드를 삭제합니다.

      예를 들어 최소 CPU 플랫폼, GPU 또는 로컬 SSD를 지정하지 않는 n2-standard-32 VM에 자동으로 소비된 예약을 사용한다고 가정해 보겠습니다. 또한 VM 인스턴스 템플릿을 지정하지 않아야 합니다. 이 경우 VM_RESOURCES를 다음 값으로 바꿔야 합니다.

      "policy": {
        "machineType": "n2-standard-32"
      }
      

다음 단계