Create AI-optimized instances in bulk with A4 or A3 Ultra

This document explains how to create virtual machine (VM) instances in bulk thatuse A4 or A3 Ultra accelerator-optimized machine types. To learn more about themachine types,seeA4 machine typeandA3 Ultra machine typein the Compute Engine documentation.

For more information about creating VMs in bulk, seeAbout bulk creation of VMsin the Compute Engine documentation.

To learn about other ways to create VMs or clusters, see theOverview page.

Before you begin

Before creating VMs in bulk, if you haven't already done so, complete the followingsteps:

  1. Choose a consumption option: your choice of consumption option determines how you get and use GPU resources.

    To learn more, seeChoose a consumption option.

  2. Obtain capacity: the process to obtain capacity differs for each consumption option.

    To learn about the process to obtain capacity for your chosen consumption option, seeCapacity overview.

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

In the Google Cloud console, activate Cloud Shell.

Activate Cloud Shell

At the bottom of the Google Cloud console, aCloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

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. After installation,initialize the Google Cloud CLI by running the following command:

    gcloudinit

    If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

Required roles

To get the permissions that you need to create VMs in bulk, ask your administrator to grant you theCompute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM role on the project. For more information about granting roles, seeManage access to projects, folders, and organizations.

This predefined role contains the permissions required to create VMs in bulk. To see the exact permissions that are required, expand theRequired permissions section:

Required permissions

The following permissions are required to create VMs in bulk:

  • compute.instances.create on the project
  • To use a custom image to create the VM: compute.images.useReadOnly on the image
  • To use a snapshot to create the VM: compute.snapshots.useReadOnly on the snapshot
  • To use an instance template to create the VM: compute.instanceTemplates.useReadOnly on the instance template
  • To specify a subnet for your VM: compute.subnetworks.use on the project or on the chosen subnet
  • To specify a static IP address for the VM: compute.addresses.use on the project
  • To assign an external IP address to the VM when using a VPC network: compute.subnetworks.useExternalIp on the project or on the chosen subnet
  • To assign alegacy network to the VM: compute.networks.use on the project
  • To assign an external IP address to the VM when using a legacy network: compute.networks.useExternalIp on the project
  • To set VM instance metadata for the VM: compute.instances.setMetadata on the project
  • To set tags for the VM: compute.instances.setTags on the VM
  • To set labels for the VM: compute.instances.setLabels on the VM
  • To set a service account for the VM to use: compute.instances.setServiceAccount on the VM
  • To create a new disk for the VM: compute.disks.create on the project
  • To attach an existing disk in read-only or read-write mode: compute.disks.use on the disk
  • To attach an existing disk in read-only mode: compute.disks.useReadOnly on the disk

You might also be able to get these permissions withcustom roles or otherpredefined roles.

Overview

Creating instances in bulk with the A4 or A3 Ultra machine type includes the following steps:

  1. Create VPC networks
  2. Optional: Create a compact placement policy
  3. Create instances in bulk

Create VPC networks

Tip: If you are setting up a quick test, you can skip this step and specify a single NIC--network-interface=nic-type=GVNIC instead.

To set up the network for A4 or A3 Ultra machine type, create three VPC networks for the following network interfaces:

  • 2 regular VPC networks for thegVNIC network interfaces (NIC). These are used for host to host communication.
  • 1 VPC network with theRoCE network profile is required for the CX-7 NICs. The RoCE VPC network needs to have 8 subnets, one subnet for each CX-7 NIC. These NICs use RDMA over Converged Ethernet (RoCE), providing the high-bandwidth, low-latency communication that's essential for GPU to GPU communication.

For more information about NIC arrangement, seeReview network bandwidth and NIC arrangement.

Create the networks either manually by following the instruction guides or automatically by usingthe provided script.

Instruction guides

To create the networks, you can use the following instructions:

For these VPC networks, we recommend setting themaximum transmission unit (MTU) to a larger value.For A4 or A3 Ultra machine type, the recommended MTU is8896 bytes.To review the recommended MTU settings for other GPU machine types, seeMTU settings for GPU machine types.

Script

To create the networks, follow these steps.

For these VPC networks, we recommend setting themaximum transmission unit (MTU) to a larger value.For A4 or A3 Ultra machine type, the recommended MTU is8896 bytes.To review the recommended MTU settings for other GPU machine types, seeMTU settings for GPU machine types.

  1. Use the following script to create VPC networks for the gVNICs and CX-7 NICs.

          #!/bin/bash    # Create regular VPC networks and subnets for the gVNICs    for N in $(seq 0 1); do      gcloud compute networks createGVNIC_NAME_PREFIX-net-$N \        --subnet-mode=custom \        --mtu=8896      gcloud compute networks subnets createGVNIC_NAME_PREFIX-sub-$N \        --network=GVNIC_NAME_PREFIX-net-$N \        --region=REGION \        --range=10.$N.0.0/16      gcloud compute firewall-rules createGVNIC_NAME_PREFIX-internal-$N \        --network=GVNIC_NAME_PREFIX-net-$N \        --action=ALLOW \        --rules=tcp:0-65535,udp:0-65535,icmp \        --source-ranges=10.0.0.0/8    done    # Create SSH firewall rules    gcloud compute firewall-rules createGVNIC_NAME_PREFIX-ssh \      --network=GVNIC_NAME_PREFIX-net-0 \      --action=ALLOW \      --rules=tcp:22 \      --source-ranges=IP_RANGE    # Assumes that an external IP is only created for vNIC 0    gcloud compute firewall-rules createGVNIC_NAME_PREFIX-allow-ping-net-0 \      --network=GVNIC_NAME_PREFIX-net-0 \      --action=ALLOW \      --rules=icmp \      --source-ranges=IP_RANGE      # List and make sure network profiles exist in the machine type's zone    gcloud compute network-profiles list --filter "location.name=ZONE"    # Create network for CX-7    gcloud compute networks createRDMA_NAME_PREFIX-mrdma \      --network-profile=ZONE-vpc-roce \      --subnet-mode custom \      --mtu=8896    # Create subnets    for N in $(seq 0 7); do      gcloud compute networks subnets createRDMA_NAME_PREFIX-mrdma-sub-$N \        --network=RDMA_NAME_PREFIX-mrdma \        --region=REGION \        --range=10.$((N+2)).0.0/16 # offset to avoid overlap with gVNICs    done

    Replace the following:

    • GVNIC_NAME_PREFIX: the custom name prefix to use for the regular VPC networks and subnets for the gVNICs.
    • RDMA_NAME_PREFIX: the custom name prefix to use for the RoCE VPC network and subnets for the CX-7 NICs.
    • ZONE: specify a zone in which the machine type that you want to use is available, such asus-central1-a. For information about regions, seeGPU availability by regions and zones.
    • REGION: the region where you want to create the subnets. This region must correspond to the zone specified. For example, if your zone isus-central1-a, then your region isus-central1.
    • IP_RANGE: the IP range to use for theSSH firewall rules.
  2. Optional: To verify that the VPC network resources are created successfully, check the network settings in the Google Cloud console:
    1. In the Google Cloud console, go to theVPC networks page.

      Go to VPC networks

    2. Search the list for the networks that you created in the previous step.
    3. To view the subnets, firewall rules, and other network settings, click the name of the network.

Optional: Create a compact placement policy

Tip: If you want your VMs to be placed in a single or adjacent blocks, specify VM placement by creating a placement policy. However if you want your VMs to be on a specific block, skip this step and provide the name of the block in the reservation affinity when you create the instance.

You can specify VM placement by creating a compact placement policy. When you apply a compact placement policy to your VMs, Compute Engine makes best-effort attempts to create VMs that are as close to each other as possible. If your application is latency-sensitive and you want the VMs to be closer together (maximum compactness), then specify themaxDistance field (Preview) when creating a compact placement policy. A lowermaxDistance value ensures closer VM placement, but it also increases the chance that some VMs won't be created.

To create a compact placement policy, select one of the following options:

gcloud

To create a compact placement policy, use thegcloud beta compute resource-policies create group-placement command:

gcloud beta compute resource-policies create group-placementPOLICY_NAME \    --collocation=collocated \    --max-distance=MAX_DISTANCE \    --region=REGION

Replace the following:

  • POLICY_NAME: the name of the compact placement policy.
  • MAX_DISTANCE: the maximum distance configuration for your VMs. The value must be3 to place VMs in the adjacent blocks, or2 to place VMs in the same block. For information about the maximum number of VMs supported for eachmaxDistance per machine series, seeAbout compact placement policies in the Compute Engine documentation.
  • REGION: the region where you want to create the compact placement policy. Specify a region in which the machine type that you want to use is available. For information about regions, seeGPU availability by regions and zones.

REST

To create a compact placement policy, make aPOST request to thebetaresourcePolicies.insert method. In the request body, include thecollocation field set toCOLLOCATED, and themaxDistance field.

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/resourcePolicies  {    "name": "POLICY_NAME",    "groupPlacementPolicy": {      "collocation": "COLLOCATED",      "maxDistance":MAX_DISTANCE    }  }

Replace the following:

  • PROJECT_ID: your project ID
  • POLICY_NAME: the name of the compact placement policy.
  • MAX_DISTANCE: the maximum distance configuration for your VMs. The value must be3 to place VMs in the adjacent blocks, or2 to place VMs in the same block. For information about the maximum number of VMs supported for eachmaxDistance per machine series, seeAbout compact placement policies in the Compute Engine documentation.
  • REGION: the region where you want to create the compact placement policy. Specify a region in which the machine type that you want to use is available. For information about regions, seeGPU availability by regions and zones.

Create A3 Ultra or A4 VMs in bulk

To create A3 Ultra or A4 VMs in bulk, use one of the following methods.

The following commands also set the access scope for your instances. To simplify permissionsmanagement, Google recommends that you set the access scope on an instance tocloud-platform access and then use IAM roles to define what services the instance canaccess. For more information, seeScopes best practice.

gcloud

To create VMs in bulk, use thegcloud compute instances bulk create command.

The parameters that you need to specify depend on theconsumption option that you are using forthis deployment. Select the tab that corresponds to your consumption option's provisioning model.

Reservation-bound

Beforerunning the command, optionally add the flag for acompact placement policy.

gcloud compute instances bulk create \    --name-pattern=NAME_PATTERN \    --count=COUNT \    --machine-type=MACHINE_TYPE \    --image-family=IMAGE_FAMILY \    --image-project=IMAGE_PROJECT \    --region=REGION \    --boot-disk-type=hyperdisk-balanced \    --boot-disk-size=DISK_SIZE \    --scopes=cloud-platform \    --network-interface=nic-type=GVNIC,network=GVNIC_NAME_PREFIX-net-0,subnet=GVNIC_NAME_PREFIX-sub-0 \    --network-interface=nic-type=GVNIC,network=GVNIC_NAME_PREFIX-net-1,subnet=GVNIC_NAME_PREFIX-sub-1,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-0,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-1,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-2,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-3,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-4,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-5,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-6,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-7,no-address \    --reservation-affinity=specific \    --reservation=RESERVATION \    --provisioning-model=RESERVATION_BOUND \    --instance-termination-action=TERMINATION_ACTION \    --maintenance-policy=TERMINATE

Complete the following steps:

  1. Replace the following:

    • NAME_PATTERN: the name pattern of the VMs. For example, usingvm-# for the name pattern generates VMs with names such asvm-1 andvm-2, up to the number of VMs specified by--count.
    • COUNT: the number of VMs to create.
    • MACHINE_TYPE: the machine type to use for the VM. Specify either an A4 or A3 Ultra machine type. For more information, seeGPU machine types.
    • IMAGE_FAMILY: the image family of the OS image that you want to use.For a list of supported operating systems, seeSupported operating systems.
    • IMAGE_PROJECT: the project ID of the OS image.
    • REGION: specify a region in which the machine type that you want touse is available.If you want to specify a compact placement policy, thenyou must use the same region as the compact placement policy.For information about regions, seeGPU availability by regions and zones.
    • DISK_SIZE: the size of the boot disk in GB.
    • GVNIC_NAME_PREFIX: the name prefix that you specified whencreating the standard VPC networks and subnets that use gVNIC NICs.
    • RDMA_NAME_PREFIX: the name prefix that you specified whencreating the VPC networks and subnets that use RDMA NICs.
    • RESERVATION: either the reservation name or a specific block within a reservation. To get the reservation name or the available blocks, seeView reserved capacity. Based on your requirement for instance placement, choose one of the following:
      • To create instances across blocks or on a single block:

        projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME

        Additionally, for a single block, apply a compact placement policy that specifies a block collocation (maxDistance=2) . Compute Engine then applies the policy to the reservation and creates instances on the same block.

      • To create instances on a specific block:

        projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME
      Tip: If the reservation exists in the current project, then you can omitprojects/RESERVATION_OWNER_PROJECT_ID/reservations/ from the reservation value.
    • TERMINATION_ACTION: whether Compute Engine stops (STOP) or deletes (DELETE) the VM at the end of the reservation period.

  2. Optional: If you chose to use a compact placement policy, then add the following flag to the command:

      --resource-policies=POLICY_NAME

    Replace the following:

    • POLICY_NAME: the name of the compact placement policy.
  3. Run the command.

Spot

Beforerunning the command, optionally add the flag for acompact placement policy.

gcloud compute instances bulk create \    --name-pattern=NAME_PATTERN \    --count=COUNT \    --machine-type=MACHINE_TYPE \    --image-family=IMAGE_FAMILY \    --image-project=IMAGE_PROJECT \    --region=REGION \    --boot-disk-type=hyperdisk-balanced \    --boot-disk-size=DISK_SIZE \    --scopes=cloud-platform \    --network-interface=nic-type=GVNIC,network=GVNIC_NAME_PREFIX-net-0,subnet=GVNIC_NAME_PREFIX-sub-0 \    --network-interface=nic-type=GVNIC,network=GVNIC_NAME_PREFIX-net-1,subnet=GVNIC_NAME_PREFIX-sub-1,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-0,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-1,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-2,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-3,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-4,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-5,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-6,no-address \    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-7,no-address \    --provisioning-model=SPOT \    --instance-termination-action=TERMINATION_ACTION

Complete the following steps:

  1. Replace the following:

  2. Optional: If you chose to use a compact placement policy, then add the following flag to the command:

      --resource-policies=POLICY_NAME

    Replace the following:

    • POLICY_NAME: the name of the compact placement policy.
  3. Run the command.

REST

To create VMs in bulk, make aPOST request to theinstances.bulkInsert method.

The parameters that you need to specify depend on theconsumption option that you are using forthis deployment. Select the tab that corresponds to your consumption option's provisioning model.

Reservation-bound

Beforesubmitting the request, optionally add theinstanceProperties subfield for acompact placement policy to the requestbody.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert{  "namePattern":"NAME_PATTERN",  "count":"COUNT",  "instanceProperties":{    "machineType":"MACHINE_TYPE",    "disks":[      {        "boot":true,        "initializeParams":{          "diskSizeGb":"DISK_SIZE",          "diskType":"hyperdisk-balanced",          "sourceImage":"projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"        },        "mode":"READ_WRITE",        "type":"PERSISTENT"      }    ],    "serviceAccounts": [      {        "email": "default",        "scopes": [          "https://www.googleapis.com/auth/cloud-platform"        ]      }    ],    "networkInterfaces": [      {        "accessConfigs": [          {            "name": "external-nat",            "type": "ONE_TO_ONE_NAT"          }        ],        "network": "projects/NETWORK_PROJECT_ID/global/networks/GVNIC_NAME_PREFIX-net-0",        "nicType": "GVNIC",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/GVNIC_NAME_PREFIX-sub-0"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/GVNIC_NAME_PREFIX-net-1",        "nicType": "GVNIC",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/GVNIC_NAME_PREFIX-sub-1"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-0"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-1"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-2"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-3"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-4"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-5"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-6"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-7"      }    ],    "reservationAffinity":{        "consumeReservationType":"SPECIFIC_RESERVATION",        "key":"compute.googleapis.com/reservation-name",        "values":[          "RESERVATION"        ]      },    "scheduling":{        "provisioningModel":"RESERVATION_BOUND",        "instanceTerminationAction":"DELETE",        "onHostMaintenance": "TERMINATE",        "automaticRestart":true      }  }}

Complete the following steps:

  1. Replace the following:

    • PROJECT_ID: the project ID of the project where you want to create the VM.
    • ZONE: specify a zone in which the machine type that you want to use is available. If you want to specify a compact placement policy, then you must use a zone in the same region as the compact placement policy. For information about regions, seeGPU availability by regions and zones.
    • NAME_PATTERN: the name pattern of the VMs. For example, usingvm-# for the name pattern generates VMs with names such asvm-1 andvm-2, up to the number of VMs specified by--count.
    • COUNT: the number of VMs to create.
    • MACHINE_TYPE: the machine type to use for the VM. Specify either an A4 or A3 Ultra machine type. For more information, seeGPU machine types.
    • VM_NAME: the name of the VM.
    • DISK_SIZE: the size of the boot disk in GB.
    • IMAGE_PROJECT: the project ID of the OS image.
    • IMAGE_FAMILY: the image family of the OS image that you want to use.For a list of supported operating systems, seeSupported operating systems.
    • NETWORK_PROJECT_ID: the project ID of the network.
    • GVNIC_NAME_PREFIX: the name prefix that you specified whencreating the standard VPC networks and subnets that use gVNIC NICs.
    • REGION: the region of the subnetwork.
    • RDMA_NAME_PREFIX: the name prefix that you specified whencreating the VPC networks and subnets that use RDMA NICs.
    • RESERVATION: either the reservation name or a specific block within a reservation. To get the reservation name or the available blocks, seeView reserved capacity. Based on your requirement for instance placement, choose one of the following:
      • To create instances across blocks or on a single block:

        projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME

        Additionally, for a single block, apply a compact placement policy that specifies a block collocation (maxDistance=2) . Compute Engine then applies the policy to the reservation and creates instances on the same block.

      • To create instances on a specific block:

        projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME
      Tip: If the reservation exists in the current project, then you can omitprojects/RESERVATION_OWNER_PROJECT_ID/reservations/ from the reservation value.
    • TERMINATION_ACTION: whether Compute Engine stops (STOP) or deletes (DELETE) the VM at the end of the reservation period.

  2. Optional: If you chose to use a compact placement policy, then add the followinginstanceProperties subfield to the request body:

        "resourcePolicies": [      "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"    ]

    Replace the following:

    • PROJECT_ID: the project ID of the compact placement policy.
    • REGION: the region of the compact placement policy.
    • POLICY_NAME: the name of the compact placement policy.
  3. Submit the request.

Spot

Beforesubmitting the request, optionally add theinstanceProperties subfield for acompact placement policy to the requestbody.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/zone/instances/bulkInsert{  "namePattern":"NAME_PATTERN",  "count":"COUNT",  "instanceProperties":{    "machineType":"MACHINE_TYPE",    "disks":[      {        "boot":true,        "initializeParams":{          "diskSizeGb":"DISK_SIZE",          "diskType":"hyperdisk-balanced",          "sourceImage":"projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"        },        "mode":"READ_WRITE",        "type":"PERSISTENT"      }    ],    "serviceAccounts": [      {        "email": "default",        "scopes": [          "https://www.googleapis.com/auth/cloud-platform"        ]      }    ],    "networkInterfaces": [      {        "accessConfigs": [          {            "name": "external-nat",            "type": "ONE_TO_ONE_NAT"          }        ],        "network": "projects/NETWORK_PROJECT_ID/global/networks/GVNIC_NAME_PREFIX-net-0",        "nicType": "GVNIC",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/GVNIC_NAME_PREFIX-sub-0"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/GVNIC_NAME_PREFIX-net-1",        "nicType": "GVNIC",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/GVNIC_NAME_PREFIX-sub-1"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-0"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-1"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-2"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-3"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-4"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-5"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-6"      },      {        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",        "nicType": "MRDMA",        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-7"      }    ],    "scheduling":    {      "provisioningModel": "SPOT",      "instanceTerminationAction": "TERMINATION_ACTION"    }  }}

Complete the following steps:

  1. Replace the following:

    • PROJECT_ID: the project ID of the project where you want to create the VM.
    • ZONE: specify a zone in which the machine type that you want to use is available. If you want to specify a compact placement policy, then you must use a zone in the same region as the compact placement policy. For information about regions, seeGPU availability by regions and zones.
    • NAME_PATTERN: the name pattern of the VMs. For example, usingvm-# for the name pattern generates VMs with names such asvm-1 andvm-2, up to the number of VMs specified by--count.
    • COUNT: the number of VMs to create.
    • MACHINE_TYPE: the machine type to use for the VM. Specify either an A4 or A3 Ultra machine type. For more information, seeGPU machine types.
    • VM_NAME: the name of the VM.
    • DISK_SIZE: the size of the boot disk in GB.
    • IMAGE_PROJECT: the project ID of the OS image.
    • IMAGE_FAMILY: the image family of the OS image that you want to use.For a list of supported operating systems, seeSupported operating systems.
    • NETWORK_PROJECT_ID: the project ID of the network.
    • GVNIC_NAME_PREFIX: the name prefix that you specified whencreating the standard VPC networks and subnets that use gVNIC NICs.
    • REGION: the region of the subnetwork.
    • RDMA_NAME_PREFIX: the name prefix that you specified whencreating the VPC networks and subnets that use RDMA NICs.
    • TERMINATION_ACTION: the action to take when Compute Enginepreempts the instance, eitherSTOP (default) orDELETE.

      Important: Make sure your application can handle preemption. Forexample, we recommend that you handle preemption byspecifying a shutdown script during instance creation. Learn how tohandlepreemption with a shutdown script.
  2. Optional: If you chose to use a compact placement policy, then add the followinginstanceProperties subfield to the request body:

        "resourcePolicies": [      "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"    ]

    Replace the following:

    • PROJECT_ID: the project ID of the compact placement policy.
    • REGION: the region of the compact placement policy.
    • POLICY_NAME: the name of the compact placement policy.
  3. Submit the request.

For more information about the configuration options when creating VMs in bulk,seeCreate VMs in bulk in theCompute Engine documentation.

What's next

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-12-15 UTC.