Attribute based VM selection for Azure Compute Fleet (Preview)
Important
Attribute based VM selection is currently in preview. Previews are made available to you on the condition that you agree to the supplemental terms of use. Some aspects of this feature may change prior to general availability (GA).
The attribute based virtual machine (VM) selection feature enables you to configure your instance requirements as a set of VM attributes, such as memory, vCPU, and storage. These requirements are matched with all suitable Azure VM sizes, simplifying the creation and maintenance of VM configurations. This feature also allows you to seamlessly utilize newer VM generations as they become available. You also gain access to a wider range of capacity through Azure Spot Virtual Machines. The Compute Fleet service selects and launches VMs that match the specified attributes, eliminating the need to manually choose VM sizes.
Attribute based VM selection is ideal for scenarios such as stateless web services, large-scale batch processing, big data clusters, or continuous integration pipelines. Workloads like financial risk modeling, log processing, and image rendering can take advantage of the ability to run hundreds of thousands of concurrent cores or instances. When leveraging Spot Virtual Machines, instead of specifying numerous VM sizes and types individually, a simple attribute configuration can now encompass all relevant options, including new ones as they are released.
Prerequisites
To use attribute based VM selection, you must sign-up for Azure Compute Fleet preview features. After you complete the sign-up form and are approved, you will be contacted with next steps and onboarding details.
Benefits
- Optimal flexibility for Spot VMs: Compute Fleet offer optimal flexibility when deploying Spot Virtual Machines by selecting from a broad range of VM sizes. This process aligns with best practices for Spot usage by ensuring flexibility in VM size selection, which improves the likelihood of Azure Spot VMs meeting and allocating the required compute capacity.
- Simplified VM type selection: With the vast array of VM sizes available, finding the best match for your workload can be a complex task. By specifying VM attributes, Azure Virtual Machine Scale Sets can automatically select the VM sizes that fulfill your workload’s requirements. This automation simplifies the process and ensures the right resources are chosen.
- Automatic adoption of new VM sizes: Azure Virtual Machine Scale Sets can automatically incorporate newer generation VM sizes as they become available. When these new VM sizes meet your specified requirements and align with your chosen allocation strategies, they are seamlessly used by your scale set, ensuring your deployment benefits from the latest advancements without manual updates.
Process
How does attribute based VM selection work? The process involves two main steps: VM type determination, followed by allocation strategy application.
- VM type determination: Attribute based selection generates a list of VM types based on specified attributes, chosen Azure regions, and Availability Zones.
- Allocation strategy application: The Compute Fleet applies the selected allocation strategy to the generated list of VMs.
For Azure Spot VMs, attribute based selection supports both capacity-optimized and lowest-price allocation strategies. For Standard VMs, attribute based selection supports the lowest-price allocation strategy. The Compute Fleet resolves attribute configurations into a list of suitable VM types and initially launches the lowest-priced VM to meet the On-Demand portion of the capacity request, proceeding to the next lowest-priced VM if necessary.
The attribute based selection feature enables more flexible VM type configurations, eliminating the need for extensive instance-type lists. This way, you automatically leverage newer VM generations when they are introduced in your selected Azure region. Additionally, attribute based selection enhances the ability to access more capacity through Spot requests efficiently.
With attribute based selection, managing VM size configurations becomes easier and more scalable, ensuring that your workloads run smoothly with optimized cost and performance.
Supported VM attributes
The following list of VM attributes are supported and provide examples of configurations.
vCpuCount
- Required
- Must be specified if
VMAttributes
are specified - The range of
vCpuCount
specified from min to max - Either
min(uint)
ormax(uint)
is required if specified
"vCpuCount": {
"value": {
"min": 2,
"max": 24
}
}
memoryInGiB
- Required
- Must be specified if
VMAttributes
are specified - The range of
memoryInGiB
specified from min to max - Either
min(double)
ormax(double)
is required if specified
"memoryInGiB": {
"value": {
"min": 0,
"max": 1024
}
}
memoryInGiBPerVCpu
- Optional
- The range of
memoryInGiBPerVCpu
specified from min to max - Either
min(double)
ormax(double)
is required if specified
"memoryInGiBPerVCpu": {
"value": {
"min": 0,
"max": 8
}
}
localStorageSupport
- Optional
- Specifies whether the VM size supporting local storage should be used to build a Compute Fleet or not
- Possible values:
- Excluded - Don't include VM sizes that support local storage
- Required - Only include VM sizes that support local storage
- Included - Include VM sizes that support and don't support local storage, is the default if
localStorageSupport
isn't specified
"localStorageSupport": "Included"
localStorageInGiB
- Optional
- The range of
localStorageInGiB
specified from min to max - Either
min(double)
ormax(double)
is required if specified localStorageSupport
should be set to Included or Required to use this VM attribute- If
localStorageSupport
is set to Excluded, this VM attribute can't be used
"localStorageInGiB": {
"value": {
"min": 0,
"max": 100
}
}
localStorageDiskTypes
- Optional
- The
localStorageDiskTypes
is specified as a list - Valid values are SSD and HDD
localStorageSupport
should be set to Included or Required to use this VM attribute- If
localStorageSupport
is set to Excluded, this VM attribute can't be used - The default for
localStorageDiskTypes
, if not specified, is ANY of the valid values
"localStorageDiskTypes": {
"value": [
"SSD",
"HDD"
]
}
dataDiskCount
- Optional
- The range of
dataDiskCount
specified frommin
tomax
- Either
min(uint)
ormax(uint)
is required if specified
"dataDiskCount": {
"value": {
"min": 0,
"max": 10
}
}
networkInterfaceCount
- Optional
- The range of
networkInterfaceCount
specified frommin
tomax
- Either
min(uint)
ormax(uint)
is required if specified
"networkInterfaceCount": {
"value": {
"min": 0,
"max": 10
}
}
networkBandwidthInMbps
- Optional
- The range of
networkBandwidthInMbps
specified frommin
tomax
- Either
min(double)
ormax(double)
is required if specified
"networkBandwidthInMbps": {
"value": {
"min": 0,
"max": 500
}
}
rdmaSupport
- Optional
- Specifies whether the VM size supporting Remote Direct Memory Access (RDMA) should be used to build the Compute Fleet or not
- Possible values:
- Excluded - Don't include VM sizes that support RDMA, is the default if
rdmaSupport
isn't specified - Required - Only include VM sizes that support RDMA
- Included - Include VM sizes that support and don't support RDMA
- Excluded - Don't include VM sizes that support RDMA, is the default if
"rdmaSupport": "Included"
rdmaNetworkInterfaceCount
- Optional
- The range of
rdmaNetworkInterfaceCount
specified frommin
tomax
- Either
min(uint)
ormax(uint)
is required if specified rdmaSupport
should be set to Included or Required to use this VM attribute- If
rdmaSupport
is set to Excluded, this VM attribute can't be used
"rdmaNetworkInterfaceCount": {
"value": {
"min": 0,
"max": 10
}
}
acceleratorSupport
- Optional
- Specifies whether the VM size supporting accelerator should be used to build a Compute Fleet or not
- Possible values:
- Excluded - Don't include VM sizes that support accelerator, is the default if
acceleratorSupport
isn't specified - Required - Only include VM sizes that support accelerator
- Included - Include VM sizes that support and don't support accelerator
- Excluded - Don't include VM sizes that support accelerator, is the default if
"acceleratorSupport": "Required"
acceleratorManufacturers
- Optional
- The
acceleratorManufacturers
is specified as a list - Valid values are AMD, Nvidia, and Xilinx
acceleratorSupport
should be set to Included or Required to use this VM attribute- If
acceleratorSupport
is set to Excluded, this VM attribute can't be used - The default for
acceleratorManufacturers
, if not specified, is ANY of the valid values
"acceleratorManufacturers": {
"value": {
"Nvidia",
"Xilinx"
}
}
acceleratorCount
- Optional
- The range of
acceleratorCount
is specified frommin
tomax
- Either
min(uint)
ormax(uint)
is required if specified acceleratorSupport
should be set to Included or Required to use this VM attribute- If
acceleratorSupport
is set to Excluded, this VM attribute can't be used
"acceleratorCount": {
"value": {
"min": 0,
"max": 10
}
}
acceleratorTypes
- Optional
- The
acceleratorTypes
is specified as a list - Valid values are GPU and FPGA
acceleratorSupport
should be set to Included or Required to use this VM attribute- If
acceleratorSupport
is set to Excluded, this VM attribute can't be used - The default for
acceleratorTypes
, if not specified, is ANY of the valid values
"acceleratorTypes": {
"value": {
"GPU",
"FPGA"
}
}
vmCategories
- Optional
vmCategories
is specified as a list- Valid values are:
- GeneralPurpose
- ComputeOptimized
- MemoryOptimized
- StorageOptimized
- GpuAccelerated
- FpgaAccelerated
- HighPerformanceCompute
- The default for
vmCategories
, if not specified, is GeneralPurpose
"vmCategories": {
"value": {
"GeneralPurpose",
"ComputeOptimized"
}
}
architectureTypes
- Optional
architectureTypes
is specified as a list- Valid values are X64 and Arm64
- The default for
architectureTypes
, if not specified, is "ANY" of the valid values
"architectureTypes": {
"value": {
"Arm64",
"x64"
}
}
cpuManufacturers
- Optional
cpuManufacturers
is specified as a list- Valid values are Intel, AMD, Microsoft, and Ampere
- The default for
cpuManufacturers
, if not specified, is "ANY" of the valid values
"cpuManufacturers": {
"value": {
"Microsoft",
"Intel"
}
}
burstableSupport
- Optional
- Specifies whether the VM size supporting burstable capability should be used to build a Compute Fleet or not
- Possible values:
- Excluded - Don't include VM sizes that have burstable capability, is the default if
acceleratorSupport
isn't specified - Required - Only include VM sizes that have burstable capability
- Included - Include VM sizes that support and don't support burstable capability
- Excluded - Don't include VM sizes that have burstable capability, is the default if
"burstableSupport": "Excluded"
excludedVMSizes
- Optional
- Specifies which VM sizes should be excluded while building a Compute Fleet
- All
excludedVMSizes
will be ignored, even if they match the VM attributes - When
excludedVMSizes
VM attribute is specified,VMSizesProfile
can't be specified and vice-versa - Limit is 100 VM sizes
"excludedVMSizes": {
"value": {
"Standard_F1",
"Standard_F2"
}
}
VMSizesProfile
- Optional
- Specifies which VM sizes should be excluded while building a Compute Fleet
- All other VM sizes will be ignored, even if they match the VM attributes
- When
VMSizesProfile
is specified,excludedVMSizes
can't be specified and vice-versa - Limit is 100 VM sizes
"VMSizesProfile": {
"value": {
{"name": "Standard_F1"},
{"name": "Standard_F2"}
}
}