Create a MIG with H4D machine types and flex-start

This tutorial shows you how to create a managed instance group (MIG) that usesanH4D machine type.The MIG uses the Dynamic Workload Schedulerflex-start consumption modelto obtain compute resources for up to seven days.

Creating a MIG lets you manage multiple virtual machines (VMs) as a singleentity. Each VM in a MIG is based on an instance template. By automaticallymanaging the VMs in the group, MIGs offer high availability and scalability. Tolearn more about MIGs, seeManaged instance groups.

To learn about HPC VM and HPC cluster creation options, seeOverview of HPC cluster creation.

This tutorial is intended for HPC engineers, platform administrators andoperators, and for data and MPI specialists who are interested in creating agroup of interconnected HPC instances for short duration workloads. Theresulting instances don't use an orchestrator for instance management or jobscheduling.

Objectives

  1. Optional: Request preemptible quota.
  2. Optional: Create Virtual Private Cloud networks.
  3. Create an instance template.
  4. Create a MIG and a resize request.
  5. Clean up.

Costs

This tutorial uses billable components of Google Cloud, including:

To generate a cost estimate based on your projected usage, use thePricing Calculator.

Before you begin

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

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

  4. Toinitialize the gcloud CLI, run the following command:

    gcloudinit
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.create permission.Learn how to grant roles.
    Note: If you don't plan to keep the resources that you create in this procedure, create a project instead of selecting an existing project. After you finish these steps, you can delete the project, removing all resources associated with the project.
    • Create a Google Cloud project:

      gcloud projects createPROJECT_ID

      ReplacePROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set projectPROJECT_ID

      ReplacePROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the required API:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enable permission.Learn how to grant roles.

    gcloudservicesenablecompute.googleapis.com
  8. Install the Google Cloud CLI.

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

  10. Toinitialize the gcloud CLI, run the following command:

    gcloudinit
  11. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.create permission.Learn how to grant roles.
    Note: If you don't plan to keep the resources that you create in this procedure, create a project instead of selecting an existing project. After you finish these steps, you can delete the project, removing all resources associated with the project.
    • Create a Google Cloud project:

      gcloud projects createPROJECT_ID

      ReplacePROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set projectPROJECT_ID

      ReplacePROJECT_ID with your Google Cloud project name.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the required API:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enable permission.Learn how to grant roles.

    gcloudservicesenablecompute.googleapis.com
  14. Grant roles to your user account. Run the following command once for each of the following IAM roles:roles/compute.instanceAdmin.v1,roles/compute.networkAdmin

    gcloudprojectsadd-iam-policy-bindingPROJECT_ID--member="user:USER_IDENTIFIER"--role=ROLE

    Replace the following:

    • PROJECT_ID: Your project ID.
    • USER_IDENTIFIER: The identifier for your user account. For example,myemail@example.com.
    • ROLE: The IAM role that you grant to your user account.

Optional: Request preemptible quota

The VM instances added to the MIG consumeregional quota.VM instance, instance group, CPU, and disk quotas can be consumed by any VMinstance in the region, regardless of zone.

The quota can be either standard quota or preemptible quota when usingFlex-start.

  • Standard quota: If your project does not have preemptible quota, and you havenever requested preemptible quota, then the instance resources consumestandard quota.
  • Preemptible quota: Requesting preemptible quotas can help you improve quotaobtainability by providing separate quotas for temporary resources. However,after Compute Engine grants you preemptible quota in a region, allapplicable resources consume only preemptible quota. If this quota isdepleted, you must request additional preemptible quota for the VM resources.

You can request preemptible quota by following the steps documented inRequest a quota adjustment.

Types of quota needed

To use instance groups, you must have available quota for all the resources thatthe group uses (for example, CPU quota) and availablequota for the group resourceitself. For H4D instances, the following quota types might be used, dependingon the machine type used by the instances:

ResourceStandard quotaPreemptible quota
CPUsCPUS_PER_VM_FAMILYPreemptible CPUs
Local SSDsLocal SSD per machine family (GB)Preemptible Local SSDs (GB)

To create the resources in this tutorial, the following additional regionalquota might be required:

  • Zonal (single-zone) managed instance group:Instance group managers andInstance groups
  • Google Cloud Hyperdisk:

    • Hyperdisk Balanced Capacity (GB)
    • Hyperdisk Balanced Throughput (MB/s)
    • Hyperdisk Balanced IOPS

Optional: Create VPC networks

Unless you choose to disable it, each project has adefault network, which canbe used to provide network connectivity for your instances. When you create aVM, you can specify a VPC network and subnet. If you omit this configuration,the default network and subnet are used.

H4D instances can be configured to use Cloud RDMA. Cloud RDMAenables low-latency reliable messaging capabilities by using anIRDMA network driverthat supports Remote Direct Memory Access (RDMA) between Compute Engineinstances.

For this tutorial:

  • If you want to configure the H4D instances to use Cloud RDMA,complete the steps in this section.
  • If you don't want to use Cloud RDMA, then you can skip this sectionand use the default network instead.

To set up theFalcon VPC networks to use with your instances, you can either follow the documented instructions or use the provided script.

Instruction guides

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

Script

You can create up to nine gVNIC network interfaces and oneIRDMA network interface per instance. Each network interface mustattach to a separate network. To create the networks, you can use the followingscript, which creates two networks for gVNIC and one network for IRDMA.

  1. Optional: Before running the script, list the Falcon VPC network profiles to verify there is one available.
      gcloud compute network-profiles list
  2. Copy the following code and run it in a Linux shell window.

      #!/bin/bash  # Set the number of GVNIC interfaces to create. You can create up to 9.  NUM_GVNIC=NUMBER_OF_GVNIC  # Create regular VPC networks and subnets for the GVNIC interfaces    for N in $(seq 0 $(($NUM_GVNIC - 1))); do      gcloud compute networks createGVNIC_NAME_PREFIX-net-$N \          --subnet-mode=custom      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  # Optional: Create a firewall rule for the external IP address for the  #  first GVNIC network interface  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  # Create a Falcon VPC network for the Cloud RDMA network interface  gcloud compute networks createRDMA_NAME_PREFIX-irdma \      --network-profile=ZONE-vpc-falcon \      --subnet-mode custom  # Create a subnet in the Falcon VPC network  gcloud compute networks subnets createRDMA_NAME_PREFIX-irdma-sub \      --network=RDMA_NAME_PREFIX-irdma \      --region=REGION \      --range=10.2.0.0/16  # offset to avoid overlap with GVNIC subnet ranges

    Replace the following:

    • NUMBER_OF_GVNIC: the number of GVNIC interfaces to create. Specify a number from 1 to 9.
    • GVNIC_NAME_PREFIX: the name prefix to use for the regular VPC network and subnet that uses a GVNIC NIC type.
    • REGION: the region where you want to create the networks. This must correspond to the zone specified for the--network-profile flag, when creating the Falcon VPC network. For example, if you specify the zone aseurope-west4-b, then your region iseurope-west4.
    • IP_RANGE: the range of IP addresses outside of the VPC network to use for theSSH firewall rules. As a best practice, specify the specific IP address ranges that you need to allow access from, rather than all IPv4 or IPv6 sources. Don't use0.0.0.0/0 or::/0 as a source range because this allows traffic from all IPv4 or IPv6 sources, including sources outside of Google Cloud.
    • RDMA_NAME_PREFIX: the name prefix to use for the VPC network and subnet that uses the IRDMA NIC type.
    • ZONE: thezone where you want to create the networks and compute instances. Use eitherus-central1-a oreurope-west4-b.
  3. 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.

Create an instance template

To use the Flex-start consumption option, you create an empty MIG and thencreate a resize request for the MIG. When your requested capacitybecomes available, Compute Engine provisions it and creates theinstances in the MIG. You obtain resources for up to seven days.

To specify the instance and consumption properties for each instance in the MIG,create an instance template by using one of the following methods:

gcloud

To create a regional instance template, use thegcloud compute instance-templates create command.

gcloud compute instance-templates createINSTANCE_TEMPLATE_NAME \    --machine-type=MACHINE_TYPE \    --image-family=IMAGE_FAMILY \    --image-project=IMAGE_PROJECT \    --instance-template-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, \      stack-type=STACK_TYPE, \      address=EXTERNAL_IPV4_ADDRESS \--network-interface=nic-type=GVNIC, \      network=GVNIC_NAME_PREFIX-net-1, \      subnet=GVNIC_NAME_PREFIX-sub-1,no-address \--network-interface=nic-type=IRDMA, \      network=RDMA_NAME_PREFIX-irdma, \      subnet=RDMA_NAME_PREFIX-irdma-sub, \      stack-type=IPV4_ONLY,no-address \        --reservation-affinity=none \    --instance-termination-action=DELETE \    --max-run-duration=RUN_DURATION \    --maintenance-policy=TERMINATE \    --provisioning-model=FLEX_START

Replace the following:

  • INSTANCE_TEMPLATE_NAME: the name of the instance template.
  • MACHINE_TYPE: the H4D machine type to use for the instance.
  • 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: the region where you want to create the instance template.Specify a region in which the machine type that you want to use is available.
  • DISK_SIZE: the size of the boot disk in GiB.
  • GVNIC_NAME_PREFIX: the name prefix that you used when creating the standard VPC networks and subnets for the gVNIC interfaces.

    If you are using the default network, include only a single--network-interface field with thenic-type field set toGVNIC. Also, omit thenetwork andsubnetwork settings for this network interface.

  • STACK_TYPE: Optional: the stack type to use for the gVNIC interface. Specify eitherIPV4_ONLY orIPV4_IPV6. If you don't specify a value,IPV4_ONLY is used by default.
  • EXTERNAL_IPV4_ADDRESS: Optional: a static external IPv4 address to use with the gVNIC network interface. You must have previouslyreserved an external IPv4 address. Do one of the following:

    • Specify a valid IPv4 address from the subnet.
    • Use the flagno-address if you don't want the network interface to have an external IP address.
    • Specifyaddress='' if you want the network interface to receive an ephemeral external IP address.

    To specify an external IPv6 address for the GVNIC network interface, use the flag--external-ipv6-address instead.

  • RDMA_NAME_PREFIX: the name prefix that you used when creating the VPC network and subnet for the IRDMA network interface.

    If you are not using Cloud RDMA with your H4D instances, omit the--network-interface field for the IRDMA interface.

  • RUN_DURATION: the duration you want the requested instances to run. You must format the value as the number of days, hours, minutes, or seconds followed byd,h,m, ands respectively. For example, specify30m for 30 minutes or1d2h3m4s for one day, two hours, three minutes, and four seconds. The value must be between 10 minutes and seven days.

REST

Preview — Flex-start

This feature is subject to the "Pre-GA Offerings Terms" in the General Service Terms section of theService Specific Terms. Pre-GA features are available "as is" and might have limited support. For more information, see thelaunch stage descriptions.

To create a regional instance template, make aPOST request to theregionInstanceTemplates.insert method.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceTemplates{  "name":"INSTANCE_TEMPLATE_NAME",  "properties":{    "disks":[      {        "boot":true,        "initializeParams":{          "diskSizeGb":"DISK_SIZE",          "diskType":"hyperdisk-balanced",          "sourceImage":"projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"        },        "mode":"READ_WRITE",        "type":"PERSISTENT"      }    ],    "machineType":"MACHINE_TYPE",            "networkInterfaces": [        {          "network": "GVNIC_NAME_PREFIX-net-0",          "subnetwork": "GVNIC_NAME_PREFIX-sub-0",          "accessConfigs": [            {                "type": "ONE_TO_ONE_NAT",                "name": "External IP",                "natIP": "EXTERNAL_IPV4_ADDRESS"            }          ],          "stackType": "IPV4_ONLY",          "nicType": "GVNIC",      },      {          "network": "GVNIC_NAME_PREFIX-net-1",          "subnetwork": "GVNIC_NAME_PREFIX-sub-1",          "stackType": "IPV4_ONLY",          "nicType": "GVNIC",      },      {          "network": "RDMA_NAME_PREFIX-irdma",          "subnetwork": "RDMA_NAME_PREFIX-irdma-sub",          "stackType": "IPV4_ONLY",          "nicType": "IRDMA",      }    ],,    "reservationAffinity": {        "consumeReservationType": "NO_RESERVATION"      },    "scheduling": {        "instanceTerminationAction": "DELETE",        "maxRunDuration": {          "seconds":RUN_DURATION        },        "onHostMaintenance": "TERMINATE",        "provisioningModel": "FLEX_START"      }  }}

Replace the following:

  • INSTANCE_TEMPLATE_NAME: the name of the instance template.
  • MACHINE_TYPE: the machine type to use for the instance. Specify a H4D machine type. For more information, seeH4D 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: the region where you want to create the instance template. Specify a region in which the machine type that you want to use is available. For information about regions, seeRegions and zones.
  • DISK_SIZE: the size of the boot disk in GiB.
  • GVNIC_NAME_PREFIX: the name prefix that you used when creating the standard VPC networks and subnets for the gVNIC interfaces.

    If you are using the default network, include only a single--network-interface field with thenic-type field set toGVNIC. Also, omit thenetwork andsubnetwork settings for this network interface.

  • EXTERNAL_IPV4_ADDRESS: Optional: a static external IPv4 address to use with the gVNIC network interface. You must have previouslyreserved an external IPv4 address.

    To specify an external IPv6 address for the GVNIC network interface, use the flag--external-ipv6-address instead.

  • RDMA_NAME_PREFIX: the name prefix that you used when creating the VPC network and subnet for the IRDMA network interface.

    If you are not using Cloud RDMA with your H4D instances, omit the--network-interface field for the IRDMA interface.

  • RUN_DURATION: the duration, in seconds, you want the requested instances to run. The value must be between600, which is 600 seconds (10 minutes), and604800, which is 604,800 seconds (seven days).

After you create the instance template, you canview the templateto see its ID and review its instance properties.

Create a MIG with a resize request

To create all the requested Flex-start instances at the same time, create a MIGand then create a resize request in the MIG as described in this section.

Create the MIG

To create the MIG, select one of the following options:

gcloud

Create a zonal or regional MIG as follows:

  • To create a zonal MIG, use theinstance-groups managed create command as follows.

        gcloud compute instance-groups managed createMIG_NAME \        --template=INSTANCE_TEMPLATE_URL \        --size=0 \        --default-action-on-vm-failure=do-nothing \        --zone=ZONE
  • To create a regional MIG, use theinstance-groups managed create command as follows.

        gcloud compute instance-groups managed createMIG_NAME \        --template=INSTANCE_TEMPLATE_URL \        --size=0 \        --default-action-on-vm-failure=do-nothing \        --zones=ZONE \        --target-distribution-shape=any-single-zone \        --instance-redistribution-type=none

REST

Create a zonal or regional MIG as follows:

  • To create a zonal MIG, make aPOST request to theinstanceGroupManagers.insert method as follows.
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers      {        "versions": [        {          "instanceTemplate": "INSTANCE_TEMPLATE_URL"        }        ],        "name": "MIG_NAME",        "targetSize": 0,        "instanceLifecyclePolicy": {            "defaultActionOnFailure": "DO_NOTHING"        }      }
  • To create a regional MIG, make aPOST request to theregionInstanceGroupManagers.insert method as follows.
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers      {        "versions": [          {            "instanceTemplate": "INSTANCE_TEMPLATE_URL"          }        ],        "name": "MIG_NAME",        "targetSize": 0,        "distributionPolicy": {          "targetShape": "ANY_SINGLE_ZONE",          "zones": [            {            "zone": "projects/PROJECT_ID/zones/ZONE"            }          ]        },        "updatePolicy": {          "instanceRedistributionType": "NONE"        },        "instanceLifecyclePolicy": {          "defaultActionOnFailure": "DO_NOTHING"        }      }

Create the resize request

To create the resize request in the MIG, select one of the following options:

gcloud

Create a resize request as follows:

REST

Create a resize request in a zonal or regional MIG as follows:

  • To create a resize request in a zonal MIG, make aPOST request to theinstanceGroupManagerResizeRequests.insert method as follows:
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME/resizeRequests      {        "name": "RESIZE_REQUEST_NAME",POPULATION_METHOD      }
  • To create a resize request in a regional MIG, make aPOST request to thebeta.regionInstanceGroupManagerResizeRequests.insert method as follows:
          POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME/resizeRequests      {        "name": "RESIZE_REQUEST_NAME",POPULATION_METHOD      }

Clean up

To avoid incurring charges to your Google Cloud account for the resources used in this tutorial, either delete the project that contains the resources, or keep the project and delete the individual resources.

Delete your project

Caution: Deleting a project has the following effects:
  • Everything in the project is deleted. If you used an existing project for the tasks in this document, when you delete it, you also delete any other work you've done in the project.
  • Custom project IDs are lost. When you created this project, you might have created a custom project ID that you want to use in the future. To preserve the URLs that use the project ID, such as anappspot.com URL, delete selected resources inside the project instead of deleting the whole project.

If you plan to explore multiple architectures, tutorials, or quickstarts, reusing projects can help you avoid exceeding project quota limits.

Delete a Google Cloud project:

gcloud projects deletePROJECT_ID

Delete the resources

  1. Delete resize requests in a MIG.

  2. Delete the MIG and instances.

  3. If the auto-delete state for the disks was set toFalse in the instancetemplate, then the disks are not automatically deleted when the VM instanceis deleted. You can delete the disks using one of the following methods:

    Console

    1. In the Google Cloud console, go to theDisks page.

    Go to Disks

    1. Select the rows that contain the disks that you created in thistutorial. Make sure theIn use by column is empty for each disk.

    2. ClickDelete, and thenclickDelete to confirm.

    gcloud

    Use thegcloud compute disks deletecommand.

    gcloud compute disks deleteDISK_NAME\    --projectPROJECT_ID --zoneZONE

    Replace the following:

    • DISK_NAME: the name of the disk to delete
    • PROJECT_ID: the ID of the project that containsthe disk
    • ZONE: the zone of the disk

    REST

    Use thedisks.delete methodto delete the disks.

    DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME

    Replace the following:

    • PROJECT_ID: the ID of the project that containsthe disk
    • ZONE: the zone of the disk
    • DISK_NAME: the name of the disk to delete
  4. Delete the networks.

  5. Delete the instance template.

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.