Combine reservations with committed use discounts


Committed use discounts (CUDs) provide deeply discounted prices for your Compute Engine resources in exchange for 1-year or 3-year committed-use contracts (also known as commitments). You commit to a minimum amount of resource usage or a minimum amount of spend and receive CUDs on your resource usage costs in return. However, commitments don't reserve zonal capacity for your committed resources. To get zonal resources at discounted prices and also ensure that capacity is reserved for them, you must both purchase commitments and create reservations for those zonal resources.

This document explains how you can receive CUDs for your reserved resources and how to attach reservations to resource-based commitments.

Before you begin

  • Review the basics of reservations along with their requirements and restrictions. For more information, see Reservations of Compute Engine zonal resources.
  • If you haven't already, then set up authentication. Authentication is the process by which your identity is verified for access to Google Cloud services and APIs. To run code or samples from a local development environment, you can authenticate to Compute Engine by selecting one of the following options:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

    REST

    To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    For more information, see Authenticate for using REST in the Google Cloud authentication documentation.

CUDs for your reserved resources

You receive CUDs from active commitments for any eligible resource usage in your projects. If you also have any reservations to hold capacity for resources in that project, CUDs from active commitments can also apply to those reserved resources. For any reserved resources to become eligible to receive CUDs, the following requirements apply:

  • You aren't receiving any other form of discount for your resource usage.
  • Your VMs must be consuming the reservations while the commitments are active.
  • At a minimum, the following properties must match between your active commitments and the reservations that your VMs consume:

    • Project and region where they apply
    • Machine family series

Depending on the resource type, you can receive CUDs for your reserved resources in one of the following ways:

  • vCPUs and memory: To receive CUDs for either or both of these resource types, you can purchase resource-based or spend-based commitments that include the required resource types. When VMs in your project consume any reservations whose properties match such active commitments, you automatically receive the applicable CUDs for these types of reserved resources. If you reserved more resources than you committed to, then you don't receive CUDs for those additional resources.

  • GPUs and Local SSD disks: To receive CUDs for either or both of these resource types, you must do the following:

    • Purchase resource-based commitments that include the required resource types.
    • Create reservations for all the committed resources with properties that match your commitment, and attach those reservations to the commitment.

    When VMs in your project consume these attached reservations, you start to receive the applicable CUDs for these types of reserved resources.

Attach reservations to resource-based commitments

You can attach reservations to any resource-based commitment and ensure that capacity is held in specific zones for the committed resources that you plan to use. You can attach multiple reservations to a single commitment; however, a reservation can only be attached to a single commitment. When you purchase a commitment, you can attach reservations to that commitment in one of the following ways:

  • Using existing reservations whose properties match with the commitment
  • Creating new matching reservations while purchasing your commitment

After you purchase a commitment with attached reservations, the reservations remain active as long as the commitment is active. When your commitment expires, Compute Engine automatically deletes any attached reservations. Deleting these reservations has no effect on any running VMs that were consuming those reservations. The running VMs continue to run and you are still charged for those VMs.

Committed resources that don't require attached reservations

Committed vCPUs and memory don't require you to attach matching reservations to your commitments. Nevertheless, when you purchase a commitment that includes vCPUs, memory, or both, you can still choose to attach reservations that specify those resources. To learn how to purchase commitments solely for vCPUs, memory, or both, without attaching reservations, see Purchasing commitments without attached reservations.

Committed resources that require attached reservations

Committed GPUs and Local SSD disks require you to attach matching reservations to your commitments. When you purchase a commitment that includes any GPUs, Local SSD disks, or both, you must also reserve those resources and attach those reservations to your commitment. You can do this using a single reservation or a combination of reservations. When you purchase such a commitment, you can also include vCPUs, memory, or both. However, you don't need to reserve those vCPUs or memory. To learn how to purchase commitments that include either or both GPUs and Local SSD disks, see Purchase commitments with attached reservations in this document.

To view the complete list of machine series that support CUDs for GPUs and Local SSD disks, see the Hardware commitment types section in the resource-based CUDs documentation.

Quantities of resources allowed in attached reservations

For vCPUs and memory, you can have attached reservations specifying more or less amounts of resources than you are committing to. If you commit to more vCPUs or memory than you reserve, then Compute Engine reserves capacity only for these reserved resources. However, you can still use your additional committed resources depending on their availability in your region. If you reserve more vCPUs or memory than you commit to, then you don't receive CUDs for those additional resources that you reserve.

For example, when you purchase a commitment for 4 vCPUs and 30 GB memory, you can choose to do either of the following:

  • Not attach any reservations at all.
  • Attach reservations specifying any combination of these resources types; for example, the following:

    • 4 vCPUs and 30 GB memory
    • 2 vCPUs and 50 GB memory
    • 10 vCPUs and 10 GB memory

However, if your commitment contains any GPUs, Local SSD disks, or both, you must reserve and attach all those resources. Your attached reservations must specify the exact numbers and types of the GPUs and Local SSD disks that you are committing to. Consequently, you also cannot have any additional number or types of GPUs or Local SSD disks in your attached reservations. For example, suppose you purchase a commitment for 30 GB memory and 4 NVIDIA P100 GPUs. The attached reservation (or combination of attached reservations) can specify any amount of vCPUs or memory, but it must have exactly 4 GPUs that are of NVIDIA P100 type. In this example, you can't attach reservations specifying any of the following combination of resources:

  • 6 NVIDIA P100 GPUs
  • 2 NVIDIA P100 GPUs
  • 4 NVIDIA P100 GPUs and 2 NVIDIA V100 GPUs
  • 4 NVIDIA P100 GPUs and 4 Local SSD disks

Purchase commitments with attached reservations

When you purchase a new commitment, you can attach reservations to your commitment in either of the following ways:

After you purchase a commitment, your commitment becomes active on the following day at 12 AM US and Canadian Pacific Time (UTC-8, or UTC-7 during daylight saving time). Between the time of your commitment purchase and its activation time, the status of your commitment remains as NOT_YET_ACTIVE (or as PENDING on the Google Cloud console). After activation, the status of your commitment changes to ACTIVE. For example, suppose you purchase your commitment on January 20th at 10:00 PM US and Canadian Pacific Time (UTC-8 or UTC-7). Compute Engine creates your commitment immediately with its status as NOT_YET_ACTIVE. However, your commitment becomes ACTIVE only on January 21st at 12:00 AM US and Canadian Pacific Time (UTC-8 or UTC-7).

Requirements

Before you purchase a commitment with attached reservations, review these requirements and make sure that your commitment and reservations meet the following criteria:

  • You must purchase the commitment and create the attached reservations in the same project and region.
  • You must purchase the commitment and create the attached reservations for resources from the same machine family series.
  • You must disable the auto-delete option on the attached reservations.
  • If your commitment has GPUs, then the GPU type specified in the reservation and the commitment must match.
  • For GPUs and Local SSD disks, the number of reserved resources of each resource type must exactly match with the number of committed resources for that resource type. For example, if you want to purchase a commitment for 4 V100 GPUs, then your commitment's attached reservations must specify a total of 4 V100 GPUs. However, the amount of vCPU and memory that you reserve can be more or less than what you commit to.
  • For GPUs, purchase commitments for the specific GPU types that you intend to use. For example, you can purchase commitments for either NVIDIA P100s or NVIDIA V100s, but you cannot use a commitment that was purchased for NVIDIA P100 GPUs to cover NVIDIA V100 GPUs.
  • If your attached reservation is a shared reservation and you want to receive the applicable CUDs when you consume that reservation outside your commitment's project, then you must do both the following:

    • Share your reservations only between projects that belong to the same Cloud Billing account as the commitment.
    • Enable CUD sharing for that Cloud Billing account.

Attach existing reservations

You can attach existing reservations while purchasing your commitment by using the Google Cloud console, the Google Cloud CLI, or REST.

Console

Before you purchase a commitment using the Google Cloud console, select the project that you want to use to purchase the commitment. If CUD sharing is enabled for a Cloud Billing account, you can purchase the commitment using any project from that Cloud Billing account. After you select the project, do the following:

  1. In the Google Cloud console, go to the Committed use discounts page.

    Go to Committed use discounts

  2. To purchase a commitment, click Purchase commitment. The Purchase a committed use discount page opens and displays the Hardware tab.

  3. In the Name field, enter a name for your commitment.

  4. In the Region field, select the region where you want to commit to Compute Engine resources.

  5. In the Commitment type field, select the machine family series for your committed resources. The following commitment types provide options for GPUs, Local SSD disks, or both:

    • Accelerator-optimized A2 for A2 machine type resources
    • Accelerator-optimized A3 for A3 Edge and High machine type resources
    • Accelerator-optimized A3 Mega for A3 Mega machine type resources
    • Compute-optimized C2 for C2 machine type resources
    • Compute-optimized C2D for C2D machine type resources
    • General-Purpose C3 for C3 machine type resources
    • General-Purpose C3D for C3D machine type resources
    • General-Purpose N1 for N1 machine type resources
    • General-Purpose N2 for N2 machine type resources
    • General-Purpose N2D for N2D machine resources
    • Graphics-optimized G2 for G2 machine type resources
    • Memory-optimized M3 forM3 machine type resources
    • Storage-optimized Z3 for Z3 machine type resources

  6. For Duration, do the following:

    1. To specify your commitment's plan, select either 1 year or 3 years. This setting determines the preset term length of your commitment.
    2. Optional. To specify a custom term length for your commitment, click the Extend end date toggle and then, in the Date field, specify a custom end date. For more information, see Extend the term length of commitments.

  7. In the Cores field, enter the number of vCPUs that you want to commit to.

  8. In the Memory field, enter the amount, in GB, of memory that you want to commit to.

  9. To commit to GPUs, in the GPUs section, click Add GPU and then do the following:

    1. In the GPU type field, select the type of GPU.
    2. In the Number of GPUs field, enter the number of GPUs.
    3. Optional: If your GPU model supports NVIDIA RTX Virtual Workstations (vWS) for graphics workloads, and you plan to run graphics-intensive workloads, select the Enable Virtual Workstation (NVIDIA GRID) checkbox.
  10. To commit to Local SSD disks, in the Local SSDs section, click Add SSD and then, in the Number of SSDs field, specify the number of disks.

  11. To attach one or more existing reservations to the commitment, in the Reservations field, select Attach existing reservations.

    The Google Cloud console displays a list of all the reservations in your project whose region, machine type, and GPU type match with the commitment. Then, do the following:

    1. Optional. To view reservations with specific properties, in the Filter menu, add or remove filters for the properties that you want.
    2. Select all the reservations that you want to attach to the commitment.
  12. To finish purchasing your commitment with the attached reservations, do the following:

    1. Click Purchase.
    2. In the Purchase a committed use discount dialog, if you agree with the service specific terms, click Purchase again.

gcloud

To purchase a commitment by attaching existing reservations, run the gcloud compute commitments create command. In your command, include the --existing-reservation flag to specify an existing reservation that you want to attach to your commitment. Include a new instance of this flag for every existing reservation that you want to attach. You can attach any number of existing reservations to your commitment.

For example, to purchase a commitment by attaching two reservations to it, run the following command:

gcloud compute commitments create COMMITMENT_NAME \
    --region=REGION \
    --project=PROJECT_ID \
    --resources=vcpu=COMMITTED_VCPUS,memory=COMMITTED_MEMORY,local-ssd=COMMITTED_LOCAL_SSD \
    --resources-accelerator=count=COMMITTED_ACCELERATOR_COUNT,type=COMMITTED_ACCELERATOR_TYPE \
    --plan=DURATION \
    --type=COMMITMENT_TYPE \
    --custom-end-time=CUSTOM_END_DATE \
    --existing-reservation=name='RESERVATION_NAME_1',zone='RESERVATION_ZONE_1' \
    --existing-reservation=name='RESERVATION_NAME_2',zone='RESERVATION_ZONE_2'

Replace the following:

  • COMMITMENT_NAME: the name of the commitment.
  • REGION: the region where the commitment is located.
  • PROJECT_ID: the ID of the project where you want to purchase the commitment with the attached reservations.
  • DURATION: the term duration of the commitment, either 12-month or 36-month.
  • CUSTOM_END_DATE: Optional. A custom end date for your term, which must be formatted as YYYY-MM-DD. For example, to specify a custom end date of April 20, 2024, format it as 2024-04-20.
  • COMMITMENT_TYPE: the commitment type. The following commitment types provide options for GPUs, Local SSD disks, or both:

    • accelerator-optimized for A2 machine type resources
    • accelerator-optimized-a3 for A3 Edge and High machine type resources
    • accelerator-optimized-a3-mega for A3 Mega machine type resources
    • compute-optimized for C2 machine type resources
    • compute-optimized-c2d for C2D machine type resources
    • compute-optimized-c3 for C3 machine type resources
    • compute-optimized-c3d for C3D machine type resources
    • general-purpose for N1 machine type resources
    • general-purpose-n2 for N2 machine type resources
    • general-purpose-n2d for N2D machine resources
    • graphics-optimized for G2 machine type resources
    • memory-optimized-m3 for M3 machine type resources
    • storage-optimized-z3 for Z3 machine type resources

  • COMMITTED_VCPUS: the number of vCPUs that you want in your commitment. The number must be a positive integer.

  • COMMITTED_MEMORY: the amount, in MB or GB, of memory that you want in your commitment. For example, 10240MB or 10GB. If you don't specify a unit, Compute Engine uses GB as the unit. You can purchase memory in increments of 0.25 GB.

  • COMMITTED_LOCAL_SSD: the amount, in GB, of Local SSD space that you want in your commitment. Each Local SSD disk is 375 GB.

  • COMMITTED_ACCELERATOR_COUNT: the number of GPUs that you want in your commitment.

  • COMMITTED_ACCELERATOR_TYPE: the GPU type that you want in your commitment.

  • RESERVATION_NAME_1 and RESERVATION_NAME_2: The names of the existing reservations that you want to attach to the commitment.

  • RESERVATION_ZONE_1 and RESERVATION_ZONE_2: The zones of the existing reservations that you want to attach to the commitment.

Example: Purchase a commitment by attaching existing reservations

Suppose you have two reservations res-01 and res-02 in the us-central1-a and us-central1-b zones of the project myproject. Suppose that these reservations hold a combined capacity for 4 NVIDIA P100 GPUs and 4 Local SSD disks. To purchase a new commitment in the us-central1 region of this project for these GPUs and Local SSD disks, and use these existing reservations as attached reservations, run the following command. Note that the example commitment also contains vCPUs and memory.

gcloud compute commitments create commitment-01 \
    --region=us-central1 \
    --project=myproject \
    --resources=vcpu=96,memory=624GB,local-ssd=1500 \
    --resources-accelerator=type=nvidia-tesla-p100,count=4 \
    --plan 12-month \
    --existing-reservation=name=res-01,zone=us-central1-a \
    --existing-reservation=name=res-02,zone=us-central1-b
    

REST

To purchase a commitment by attaching existing reservations, make a POST request to the regionCommitments.insert method. In your request, include the existingReservations field to specify a comma-separated list of all the existing reservations that you want to attach to your commitment. You can attach any number of existing reservations to your commitment.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/commitments

{
  "name": "COMMITMENT_NAME",
  "plan": "DURATION",
  "type": COMMITMENT_TYPE,
  "resources":
  [
    {
      "amount": "COMMITTED_VCPUS",
      "type": "VCPU"
    },
    {
      "amount": "COMMITTED_MEMORY",
      "type": "MEMORY"
    },
    {
      "acceleratorType": "COMMITTED_ACCELERATOR_TYPE",
      "amount": "COMMITTED_ACCELERATOR_COUNT",
      "type": "ACCELERATOR"
    }
    {
      "amount": "COMMITTED_LOCAL_SSD",
      "type": "LOCAL_SSD"
    }
  ],
  "customEndTimestamp": "CUSTOM_END_DATETEND_TIMEZ",
  "existingReservations": "RESERVATION_URLs"
}

Replace the following:

  • COMMITMENT_NAME: the name of the commitment.
  • REGION: the region where the commitment is located.
  • PROJECT_ID: the ID of the project where you want to purchase the commitment with the attached reservations.
  • DURATION: the term duration of the commitment, either TWELVE_MONTH or THIRTY_SIX_MONTH.
  • COMMITMENT_TYPE: the commitment type. The following commitment types provide options for GPUs, Local SSD disks, or both:

    • ACCELERATOR_OPTIMIZED for A2 machine type resources
    • ACCELERATOR_OPTIMIZED_A3 for A3 Edge and High machine type resources
    • ACCELERATOR_OPTIMIZED_A3_MEGA for A3 Mega machine type resources
    • COMPUTE_OPTIMIZED for C2 machine type resources
    • COMPUTE_OPTIMIZED_C2D for C2D machine type resources
    • COMPUTE_OPTIMIZED_C3 for C3 machine type resources
    • COMPUTE_OPTIMIZED_C3D for C3D machine type resources
    • GENERAL_PURPOSE for N1 machine type resources
    • GENERAL_PURPOSE_N2 for N2 machine type resources
    • GENERAL_PURPOSE_N2D for N2D machine resources
    • GRAPHICS_OPTIMIZED for G2 machine type resources
    • MEMORY_OPTIMIZED_M3 for M3 machine type resources
    • STORAGE_OPTIMIZED_Z3 for Z3 machine type resources

  • COMMITTED_VCPUS: the number of vCPUs that you want in your commitment. The number must be a positive integer.

  • COMMITTED_MEMORY: the amount, in MB, of memory that you want in your commitment. For example, 10240MB. You can purchase memory in increments of 256 MB.

  • COMMITTED_LOCAL_SSD: the amount, in GB, of Local SSD storage that you want in your commitment. Each Local SSD disks is 375 GB.

  • COMMITTED_ACCELERATOR_COUNT: the number of GPUs that you want in your commitment.

  • COMMITTED_ACCELERATOR_TYPE: the GPU type that you want in your commitment.

  • CUSTOM_END_DATE: Optional. A custom end date for your term, which must be formatted as YYYY-MM-DD. For example, to specify a custom end date of April 20, 2024, format it as 2024-04-20.

  • END_TIME: 12 AM US and Canadian Pacific Time (UTC-8 or UTC-7), as an offset of Coordinated Universal Time (UTC). Specify this value only if you specified a custom end date for your commitment. Specify one of the following values:

    • During daylight saving time: 07:00:00
    • During other times: 08:00:00
  • RESERVATION_URLs: a comma-separated list of URLs of the existing reservations that you want to attach to the commitment. For example, to attach two reservations, res-1 and res-2, specify the following:

    "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/reservations/example-res-1",
    "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-c/reservations/example-res-2"
    

Example: Purchase a commitment by attaching existing reservations

Suppose you have two reservations res-01 and res-02 in the us-central1-a and us-central1-b zones of the project myproject. Suppose that these reservations hold a combined capacity for 4 NVIDIA P100 GPUs and 4 Local SSD disks. To purchase a new commitment in the us-central1 region of this project for these GPUs and Local SSD disks and to use these existing reservations as attached reservations, make the following POST request. Note that the example commitment also contains vCPUs and memory.

POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/commitments

{
  "name": "commitment-01",
  "plan": "TWELVE_MONTH",
  "type": "GENERAL_PURPOSE"
  "resources":
  [
    {
      "amount": "96",
      "type": "VCPU"
    },
    {
      "amount": "638976",
      "type": "MEMORY"
    },
    {
      "acceleratorType": "nvidia-tesla-p100",
      "amount": "4",
      "type": "ACCELERATOR"
    },
    {
      "amount": "1536000",
      "type": "LOCAL_SSD"
    }
  ],
  "existingReservations":
  [
    "https://www.googleapis.com/compute/v1/projects/my-project/zone/us-central1-a/reservations/res-01",
    "https://www.googleapis.com/compute/v1/projects/my-project/zone/us-central1-b/reservations/res-02"
  ]
}

Create new reservations to attach

You can create your attached reservations while purchasing your commitment by using the Google Cloud console, the Google Cloud CLI, or REST.

Console

Before you purchase a commitment using the Google Cloud console, select the project that you want to use to purchase the commitment. If CUD sharing is enabled for a Cloud Billing account, you can purchase the commitment using any project from that Cloud Billing account. After you select the project, do the following:

  1. In the Google Cloud console, go to the Committed use discounts page.

    Go to Committed use discounts

  2. To purchase a commitment, click Purchase commitment. The Purchase a committed use discount page opens and displays the Hardware tab.

  3. In the Name field, enter a name for your commitment.

  4. In the Region field, select the region where you want to commit to Compute Engine resources.

  5. In the Commitment type field, select the machine family series for your committed resources. The following commitment types provide options for GPUs, Local SSD disks, or both:

    • Accelerator-optimized A2 for A2 machine type resources
    • Accelerator-optimized A3 for A3 Edge and High machine type resources
    • Accelerator-optimized A3 Mega for A3 Mega machine type resources
    • Compute-optimized C2 for C2 machine type resources
    • Compute-optimized C2D for C2D machine type resources
    • General-Purpose C3 for C3 machine type resources
    • General-Purpose C3D for C3D machine type resources
    • General-Purpose N1 for N1 machine type resources
    • General-Purpose N2 for N2 machine type resources
    • General-Purpose N2D for N2D machine resources
    • Graphics-optimized G2 for G2 machine type resources
    • Memory-optimized M3 forM3 machine type resources
    • Storage-optimized Z3 for Z3 machine type resources

  6. For Duration, choose either 1 year or 3 years as your commitment's term duration.

  7. In the Cores field, enter the number of vCPUs that you want to commit to.

  8. In the Memory field, enter the amount, in GB, of memory that you want to commit to.

  9. To commit to GPUs, in the GPUs section, click Add GPU and then do the following:

    1. In the GPU type field, select the type of GPU.
    2. In the Number of GPUs field, enter the number of GPUs.
    3. Optional: If your GPU model supports NVIDIA RTX Virtual Workstations (vWS) for graphics workloads, and you plan to run graphics-intensive workloads, select the Enable Virtual Workstation (NVIDIA GRID) checkbox.
  10. To commit to Local SSD disks, in the Local SSDs section, click Add SSD and then, in the Number of SSDs field, specify the number of disks.

  11. To create a new reservation and attach it to the commitment, in the Reservations field, select Create reservations and then do the following. Repeat this step for every new reservation that you want to create and attach.

    1. Click Add a reservation. The New reservation section appears.
    2. In the Name field, enter a name for your attached reservation.
    3. In the Region field, select the same region as your commitment.
    4. In the Zone field, select the zone where you want to reserve your resources.
    5. In the Share type section, specify how you want to share this reservation in one of the following ways:

      • To create a single-project reservation, select Local.
      • To create a reservation that is shared with multiple projects, select Shared. Then, to specify the projects to share the this reservation with, click Add projects, and then select the projects that you want from the current project's organization.
    6. In the Use with VM instance field, select how you want VMs to consume your reservation in one of the following ways:

      • To allow VMs with matching properties to automatically consume this reservation, click Use reservation automatically (default).
      • To consume this reservation's resources only when creating VMs with matching properties that specifically target this reservation by name, click select Select specific reservation.
    7. In the Resource details section, do the following:

      1. In the Number of VM instances field, enter the number of VM instances that you want to reserve.
      2. In the Machine configuration section, specify the properties of your reserved VMs in one of the following ways:

        1. To specify your the properties of your VMs using an existing instance template, select Use instance template.

          In the Instance template field, select an instance template that specifies the same machine family series as your commitment. If you select a regional instance template, the region of that instance template must also match with the region specified in your commitment.

        2. To manually specify the properties of your VMs, select Select machine type and then do the following:

          1. Select the machine family that applies to the machine series that you specified for the commitment:

            • General purpose for general-purpose machine series
            • Compute optimized for compute-optimized machine series
            • Memory optimized for memory-optimized machine series
            • GPUs for accelerator-optimized machine series
          2. In the table that has Series column, select the same machine series that you specified for the commitment.

          3. In the Machine type field, specify a predefined or custom machine type in one of the following ways:

            1. To choose a predefined machine type, select Preset and then select the machine type that you want.
            2. To choose a custom machine type, select Custom and then specify Cores and Memory that you want.
          4. To specify a minimum CPU platform, GPUs, or both, expand the CPU Platform and GPU menu and do the following:

            1. Optional: To specify a minimum CPU platform, in the CPU Plaform list, select an option.
            2. Optional: To reserve GPUs, click Add GPU. Then, in the GPU type and Number of GPUs fields, select the type and number of GPUs for each VM.

          5. To reserve local SSD disks, do the following:

            1. In the Number of disks field, select the number of local SSD disks that you want for each VM.
            2. In the Interface type field, select the interface for the local SSD disks.
    8. To finish specifying the properties for this reservation, click Done.

  12. To finish purchasing your commitment with the attached reservations, do the following:

    1. Click Purchase.
    2. In the Purchase a committed use discount dialog, if you agree with the service specific terms, click Purchase again.

gcloud

To create your attached reservations while purchasing your commitment, run the gcloud compute commitments create command.

Depending on whether you want to attach a single reservation or multiple reservations, run the command in one of the following ways:

  • To create and attach a single reservation to your commitment, define the properties of the attached reservation by running the following command:

    gcloud compute commitments create COMMITMENT_NAME \
        --region=REGION \
        --project=PROJECT_ID \
        --plan DURATION \
        --type COMMITMENT_TYPE
        --resources=vcpu=COMMITTED_VCPUS,memory=COMMITTED_MEMORY,local-ssd=COMMITTED_LOCAL_SSD \
        --resources-accelerator=count=COMMITTED_ACCELERATOR_COUNT,type=COMMITTED_ACCELERATOR_TYPE \
        --custom-end-time=CUSTOM_END_DATE \
        --reservation=RESERVATION_NAME \
        --reservation-zone=RESERVATION_ZONE \
        --machine-type=RESERVED_MACHINE_TYPE \
        --require-specific-reservation=REQUIRE_SPECIFIC_RESERVATION_VALUE \
        --vm-count=NUMBER_OF_RESERVED_VMs \
        --accelerator=type=RESERVED_ACCELERATOR_TYPE,count=RESERVED_ACCELERATOR_COUNT \
        --local-ssd=interface=INTERFACE_1,size=375 \
        --local-ssd=interface=INTERFACE_2,size=375 \
        --minimum-cpu-platform=MINIMUM_CPU_PLATFORM \
        --share-setting=SHARE_SETTING \
        --share-with=CONSUMER_PROJECT_ID_1,CONSUMER_PROJECT_ID_2
    
  • To create and attach multiple reservations to your commitment, define the reservation's properties using a YAML file and then specify that YAML file in the command that you use to purchase your commitment. Optionally, you can also use this YAML file approach to create and attach a single reservation to your commitment. To create your attached reservations using this approach, do the following:

    1. Create the YAML file in the current directory and specify the configuration that you want for each attached reservation. For example, to specify the configuration of a shared reservation shared with two projects that specifies GPUs, two Local SSD disks, and a minimum CPU platform, include the following text in your YAML file:

      - reservation: RESERVATION_NAME
        reservation_zone: RESERVATION_ZONE
        require_specific_reservation: REQUIRE_SPECIFIC_RESERVATION_VALUE
        vm_count: NUMBER_OF_RESERVED_VMs
        machine_type: RESERVED_MACHINE_TYPE
        accelerator:
        - count: RESERVED_ACCELERATOR_COUNT
          type: RESERVED_ACCELERATOR_TYPE
        localssd:
        - interface: INTERFACE_1
          size: 375
        - interface: INTERFACE_2
          size: 375
        project: OWNER_PROJECT_ID
        minimum-cpu-platform: MINIMUM_CPU_PLATFORM
        share-setting: SHARE_SETTING
        share-with:
        - CONSUMER_PROJECT_ID_1
        - CONSUMER_PROJECT_ID_2
      
      

      To specify the configuration for multiple reservations, repeat these properties for each reservation that you want to create. You can attach any number of existing reservations that you want to your commitment.

    2. Run the gcloud compute commitments create command and include the --reservation-from-file flag.

      gcloud compute commitments create COMMITMENT_NAME \
          --region REGION \
          --project PROJECT_ID \
          --plan DURATION \
          --type COMMITMENT_TYPE \
          --resources=vcpu=COMMITTED_VCPUS,memory=COMMITTED_MEMORY,local-ssd=COMMITTED_LOCAL_SSD \
          --resources-accelerator=count=COMMITTED_ACCELERATOR_COUNT,type=COMMITTED_ACCELERATOR_TYPE \
          --reservations-from-file=YAML_FILE
      

Replace the following with the corresponding properties of the commitment and the attached reservations:

Commitment

  • COMMITMENT_NAME: the name of the commitment.
  • REGION: the region where the commitment is located.
  • PROJECT_ID: the ID of the project where you want to purchase the commitment with the attached reservations.
  • DURATION: the term duration of the commitment, either 12-month or 36-month.
  • CUSTOM_END_DATE: Optional. A custom end date for your term, which must be formatted as YYYY-MM-DD. For example, to specify a custom end date of April 20, 2024, format it as 2024-04-20.
  • COMMITMENT_TYPE: the commitment type. The following commitment types provide options for GPUs, Local SSD disks, or both:

    • accelerator-optimized for A2 machine type resources
    • accelerator-optimized-a3 for A3 Edge and High machine type resources
    • accelerator-optimized-a3-mega for A3 Mega machine type resources
    • compute-optimized for C2 machine type resources
    • compute-optimized-c2d for C2D machine type resources
    • compute-optimized-c3 for C3 machine type resources
    • compute-optimized-c3d for C3D machine type resources
    • general-purpose for N1 machine type resources
    • general-purpose-n2 for N2 machine type resources
    • general-purpose-n2d for N2D machine resources
    • graphics-optimized for G2 machine type resources
    • memory-optimized-m3 for M3 machine type resources
    • storage-optimized-z3 for Z3 machine type resources

  • COMMITTED_VCPUS: the number of vCPUs that you want in your commitment. The number must be a positive integer.

  • COMMITTED_MEMORY: the amount, in MB or GB, of memory that you want in your commitment. For example, 10GB or 10240MB. If you don't specify a unit, Compute Engine uses GB as the unit. You can purchase memory in increments of 0.25 GB.

  • COMMITTED_LOCAL_SSD: the amount, in GB, of Local SSD storage that you want in your commitment. Each Local SSD disk is 375 GB.

  • COMMITTED_ACCELERATOR_COUNT: the number of GPUs that you want in your commitment.

  • COMMITTED_ACCELERATOR_TYPE: the GPU type that you want in your commitment.

  • YAML_FILE: The path to the YAML file that contains the configuration of the attached reservations.

Attached reservations

  • RESERVATION_NAME: the name of the attached reservation.
  • RESERVATION_ZONE: the zone of the attached reservation.
  • REQUIRE_SPECIFIC_RESERVATION_VALUE: specifies if the attached reservation is a specifically targeted reservation; either true or false. For more information about specifically targeted reservations, see How reservations work.
  • NUMBER_OF_RESERVED_VMS: the number of VMs that you want to reserve in the attached reservation.
  • RESERVED_MACHINE_TYPE: the machine type that you want for the VMs in your attached reservation.

    • For predefined machine types, use the format MACHINE_FAMILY-standard-CPUS; for example, n2-standard-4.
    • For custom machine types, use the format MACHINE_FAMILY-custom-CPUS-MEMORY; for example n2-custom-4-5120. For a full list of restrictions, read the specifications for custom machine types.

      Replace the following:

      • MACHINE_FAMILY: the family of machine types; for example, specify n2 for N2 VMs.
      • CPUS: the number of vCPUs.
      • MEMORY: the total memory for a reserved VM. Memory must be a multiple of 256 MB and must be supplied in MB; for example, to create an N2 VM with 4 vCPUs and 5 GB of memory, which is 5120 MB, use n2-custom-4-5120.
  • RESERVED_ACCELERATOR_COUNT: the number of GPUs you want to add, per VM, in the attached reservation.

  • RESERVED_ACCELERATOR_TYPE: the type of accelerator you want to add in the attached reservation.

  • INTERFACE_1 and INTERFACE_2: the type of interface you want the Local SSD disks for each reserved VM to use. Valid options are: scsi and nvme. Each Local SSD disk is 375 GB. Repeat the local_ssd parameter for each Local SSD disk that you want to add. You can specify up to 24 Local SSD disks.

  • OWNER_PROJECT_ID: the ID of the project where you want to purchase the commitment with the attached reservation. Specify this field if you want to share your attached reservation across multiple consumer projects.

  • MINIMUM_CPU_PLATFORM: the minimum CPU platform that you want to specify for the attached reservation.

  • SHARE_SETTING: the type of sharing for the attached reservation. Specify this field with the value as projects if you want to share your attached reservation across multiple consumer projects. Exclude this field if you want create a single-project reservation.

  • CONSUMER_PROJECT_ID_1 and CONSUMER_PROJECT_ID_2: the project IDs of the projects that can share this reservation, for example project-1 and project-2. You can include up to 100 consumer projects. These projects must be in the same organization as the owner project. Don't include the ID of the project where you create this reservation, as that project is allowed to consume this reservation by default. Exclude these fields if you want to create a single-project reservation.

Compute Engine creates the commitment and the attached reservations only if there are enough resources of the specified machine type in the target zone, and sufficient quota, at the time of your request. If your purchase was successful, you see a success message similar to the following:

Created[https://www.googleapis.com/compute/v1/projects/your-project/regions/your-region/commitments/your-commitment-name]

Examples for purchasing commitments by creating new reservations to attach

The following example scenarios and commands show how you can purchase a commitment for GPUs, Local SSD disks, or both by creating new reservations to attach to that commitment.

Example 1: Purchase a commitment for GPUs by attaching a single new reservation

Suppose you want to purchase a commitment commitment-01 in the us-central1 region that includes 4 NVIDIA V100 GPUs. You want to create a new reservation reservation-01 as the attached reservation for those GPUs. Suppose you also want to specify Compute Engine to use those reserved GPUs across 2 n1-standard-32 VMs in the us-central1-a zone. To purchase this example commitment with its attached reservation, run the following command:

gcloud compute commitments create commitment-01 \
    --region=us-central1 \
    --project=myproject \
    --resources=vcpu=96,memory=624GB \
    --resources-accelerator=type=nvidia-tesla-v100,count=4 \
    --plan 12-month \
    --reservation=reservation-01 \
    --reservation-zone=us-central1-a \
    --machine-type=n1-standard-32 \
    --accelerator=type=nvidia-tesla-v100,count=2 \
    --vm-count=2

Example 2: Purchase a commitment for GPUs without committing to vCPUs or memory

To commit to and reserve GPUs and Local SSD disks without committing to vCPUs or memory, specify 0 as the value for vCPU and memory quantities. For example, suppose you want to purchase a commitment commitment-02 for a single NVIDIA P4 GPU in the us-west2 region. You also want to create a new reservation as the attached reservation and specify Compute Engine to use the reserved GPU on an n1-standard-2 VM in the us-west2-b zone. To purchase this example commitment with its attached reservation, run the following command:

gcloud compute commitments create commitment-02 \
    --region=us-west2 \
    --project=myproject \
    --resources=vcpu=0,memory=0 \
    --resources-accelerator=type=nvidia-tesla-p4,count=1 \
    --plan 12-month \
    --reservation=reservation-01 \
    --reservation-zone=us-west2-b \
    --machine-type=n1-standard-2 \
    --accelerator=type=nvidia-tesla-p4,count=1 \
    --vm-count=1

Example 3: Purchase a commitment for GPUs and Local SSD disks by attaching multiple new reservations

Suppose you want to purchase a commitment commitment-03 for 1 NVIDIA V100 GPU and 2 Local SSD disks in the us-central1 region. You also want to create and attach two reservations in the us-central1-a zone. In the first reservation, res-01, you want to reserve 1 n1-standard-2 VM with 1 GPU. You want to make res-01 a targeted reservation, which means that you must specifically target that reservation by name to use its reserved VMs. In the second reservation, res-02, you want to reserve 1 n1-standard-8 VM with 2 types of attached Local SSD disks.

To purchase this example commitment with the attached reservations, first create the YAML file with the properties of both reservations.

- reservation: res-01
  reservation_zone: us-central1-a
  require_specific_reservation: true
  vm_count: 1
  machine_type: n1-standard-2
  accelerator:
  - count: 1
    type: nvidia-tesla-v100
- reservation: res-02
  reservation_zone: us-central1-a
  vm_count: 1
  machine_type: n1-standard-8
  local_ssd:
  - interface: scsi
    size: 375
  - interface: nvme
    size: 375

After you create the YAML file, to finish purchasing the commitment with its attached reservations, run the following command. Note that the example commitment also contains vCPU and memory resources.

gcloud compute commitments create commitment-03 \
    --region=us-central1 \
    --project=myproject \
    --resources=vcpu=96,memory=624,local-ssd=750 \
    --resources-accelerator=type=nvidia-tesla-v100,count=1 \
    --plan 12-month \
    --reservations-from-file=YAML_FILE

REST

To create your attached reservations while purchasing your commitment, make a POST request to the regionCommitments.insert method. In your request, include the reservations field to define a list of all the new reservations that you want to create and attach. You can attach any number of existing reservations that you want to your commitment.

  • To create your new reservation by manually specifying all the VM properties, include the instanceProperties field and exclude the sourceInstanceTemplate field.

    For example, to manually specify the configuration of a shared reservation shared with two projects that specifies GPUs, two Local SSD disks, and a minimum CPU platform, make the following request:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/commitments
    
    {
    "name": "COMMITMENT_NAME",
    "plan": "DURATION",
    "type": COMMITMENT_TYPE,
    "resources":
    [
      {
        "amount": "COMMITTED_VCPUS",
        "type": "VCPU"
      },
      {
        "amount": "COMMITTED_MEMORY",
        "type": "MEMORY"
      },
      {
        "acceleratorType": "COMMITTED_ACCELERATOR_TYPE",
        "amount": "COMMITTED_ACCELERATOR_COUNT",
        "type": "ACCELERATOR"
      }
      {
        "amount": "COMMITTED_LOCAL_SSD",
        "type": "LOCAL_SSD"
      }
    ],
    "customEndTimestamp": "CUSTOM_END_DATETEND_TIMEZ",
    "reservations":
    [
      {
        "name": "RESERVATION_NAME",
        "specificReservation":
        {
          "count": "NUMBER_OF_RESERVED_VMS",
          "instanceProperties":
          {
            "guestAccelerators":
            [
              {
                "acceleratorCount": "RESERVED_ACCELERATOR_COUNT",
                "acceleratorType": "RESERVED_ACCELERATOR_TYPE"
              }
            ],
            "localSsds":
            [
              {
                "diskSizeGb": "375",
                "interface": "RESERVED_INTERFACE_1"
              },
              {
                "diskSizeGb": "375",
                "interface": "RESERVED_INTERFACE_2"
              }
            ],
            "machineType": "RESERVED_MACHINE_TYPE",
            "minCpuPlatform": "MINIMUM_CPU_PLATFORM"
          }
        },
        "specificReservationRequired": REQUIRE_SPECIFIC_RESERVATION_VALUE",
        "zone": "RESERVED_ZONE",
        "shareSettings":
        {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap":
          {
            "CONSUMER_PROJECT_ID_1":
            {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2":
            {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        }
      }
    ]
    }
    
    
  • To create your new reservation by specifying an instance template, include the sourceInstanceTemplate field and exclude the instanceProperties field.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/commitments
    
    {
    "name": "COMMITMENT_NAME",
    "plan": "DURATION",
    "type": COMMITMENT_TYPE,
    "resources":
    [
      {
        "amount": "COMMITTED_VCPUS",
        "type": "VCPU"
      },
      {
        "amount": "COMMITTED_MEMORY",
        "type": "MEMORY"
      },
      {
        "acceleratorType": "COMMITTED_ACCELERATOR_TYPE",
        "amount": "COMMITTED_ACCELERATOR_COUNT",
        "type": "ACCELERATOR"
      }
      {
        "amount": "COMMITTED_LOCAL_SSD",
        "type": "LOCAL_SSD"
      }
    ],
    "customEndTimestamp": "CUSTOM_END_DATETEND_TIMEZ",
    "reservations":
    [
      {
        "name": "RESERVATION_NAME",
        "specificReservation":
        {
          "count": "NUMBER_OF_RESERVED_VMS",
          "sourceInstanceTemplate": "projects/PROJECT_ID/LOCATION/instanceTemplates/INSTANCE_TEMPLATE_NAME"
        },
        "specificReservationRequired": REQUIRE_SPECIFIC_RESERVATION_VALUE",
        "zone": "RESERVED_ZONE",
        "shareSettings":
        {
          "shareType": "SPECIFIC_PROJECTS",
          "projectMap":
          {
            "CONSUMER_PROJECT_ID_1":
            {
              "projectId": "CONSUMER_PROJECT_ID_1"
            },
            "CONSUMER_PROJECT_ID_2":
            {
              "projectId": "CONSUMER_PROJECT_ID_2"
            }
          }
        }
      }
    ]
    }
    
    

Replace the following with the corresponding properties of the commitment and the attached reservations:

Commitment

  • COMMITMENT_NAME: the name of the commitment.
  • REGION: the region where the commitment is located.
  • PROJECT_ID: the ID of the project where you want to purchase the commitment with the attached reservations.
  • DURATION: the term duration of the commitment, either TWELVE_MONTH or THIRTY_SIX_MONTH.
  • COMMITMENT_TYPE: the commitment type. The following commitment types provide options for GPUs, Local SSD disks, or both:

    • ACCELERATOR_OPTIMIZED for A2 machine type resources
    • ACCELERATOR_OPTIMIZED_A3 for A3 Edge and High machine type resources
    • ACCELERATOR_OPTIMIZED_A3_MEGA for A3 Mega machine type resources
    • COMPUTE_OPTIMIZED for C2 machine type resources
    • COMPUTE_OPTIMIZED_C2D for C2D machine type resources
    • COMPUTE_OPTIMIZED_C3 for C3 machine type resources
    • COMPUTE_OPTIMIZED_C3D for C3D machine type resources
    • GENERAL_PURPOSE for N1 machine type resources
    • GENERAL_PURPOSE_N2 for N2 machine type resources
    • GENERAL_PURPOSE_N2D for N2D machine resources
    • GRAPHICS_OPTIMIZED for G2 machine type resources
    • MEMORY_OPTIMIZED_M3 for M3 machine type resources
    • STORAGE_OPTIMIZED_Z3 for Z3 machine type resources

  • COMMITTED_VCPUS: the number of vCPUs that you want in your commitment. The number must be a positive integer.

  • COMMITTED_MEMORY: the amount, in MB, of memory that you want in your commitment. For example, 10240MB. You can purchase memory in increments of 256 MB.

  • COMMITTED_LOCAL_SSD: the amount, in GB, of Local SSD storage that you want in your commitment. Each Local SSD disk is 375 GB.

  • COMMITTED_ACCELERATOR_COUNT: the number of GPUs that you want in your commitment.

  • COMMITTED_ACCELERATOR_TYPE: the GPU type that you want in your commitment.

  • CUSTOM_END_DATE: Optional. A custom end date for your term, which must be formatted as YYYY-MM-DD. For example, to specify a custom end date of April 20, 2024, format it as 2024-04-20.

  • END_TIME: 12 AM US and Canadian Pacific Time (UTC-8 or UTC-7), as an offset of Coordinated Universal Time (UTC). Specify this value only if you specified a custom end date for your commitment. Specify one of the following values:

    • During daylight saving time: 07:00:00
    • During other times: 08:00:00

Attached reservations

  • RESERVATION_NAME: the name of the attached reservation.
  • RESERVATION_ZONE: the zone of the attached reservation.
  • REQUIRE_SPECIFIC_RESERVATION_VALUE: specifies if the attached reservation is a specifically targeted reservation; either true or false. For more information about specifically targeted reservations, see How reservations work.
  • NUMBER_OF_RESERVED_VMS: the number of VMs that you want to reserve in the attached reservation.
  • RESERVED_MACHINE_TYPE: the machine type that you want for the VMs in your attached reservation.

    • For predefined machine types, use the format MACHINE_FAMILY-standard-CPUS; for example, n2-standard-4.
    • For custom machine types, use the format MACHINE_FAMILY-custom-CPUS-MEMORY; for example n2-custom-4-5120. For a full list of restrictions, read the specifications for custom machine types.

      Replace the following:

      • MACHINE_FAMILY: the family of machine types; for example, specify n2 for N2 VMs.
      • CPUS: the number of vCPUs.
      • MEMORY: the total memory for a reserved VM. Memory must be a multiple of 256 MB and must be supplied in MB; for example, to create an N2 VM with 4 vCPUs and 5 GB of memory, which is 5120 MB, use n2-custom-4-5120.
  • RESERVED_ACCELERATOR_COUNT: the number of GPUs you want to add, per VM, in the attached reservation.

  • RESERVED_ACCELERATOR_TYPE: the type of accelerator you want to add in the attached reservation.

  • INTERFACE_1 and INTERFACE_2: the type of interface you want the Local SSD disks for each reserved VM to use. Valid options are: scsi and nvme. Each Local SSD disk is 375 GB. Repeat the localSsds parameter for each Local SSD disk that you want to add. You can specify up to 24 Local SSD disks.

  • MINIMUM_CPU_PLATFORM: the minimum CPU platform that you want to specify for the attached reservation.

  • INSTANCE_TEMPLATE_NAME: the name of the instance template that you want to use to create your attached reservation.

  • SHARE_SETTING: the type of sharing for the attached reservation. Specify this field with the value as SPECIFIC_PROJECTS if you want to share your attached reservation across multiple consumer projects. Exclude this field if you want create a single-project reservation.

  • CONSUMER_PROJECT_ID_1 and CONSUMER_PROJECT_ID_2: the project IDs of the projects that can share this reservation; for example, project-1 and project-2. You can include up to 100 consumer projects. These projects must be in the same organization as the owner project. Don't include the ID of the project where you create this reservation, as that project is allowed to consume this reservation by default. Exclude these fields if you want to create a single-project reservation.

Compute Engine creates the commitment and the attached reservations only if there are enough resources of the specified machine type in the target zone, and sufficient quota, at the time of your request. If your purchase was successful, Compute Engine returns a 200 status for your REST API request.

Examples for purchasing commitments by creating new reservations to attach

The following example scenarios and commands show how you can purchase a commitment for GPUs, Local SSD disks, or both by creating new reservations to attach to that commitment.

Example 1: Purchase a commitment for GPUs by attaching a single new reservation

Suppose you want to purchase a commitment commitment-01 in the us-central1 region that includes 4 NVIDIA V100 GPUs. You want to create a new reservation reservation-01 as the attached reservation for those GPUs. Suppose you also want to specify Compute Engine to use those reserved GPUs across 2 n1-standard-8 VMs in the us-central1-a zone. To purchase this example commitment with its attached reservation, make the following POST request:

POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/commitments

{
  "name": "commitment-01",
  "plan": "TWELVE_MONTH",
  "type": "GENERAL_PURPOSE"
  "resources":
  [
    {
      "amount": "96",
      "type": "VCPU"
    },
    {
      "amount": "638976",
      "type": "MEMORY"
    },
    {
      "acceleratorType": "nvidia-tesla-v100",
      "amount": "4",
      "type": "ACCELERATOR"
    }
  ],
  "reservations":
  [
    {
      "name": "reservation-01",
      "specificReservation":
      {
        "count": "2",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 2,
              "acceleratorType": "nvidia-tesla-v100"
            }
          ],
          "machineType": "n1-standard-8"
        }
      },
      "specificReservationRequired": false,
      "zone": "us-central1-a"
    }
  ]
}

Example 2: Purchase a commitment for GPUs without committing to vCPUs or memory

To commit to and reserve GPUs and Local SSD disks without committing to vCPUs or memory, specify 0 as the value for vCPU and memory quantities. For example, suppose you want to purchase a commitment commitment-02 for a single NVIDIA P4 GPU in the us-west2 region. You also want to create a new reservation as the attached reservation and specify Compute Engine to use the reserved GPU on an n1-standard-2 VM in the us-west2-b zone. To purchase this example commitment with its attached reservation, make the following POST request:

POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-west2/commitments

{
  "name": "commitment-02",
  "plan": "TWELVE_MONTH",
  "type": "GENERAL_PURPOSE",
  "resources":
  [
    {
      "amount": "0",
      "type": "VCPU"
    },
    {
      "amount": "0",
      "type": "MEMORY"
    },
    {
      "acceleratorType": "nvidia-tesla-p4",
      "amount": "4",
      "type": "ACCELERATOR"
    }
  ],
  "reservations":
  [
    {
      "name": "reservation-01",
      "specificReservation":
      {
        "count": "1",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 4,
              "acceleratorType": "nvidia-tesla-p4"
            }
          ],
          "machineType": "n1-standard-2"
        }
      },
      "specificReservationRequired": false,
      "zone": "us-west2-b"
    }
  ]
}

Example 3: Purchase a commitment for GPUs and Local SSD disks by attaching multiple new reservations

Suppose you want to purchase a commitment commitment-03 for 1 NVIDIA V100 GPU and 2 Local SSD disks in the us-central1 region. You also want to create and attach two reservations in the us-central1-a zone. In the first reservation, res-01, you want to reserve 1 n1-standard-2 VM with 1 GPU. You want to make res-01 a targeted reservation, which means that you must specifically target that reservation by name to use its reserved VMs. In the second reservation, res-02, you want to reserve 1 n1-standard-8 VM with 2 types of attached Local SSD disks. To purchase this example commitment with the attached reservations, make the following POST request. Note that the example commitment also contains vCPU and memory resources.

POST https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1/commitments

{
  "name": "commitment-03",
  "plan": "TWELVE_MONTH",
  "type": "GENERAL_PURPOSE",
  "resources":
  [
    {
      "amount": "96",
      "type": "VCPU"
    },
    {
      "amount": "638976",
      "type": "MEMORY"
    },
    {
      "acceleratorType": "nvidia-tesla-v100",
      "amount": "1",
      "type": "ACCELERATOR"
    },
    {
      "amount": "768000",
      "type": "LOCAL_SSD"
    }
  ],
  "reservations":
  [
    {
      "name": "res-01",
      "specificReservation":
      {
        "count": "1",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": 1,
              "acceleratorType": "nvidia-tesla-v100"
            }
          ],
          "machineType": "n1-standard-2"
        }
      },
      "specificReservationRequired": true,
      "zone": "us-central1-a"
    },
    {
      "name": "res-02",
      "specificReservation":
      {
        "count": "1",
        "instanceProperties":
        {
          "localSsds":
          [
            {
              "diskSizeGb": "375",
              "interface": "SCSI"
            },
            {
              "diskSizeGb": "375",
              "interface": "NVME"
            }
          ]
          "machineType": "n1-standard-8"
        }
      },
      "specificReservationRequired": false,
      "zone": "us-central1-a"
    }
  ]
}

Replace reservations that are attached to commitments

Replace your commitment's existing attached reservation with a new reservation if you want to modify the types and numbers of VMs that use your committed resources.

The replacement reservation will always be a newly created reservation. To replace an attached reservation, you must specify the properties of the reservation that you want use as a replacement. Compute Engine then automatically creates a new reservation with these properties and uses it to replace your attached reservation. You can't use an existing reservation to replace your attached reservation.

Allowed changes

When you replace a commitment's existing attached reservation with a new reservation, you can request any of the following changes:

  • You can reserve VMs from a different machine type. However, you must still reserve VMs from the same machine series in order to continue receiving CUDs for your reserved resources.
  • You can change the number of VMs that you want to reserve.
  • You can change the quantity of GPUs and Local SSD disks that is attached per VM as long as the total quantity of reserved GPUs and Local SSD disks remain the same.
  • You can specify your replaced reservations to be either Local or shared reservations.

Requirements

When you replace your commitment's attached reservation with a new one, your request must meet all of the following requirements:

  • You can replace only one attached reservation at a time with exactly one new attached reservation. To replace an attached reservation, simultaneously remove an existing attached reservation by setting its VM count to 0 and define a new attached reservation that you want to replace it.
  • The new reservation must exist in the same project as the commitment.
  • The new reservation must be located in the same zone as the removed reservation.
  • The amount and types of GPUs specified in the new reservation must match the removed reservation.
  • The numbers and types of Local SSD disks specified in the new reservation must match the removed reservation.
  • You can only change up to 100 VMs per request. To make a change that involves more than 100 VMs, divide the change into multiple smaller requests or reach out to Google Cloud Support.

Your request to replace a reservation also depends on the capacity availability at that time. If the capacity for a request is unavailable, the request fails and returns a resource availability error, which you can try to resolve by modifying or postponing the request. For more information, see the documentation for troubleshooting resource availability.

If your request to replace an attached reservation fails, then the attached reservation and your existing reserved resources remain unaffected. To preserve your capacity, wait to make any corresponding changes to your VMs until after your request to replace a reservation is successful.

Steps to replace an attached reservation

You can replace a commitment's reservations using the Google Cloud CLI or REST.

gcloud

To replace reservations that are attached to commitments, do the following:

  1. Create a YAML file in the current directory with the configurations of the following attached reservations:

    • The current reservation that you want to replace.

      To retrieve the details of this reservation, see View details of a reservation.

    • The new replacement reservation.

    The contents of the YAML file are similar to the following:

    - reservation: CURRENT_RESERVATION_NAME
      reservation_zone: CURRENT_RESERVATION_ZONE
      vm_count: 0
      machine_type: CURRENT_RESERVATION_MACHINE_TYPE
      accelerator:
      - count: CURRENT_RESERVATION_NUMBER_OF_ACCELERATORS
        type: CURRENT_RESERVATION_ACCELERATOR_TYPE
      local_ssd:
      - interface: CURRENT_RESERVATION_INTERFACE_1
        size: 375
      - interface: CURRENT_RESERVATION_INTERFACE_2
        size: 375
      project: CURRENT_RESERVATION_PROJECT_ID
      share_setting: CURRENT_RESERVATION_SHARE_SETTING
      share_with:
      - CURRENT_RESERVATION_CONSUMER_PROJECT_ID_1
      - CURRENT_RESERVATION_CONSUMER_PROJECT_ID_2
    - reservation: REPLACEMENT_RESERVATION_NAME
      reservation_zone: REPLACEMENT_RESERVATION_ZONE
      vm_count: REPLACEMENT_RESERVATION_NUMBER_OF_VMs
      machine_type: REPLACEMENT_RESERVATION_MACHINE_TYPE
      accelerator:
      - count: REPLACEMENT_RESERVATION_ACCELERATOR_COUNT
        type: REPLACEMENT_RESERVATION_ACCELERATOR_TYPE
      local_ssd:
      - interface: REPLACEMENT_RESERVATION_INTERFACE_1
        size: 375
      - interface: REPLACEMENT_RESERVATION_INTERFACE_2
        size: 375
      project: REPLACEMENT_RESERVATION_PROJECT_ID
      share_setting: REPLACEMENT_RESERVATION_SHARE_SETTING
      share_with:
      - REPLACEMENT_RESERVATION_CONSUMER_PROJECT_ID_1
      - REPLACEMENT_RESERVATION_CONSUMER_PROJECT_ID_2
    
    

    Replace the following with the corresponding properties of the current and replacement reservations:

    Current reservation

    For the current reservation, all of the following properties must be exactly the same as when you viewed the reservation. Omit the fields for any properties that the current reservation does not already have.

    • CURRENT_RESERVATION_NAME: the name of the current attached reservation.
    • CURRENT_RESERVATION_ZONE: the zone of the current attached reservation.
    • CURRENT_RESERVATION_MACHINE_TYPE: the machine type of the current attached reservation.
    • CURRENT_RESERVATION_NUMBER_OF_ACCELERATORS: the number of GPUs reserved in the current attached reservation.
    • CURRENT_RESERVATION_ACCELERATOR_TYPE: the type of accelerator reserved in the current attached reservation.
    • CURRENT_RESERVATION_INTERFACE_1 and CURRENT_RESERVATION_INTERFACE_2: the type of interface that the Local SSD disk for each reserved VM use in the current attached reservation. Valid options are: scsi and nvme. Each Local SSD disk is 375 GB. Repeat the local_ssd parameter for all the reserved Local SSD disks.
    • CURRENT_RESERVATION_PROJECT_ID: the project ID of the current project that has the commitment and the attached reservation. Specify this field if your current attached reservation is shared across multiple consumer projects.
    • CURRENT_RESERVATION_SHARE_SETTING: The type of sharing for the current reservation. Specify this field with the value as projects if your current attached reservation is shared across multiple consumer projects.
    • CURRENT_RESERVATION_CONSUMER_PROJECT_ID_1 and CURRENT_RESERVATION_CONSUMER_PROJECT_ID_2: the project IDs of the projects that you share the current attached reservation with, for example project-1 and project-2.

    Replacement reservation

    For the replacement reservation, set the following properties as required. Ensure that you meet all the requirements when you specify these properties. Omit any additional fields that you don't want to use.

    • REPLACEMENT_RESERVATION_NAME: the name of the new replacement reservation.
    • REPLACEMENT_RESERVATION_ZONE: the zone of the new replacement reservation.
    • REPLACEMENT_RESERVATION_NUMBER_OF_VMS: the number of VMs that you want to reserve in the new replacement reservation.
    • REPLACEMENT_RESERVATION_MACHINE_TYPE: the machine type that you want for the VMs in your new replacement reservation.

      • For predefined machine types, use the format MACHINE_FAMILY-standard-CPUS; for example, n2-standard-4.
      • For custom machine types, use the format MACHINE_FAMILY-custom-CPUS-MEMORY; for example n2-custom-4-5120. For a full list of restrictions, read the specifications for custom machine types.

      Replace the following:

      • MACHINE_FAMILY: the family of machine types; for example, specify n2 for N2 VMs.
      • CPUS: the number of vCPUs.
      • MEMORY: the total memory for a reserved VM. Memory must be a multiple of 256 MB and must be supplied in MB; for example, to create an N2 VM with 4 vCPUs and 5 GB of memory, which is 5120 MB, use n2-custom-4-5120.
    • REPLACEMENT_RESERVATION_NUMBER_OF_ACCELERATORS: the number of GPUs you want to add, per VM, in the replacement reservation.

    • REPLACEMENT_RESERVATION_ACCELERATOR_TYPE: the type of accelerator you want to add in the replacement reservation.

    • REPLACEMENT_RESERVATION_INTERFACE_1 and REPLACEMENT_RESERVATION_INTERFACE_2: the type of interface you want the Local SSD disks for each reserved VM to use. Valid options are: scsi and nvme. Each Local SSD disk is 375 GB. Repeat the local_ssd parameter for each Local SSD disk that you want to add. You can specify up to 24 Local SSD disks.

    • REPLACEMENT_RESERVATION_PROJECT_ID: the project ID of the current project that has the commitment and the attached reservation. Specify this field if you want to share your replacement reservation across multiple consumer projects.

    • REPLACEMENT_RESERVATION_SHARE_SETTING: the type of sharing for the replacement reservation. Specify this field with the value as projects if you want to share your replacement reservation across multiple consumer projects.

    • REPLACEMENT_RESERVATION_CONSUMER_PROJECT_ID_1 and REPLACEMENT_RESERVATION_CONSUMER_PROJECT_ID_2: the project IDs of the projects that can share this reservation, for example project-1,project-2. You can include up to 100 consumer projects. These projects must be in the same organization as the owner project. Don't include the REPLACEMENT_RESERVATION_PROJECT_ID, which is already allowed to consume this reservation by default.

  2. Run the gcloud beta compute commitments update-reservations command and specify the path to the YAML file using the --reservations-from-file flag.

    gcloud beta compute commitments update-reservations COMMITMENT_NAME \
        --project= PROJECT_ID \
        --region= REGION \
        --reservations-from-file= YAML_FILE
    

    Replace the following:

    • COMMITMENT_NAME: the name of the commitment with the attached reservation.
    • PROJECT_ID: the project ID of the commitment with the attached reservation.
    • REGION: The region where the commitment is located.
    • YAML_FILE: The path to the YAML file that contains the configuration of the current and replacement reservations.

Example for replacing a reservation that is attached to a commitment

To demonstrate this, this section shows an example commitment with an attached reservation and how to replace the example attached reservation.

Example commitment with an attached reservation

For example, suppose that you want to update the attached reservations for the my-commitment-with-reservations commitment, that was purchased using the following command:

  gcloud beta compute commitments create my-commitment-with-reservations \
      --region=asia-east1 \
      --resources=vcpu=16,memory=60GB,local-ssd=3000 \
      --resources-accelerator=type=nvidia-tesla-p100,count=4 \
      --plan=12-month \
      --type=general-purpose \
      --reservations-from-file=one-reservation.yaml

For this example, suppose that when this command was run, one-reservation.yaml was a file in the current directory with the following contents, that define an attached reservation named res-1.

  - reservation: res-1
    reservation_zone: asia-east1-a
    vm_count: 4
    machine_type: n1-standard-4
    accelerator:
    - count: 1
      type: nvidia-tesla-p100
    local_ssd:
    - interface: scsi
      size: 375
    - interface: scsi
      size: 375

This my-commitment-with-reservations commitment and the attached reservation res-1 resulted in the following committed and reserved resources:

Resource type Resources in commitment
(my-commitment-with-reservations)
Resources in current attached reservation
(res-1)
vCPUs and memory 16 vCPUs and 60 GB 16 vCPUs and 60 GB
(4 reserved n1-standard-4 VMs)*
GPUs 4 P100 GPUs 4 P100 GPUs
(1 P100 GPU per VM, for 4 VMs)*
Local SSD disks 3000 GB or 8 Local SSD disks 3000 GB or 8 Local SSD disks
(750 GB or 2 Local SSD disks per VM, for 4 VMs)*

*Specifically, the example attached reservation, res-1, reserves 4 n1-standard-4 VMs, each with 1 P100 GPU and 2 Local SSD disks of scsi interface type. The n1-standard-4 machine type uses 4 vCPUs and 15 GB for each VM.

Replace the example attached reservation

Suppose you want to replace the attached reservation res-1 for the with a new attached reservation res-2 and change the reserved resources to the following:

Resource type Resources in commitment
(my-commitment-with-reservations)
Resources in current attached reservation
(res-1)
Resources in replacement attached reservation
(res-2)
vCPUs and memory 16 vCPUs and 60 GB 16 vCPUs and 60 GB
(4 reserved n1-standard-4 VMs)*
16 vCPUs and 60 GB
(2 reserved and shared n1-standard-8 VMs)
GPUs 4 P100 GPUs 4 P100 GPUs
(1 P100 GPU per VM, for 4 VMs)*
4 P100 GPUs
(2 P100 GPUs per VM, for 2 VMs)
Local SSD disks 3000 GB or 8 Local SSD disks 3000 GB or 8 Local SSD disks
(750 GB or 2 Local SSD disks per VM, for 4 VMs)*
3000 GB or 8 Local SSD disks
(1500 GB or 4 Local SSD disks per VM, for 2 VMs)*

*Specifically, the example attached reservation, res-1, reserves 4 n1-standard-4 VMs, each with 1 P100 GPU and 2 Local SSD disks of scsi interface type. The n1-standard-4 machine type uses 4 vCPUs and 15 GB for each VM.

Specifically, the replacement attached reservation defines res-2, which reserves 2 n1-standard-8 VMs, each with 1 P100 GPU and 4 Local SSD disks of scsi interface type. Additionally, res-2 is shared with 2 other projects, project-1 and project-2 and owned by the current project, my-project. The n1-standard-8 machine type uses 8 vCPUs and 30 GB for each VM.

To replace the attached reservation res-1 with res-2 for the my-commitment-with-reservations commitment, do the following:

  1. Create a file named two-reservations.yaml in the current directory that file contains the following contents:

    - reservation: res-1
      reservation_zone: asia-east1-a
      vm_count: 0
      machine_type: n1-standard-4
      accelerator:
      - count: 1
        type: nvidia-tesla-p100
      local_ssd:
      - interface: scsi
        size: 375
      - interface: scsi
        size: 375
    - reservation: res-2
      reservation_zone: asia-east1-a
      vm_count: 2
      machine_type: n1-standard-8
      accelerator:
      - count: 2
        type: nvidia-tesla-p100
      project: my-project
      share_setting: projects
      share_with:
      - project-1
      - project-2
      local_ssd:
      - interface: scsi
        size: 375
      - interface: scsi
        size: 375
      - interface: scsi
        size: 375
      - interface: scsi
        size: 375
    
  2. Run the following command:

    gcloud beta compute commitments update-reservations my-commitment-with-reservations \
        --region=asia-east1 \
        --reservations-from-file=two-reservations.yaml
    

REST

To replace reservations that are attached to commitments, make a POST request using the regionCommitments.updateReservations method.

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/COMMITMENT_ZONE/commitments/COMMITMENT_NAME/updateReservations

{
  "reservations":
  [
    {
      "name": "REPLACEMENT_RESERVATION_NAME",
      "specificReservation":
      {
        "count": "REPLACEMENT_RESERVATION_NUMBER_OF_VMS",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": "REPLACEMENT_RESERVATION_NUMBER_OF_ACCELERATORS",
              "acceleratorType": "REPLACEMENT_RESERVATION_ACCELERATOR_TYPE"
            }
          ],
          "localSsds":
          [
            {
              "diskSizeGb": "375",
              "interface": "REPLACEMENT_RESERVATION_INTERFACE_1"
            },
            {
              "diskSizeGb": "375",
              "interface": "REPLACEMENT_RESERVATION_INTERFACE_2"
            }
          ],
          "machineType": "REPLACEMENT_RESERVATION_MACHINE_TYPE"

        }
      },
      "zone": "REPLACEMENT_RESERVATION_ZONE",
      "shareSettings":
      {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap":
        {
          "REPLACEMENT_RESERVATION_CONSUMER_PROJECT_ID_1":
          {
            "projectId": "REPLACEMENT_RESERVATION_CONSUMER_PROJECT_ID_1"
          },
          "REPLACEMENT_RESERVATION_CONSUMER_PROJECT_ID_2":
          {
            "projectId": "REPLACEMENT_RESERVATION_CONSUMER_PROJECT_ID_2"
          }
         }
      }
    },
    {
      "name": "CURRENT_RESERVATION_NAME",
      "specificReservation":
      {
        "count": "0",
        "instanceProperties":
        {
          "guestAccelerators":
          [
            {
              "acceleratorCount": "CURRENT_RESERVATION_NUMBER_OF_ACCELERATORS",
              "acceleratorType": "CURRENT_RESERVATION_ACCELERATOR_TYPE"
            }
          ],
          "localSsds":
          [
            {
              "diskSizeGb": "375",
              "interface": "CURRENT_RESERVATION_INTERFACE_1"
            },
            {
              "diskSizeGb": "375",
              "interface": "CURRENT_RESERVATION_INTERFACE_2"
            }
          ],
          "machineType": "CURRENT_RESERVATION_MACHINE_TYPE"

        }
      },
      "zone": "CURRENT_RESERVATION_ZONE",
      "shareSettings":
      {
        "shareType": "SPECIFIC_PROJECTS",
        "projectMap":
        {
          "CURRENT_RESERVATION_CONSUMER_PROJECT_ID_1":
          {
            "projectId": "CURRENT_RESERVATION_CONSUMER_PROJECT_ID_1"
          },
          "CURRENT_RESERVATION_CONSUMER_PROJECT_ID_2":
          {
            "projectId": "CURRENT_RESERVATION_CONSUMER_PROJECT_ID_2"
          }
         }
      }
    }
  ]
}

Replace the following with the corresponding properties of the commitment, the current reservation, and the replacement reservation:

Commitment

  • COMMITMENT_NAME: the name of the commitment with the attached reservation.
  • PROJECT_ID: the project ID of the commitment with the attached reservation. This is also the project ID for the current and attached reservations.
  • COMMITMENT_ZONE: the zone of the commitment with the attached reservation.

Current reservation

For the current reservation, all of the following properties must be exactly the same as when you viewed the reservation. Omit the fields for any properties that the current reservation does not already specify.

  • CURRENT_RESERVATION_NAME: the name of the current attached reservation.
  • CURRENT_RESERVATION_ZONE: the zone of the current attached reservation.
  • CURRENT_RESERVATION_MACHINE_TYPE: the machine type of the current attached reservation.
  • CURRENT_RESERVATION_NUMBER_OF_ACCELERATORS: the number of GPUs reserved in the current attached reservation.
  • CURRENT_RESERVATION_ACCELERATOR_TYPE: the type of accelerator reserved in the current attached reservation.
  • CURRENT_RESERVATION_INTERFACE_1 and CURRENT_RESERVATION_INTERFACE_2: the type of interface that the Local SSD disks for each reserved VM use in the current attached reservation. Valid options are: scsi and nvme. Each Local SSD disk is 375 GB. Repeat the localSsds parameter for all the reserved Local SSD disks.
  • CURRENT_RESERVATION_SHARE_SETTING: The type of sharing for the current reservation. Specify this parameter with the value as projects if your current attached reservation is shared across multiple consumer projects.
  • CURRENT_RESERVATION_CONSUMER_PROJECT_ID_1 and CURRENT_RESERVATION_CONSUMER_PROJECT_ID_2: the project IDs of the projects that you share the current attached reservation with, for example project-1 and project-2.

Replacement reservation

For the replacement reservation, set the following properties as required. Ensure that you meet all the requirements when you specify these properties. Omit any additional fields that you don't want to use.

  • REPLACEMENT_RESERVATION_NAME: the name of the new replacement reservation.
  • REPLACEMENT_RESERVATION_ZONE: the zone of the new replacement reservation.
  • REPLACEMENT_RESERVATION_NUMBER_OF_VMS: the number of VMs that you want to reserve in the new replacement reservation.
  • REPLACEMENT_RESERVATION_MACHINE_TYPE: the machine type that you want for the VMs in your new replacement reservation.

    • For predefined machine types, use the format MACHINE_FAMILY-standard-CPUS; for example, n2-standard-4.
    • For custom machine types, use the format MACHINE_FAMILY-custom-CPUS-MEMORY; for example n2-custom-4-5120. For a full list of restrictions, read the specifications for custom machine types.

    Replace the following:

    • MACHINE_FAMILY: the family of machine types; for example, specify n2 for N2 VMs.
    • CPUS: the number of vCPUs.
    • MEMORY: the total memory for a reserved VM. Memory must be a multiple of 256 MB and must be supplied in MB; for example, to create an N2 VM with 4 vCPUs and 5 GB of memory, which is 5120 MB, use n2-custom-4-5120.
  • REPLACEMENT_RESERVATION_NUMBER_OF_ACCELERATORS: the number of GPUs you want to add, per VM, in the replacement reservation.

  • REPLACEMENT_RESERVATION_ACCELERATOR_TYPE: the type of accelerator you want to add in the replacement reservation.

  • REPLACEMENT_RESERVATION_INTERFACE_1 and REPLACEMENT_RESERVATION_INTERFACE_2: the type of interface you want the Local SSD disks for each reserved VM to use. Valid options are: scsi and nvme. Each Local SSD disk is 375 GB. Repeat the localSsds parameter for each Local SSD disks that you want to add. You can specify up to 24 Local SSD disks.

  • REPLACEMENT_RESERVATION_SHARE_SETTING: The type of sharing for the replacement reservation. Specify this parameter with the value as projects if you want to share your replacement reservation across multiple consumer projects.

  • REPLACEMENT_RESERVATION_CONSUMER_PROJECT_ID_1 and REPLACEMENT_RESERVATION_CONSUMER_PROJECT_ID_2: the project IDs of the projects that can share this reservation, for example project-1,project-2. You can include up to 100 consumer projects. These projects must be in the same organization as the owner project. Don't include the PROJECT_ID, which is already allowed to consume this reservation by default.

Example for replacing a reservation that is attached to a commitment

To demonstrate this, this section shows an example commitment with an attached reservation and how to replace the example attached reservation.

Example commitment with an attached reservation

For example, suppose that you want to replace the attached reservation res-1 for the my-commitment-with-reservations commitment, that was purchased by making the following POST request:

  POST https://compute.googleapis.com/compute/beta/projects/my-project/regions/asia-east1/commitments

  {
    "name": "my-commitment-with-reservations",
    "plan": "TWELVE_MONTH",
    "reservations":
    [
      {
        "name": "res-1",
        "specificReservation":
        {
          "count": "4",
          "instanceProperties":
          {
            "guestAccelerators":
            [
              {
                "acceleratorCount": "1",
                "acceleratorType": "nvidia-tesla-p100"
              }
            ],
            "localSsds":
            [
              {
                "diskSizeGb": "375",
                "interface": "scsi"
              },
              {
                "diskSizeGb": "375",
                "interface": "scsi"
              }
            ],
            "machineType": "n1-standard-4"
          }
        },
        "zone": "asia-east1-a"
      }
    ],
    "resources":
    [
      {
        "amount": "16",
        "type": "VCPU"
      },
      {
        "amount": "61440",
        "type": "MEMORY"
      },
      {
        "acceleratorType": "nvidia-tesla-p100",
        "amount": "4",
        "type": "ACCELERATOR"
      }
      {
        "amount": "3072000",
        "type": "LOCAL_SSD"
      }
    ],
    "type": "GENERAL_PURPOSE"
  }

This my-commitment-with-reservations commitment and the attached reservation res-1 resulted in the following committed and reserved resources:

Resource type Resources in commitment
(my-commitment-with-reservations)
Resources in current attached reservation
(res-1)
vCPUs and memory 16 vCPUs and 60 GB 16 vCPUs and 60 GB
(4 reserved n1-standard-4 VMs)*
GPUs 4 P100 GPUs 4 P100 GPUs
(1 P100 GPU per VM, for 4 VMs)*
Local SSD disks 3000 GB or 8 Local SSD disks 3000 GB or 8 Local SSD disks
(750 GB or 2 Local SSD disks per VM, for 4 VMs)*

*Specifically, the example attached reservation, res-1, reserves 4 n1-standard-4 VMs, each with 1 P100 GPU and 2 Local SSD disks of scsi interface type. The n1-standard-4 machine type uses 4 vCPUs and 15 GB for each VM.

Replace the example attached reservation

Suppose you want to replace the attached reservation res-1 for the with a new attached reservation res-2 and change the reserved resources to the following:

Resource type Resources in commitment
(my-commitment-with-reservations)
Resources in current attached reservation
(res-1)
Resources in replacement attached reservation
(res-2)
vCPUs and memory 16 vCPUs and 60 GB 16 vCPUs and 60 GB
(4 reserved n1-standard-4 VMs)*
16 vCPUs and 60 GB
(2 reserved and shared n1-standard-8 VMs)
GPUs 4 P100 GPUs 4 P100 GPUs
(1 P100 GPU per VM, for 4 VMs)*
4 P100 GPUs
(2 P100 GPUs per VM, for 2 VMs)
Local SSD disks 3000 GB or 8 Local SSD disks 3000 GB or 8 Local SSD disks
(750 GB or 2 Local SSD disks per VM, for 4 VMs)*
3000 GB or 8 Local SSD disks
(1500 GB or 4 Local SSD disks per VM, for 2 VMs)*

*Specifically, the example attached reservation, res-1, reserves 4 n1-standard-4 VMs, each with 1 P100 GPU and 2 Local SSD disks of scsi interface type. The n1-standard-4 machine type uses 4 vCPUs and 15 GB for each VM.

Specifically, the replacement attached reservation defines res-2, which reserves 2 n1-standard-8 VMs, each with 1 P100 GPU and 4 Local SSD disks of scsi interface type. Additionally, res-2 is shared with 2 other projects, project-1 and project-2 and owned by the current project, my-project. The n1-standard-8 machine type uses 8 vCPUs and 30 GB for each VM.

To replace the attached reservation res-1 with res-2 for the my-commitment-with-reservations commitment, make the following POST request by using the regionCommitments.updateReservations method:

  POST https://compute.googleapis.com/compute/beta/projects/my-project/regions/asia-east1/commitments/my-commitment-with-reservations/updateReservations

  {
    "reservations":
    [
      {
        "name": "res-2",
        "specificReservation":
        {
          "count": "2",
          "instanceProperties":
          {
            "guestAccelerators":
            [
              {
                "acceleratorCount": 2,
                "acceleratorType": "nvidia-tesla-p100"
              }
            ],
            "localSsds":
            [
              {
                "diskSizeGb": "375",
                "interface": "scsi"
              },
              {
                "diskSizeGb": "375",
                "interface": "scsi"
              },
              {
                "diskSizeGb": "375",
                "interface": "scsi"
              },
              {
                "diskSizeGb": "375",
                "interface": "scsi"
              }
            ],
            "machineType": "n1-standard-8"
          }
        },
        "zone": "asia-east1-a"
      },
      {
        "name": "res-1",
        "specificReservation":
        {
          "count": "0",
          "instanceProperties":
          {
            "guestAccelerators":
            [
              {
                "acceleratorCount": 1,
                "acceleratorType": "nvidia-tesla-p100"
              }
            ],
            "localSsds":
            [
              {
                "diskSizeGb": "375",
                "interface": "scsi"
              },
              {
                "diskSizeGb": "375",
                "interface": "scsi"
              }
            ],
            "machineType": "n1-standard-4"
          }
        },
        "zone": "asia-east1-a"
      }
    ]
  }

What's next