Create AI-optimized instances in bulk with A4 or A3 Ultra Stay organized with collections Save and categorize content based on your preferences.
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:
- Choose a consumption option: your choice of consumption option determines how you get and use GPU resources.
To learn more, seeChoose a consumption option.
- 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.
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.createon the project- To use a custom image to create the VM:
compute.images.useReadOnlyon the image - To use a snapshot to create the VM:
compute.snapshots.useReadOnlyon the snapshot - To use an instance template to create the VM:
compute.instanceTemplates.useReadOnlyon the instance template - To specify a subnet for your VM:
compute.subnetworks.useon the project or on the chosen subnet - To specify a static IP address for the VM:
compute.addresses.useon the project - To assign an external IP address to the VM when using a VPC network:
compute.subnetworks.useExternalIpon the project or on the chosen subnet - To assign alegacy network to the VM:
compute.networks.useon the project - To assign an external IP address to the VM when using a legacy network:
compute.networks.useExternalIpon the project - To set VM instance metadata for the VM:
compute.instances.setMetadataon the project - To set tags for the VM:
compute.instances.setTagson the VM - To set labels for the VM:
compute.instances.setLabelson the VM - To set a service account for the VM to use:
compute.instances.setServiceAccounton the VM - To create a new disk for the VM:
compute.disks.createon the project - To attach an existing disk in read-only or read-write mode:
compute.disks.useon the disk - To attach an existing disk in read-only mode:
compute.disks.useReadOnlyon 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:
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:
- To create the regular VPC networks for the gVNICs, seeCreate and manage Virtual Private Cloud networks.
- To create the RoCE VPC network, seeCreate a Virtual Private Cloud network for RDMA NICs.
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.
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.
- Optional: To verify that the VPC network resources are created successfully, check the network settings in the Google Cloud console:
- In the Google Cloud console, go to theVPC networks page.
- Search the list for the networks that you created in the previous step.
- 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.
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 be3to place VMs in the adjacent blocks, or2to place VMs in the same block. For information about the maximum number of VMs supported for eachmaxDistanceper 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 IDPOLICY_NAME: the name of the compact placement policy.MAX_DISTANCE: the maximum distance configuration for your VMs. The value must be3to place VMs in the adjacent blocks, or2to place VMs in the same block. For information about the maximum number of VMs supported for eachmaxDistanceper 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:
Replace the following:
NAME_PATTERN: the name pattern of the VMs. For example, usingvm-#for the name pattern generates VMs with names such asvm-1andvm-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
projects/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.
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.
- 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:
Replace the following:
NAME_PATTERN: the name pattern of the VMs. For example, usingvm-#for the name pattern generates VMs with names such asvm-1andvm-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.
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.TERMINATION_ACTION: the action to take when Compute Enginepreempts the instance, eitherSTOP(default) orDELETE.
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.
- 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:
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-1andvm-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
projects/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.
Optional: If you chose to use a compact placement policy, then add the following
instancePropertiessubfield 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.
- 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:
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-1andvm-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.
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.TERMINATION_ACTION: the action to take when Compute Enginepreempts the instance, eitherSTOP(default) orDELETE.
Optional: If you chose to use a compact placement policy, then add the following
instancePropertiessubfield 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.
- 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
- Verify reservation consumption
- View VMs topology
- Run workloads overview
- Troubleshoot reservation consumption
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.