Skip to main content
  1. Blog/

Find Alternative Azure VM SKUs with azqr

·681 words·4 mins·
Carlos Mendible
Author
Carlos Mendible

Running an Azure VM on an older SKU generation, hitting quota limits, or simply looking for an alternative size? The new alternative-vm-sku command in Azure Quick Review (azqr) makes it trivial to discover compatible alternatives for any Azure VM SKU ranked by a multi-factor compatibility score.

Whether you’re modernizing workloads, responding to quota constraints, or optimizing costs, having a ranked list of compatible SKU alternatives removes the guesswork from VM size selection.

Prerequisites
#

Before you begin, ensure you have:

  • Latest version of azqr installed
  • Basic familiarity with Azure VM SKU naming conventions

Install the Latest azqr
#

bash -c "$(curl -fsSL https://raw.githubusercontent.com/azure/azqr/main/scripts/install.sh)"

The alternative-vm-sku Command
#

The alternative-vm-sku command searches azqr’s embedded catalog of Azure VM SKUs and returns the top N alternatives for any given SKU, sorted by compatibility score. The result is a JSON document containing the source SKU details and the ranked recommendations.

azqr alternative-vm-sku --sku <SKU-name> [--top <N>]
FlagShortDefaultDescription
--sku-s(required)Azure VM SKU name to find alternatives for
--top-n3Number of alternative SKUs to return

How the Compatibility Score Works
#

Each candidate SKU is evaluated against the target using a weighted scoring algorithm that produces a score between 0.0 and 1.0 (higher is better). Candidates scoring below 0.1 are excluded.

FactorWeightDescription
vCPU count match0.30Ratio of the smaller to the larger vCPU count
Memory match0.25Ratio of the smaller to the larger memory (GB)
Same base model series0.15Bonus when candidate shares the same SKU series, ignoring the _vN suffix (e.g. Standard_D16s)
Same VM family0.10Bonus when candidate belongs to the same Azure VM family
Version proximity0.05Full score for same/newer generation; −0.02 per generation behind, floored at 0.0
GPU match0.15GPU-enabled SKUs: proportional GPU count match. Non-GPU SKUs: flat 0.10 bonus
Data disk match0.05Ratio of the smaller to the larger max data disk count
Accelerated networking0.05Full score when candidate supports accelerated networking (or target doesn’t require it)

The total is capped at 1.0. A score of 1.0 would represent a perfect match across all dimensions.

Examples
#

General-Purpose Compute Standard_D4s_v5
#

azqr alternative-vm-sku --sku Standard_D4s_v5 --top 3
{
  "source": {
    "name": "Standard_D4s_v5",
    "family": "standardDSv5Family",
    "vcpus": 4,
    "memoryGb": 16,
    "gpuCount": 0,
    "maxDataDisks": 8,
    "acceleratedNetworking": true
  },
  "alternatives": [
    {
      "sku": {
        "name": "Standard_D4s_v6",
        "family": "StandardDsv6Family",
        "vcpus": 4,
        "memoryGb": 16,
        "gpuCount": 0,
        "maxDataDisks": 12,
        "acceleratedNetworking": true
      },
      "compatibilityScore": 0.933
    },
    {
      "sku": {
        "name": "Standard_D4s_v7",
        "family": "StandardDsv7Family",
        "vcpus": 4,
        "memoryGb": 16,
        "gpuCount": 0,
        "maxDataDisks": 12,
        "acceleratedNetworking": true
      },
      "compatibilityScore": 0.933
    },
    {
      "sku": {
        "name": "Standard_D4s_v4",
        "family": "standardDSv4Family",
        "vcpus": 4,
        "memoryGb": 16,
        "gpuCount": 0,
        "maxDataDisks": 8,
        "acceleratedNetworking": true
      },
      "compatibilityScore": 0.930
    }
  ]
}

The top recommendations for a Standard_D4s_v5 are the newer v6 and v7 siblings identical vCPUs, memory, and networking, just a newer generation. The slightly lower-scored v4 is the previous generation of the same series.

GPU Workloads Standard_NC6s_v3
#

azqr alternative-vm-sku --sku Standard_NC6s_v3 --top 3
{
  "source": {
    "name": "Standard_NC6s_v3",
    "family": "standardNCSv3Family",
    "vcpus": 6,
    "memoryGb": 112,
    "gpuCount": 1,
    "maxDataDisks": 12,
    "acceleratedNetworking": true
  },
  "alternatives": [
    {
      "sku": {
        "name": "Standard_NV6s_v2",
        "family": "standardNVSv2Family",
        "vcpus": 6,
        "memoryGb": 112,
        "gpuCount": 1,
        "maxDataDisks": 12,
        "acceleratedNetworking": false
      },
      "compatibilityScore": 0.780
    },
    {
      "sku": {
        "name": "Standard_NC8ads_A10_v4",
        "family": "StandardNCADSA10v4Family",
        "vcpus": 8,
        "memoryGb": 100,
        "gpuCount": 1,
        "maxDataDisks": 8,
        "acceleratedNetworking": true
      },
      "compatibilityScore": 0.732
    },
    {
      "sku": {
        "name": "Standard_NV12s_v3",
        "family": "standardNVSv3Family",
        "vcpus": 12,
        "memoryGb": 112,
        "gpuCount": 1,
        "maxDataDisks": 12,
        "acceleratedNetworking": true
      },
      "compatibilityScore": 0.700
    }
  ]
}

For the GPU-enabled Standard_NC6s_v3, the algorithm correctly prioritizes GPU count as a key criterion, surfacing other single-GPU SKUs rather than general-purpose VMs.

Practical Use Cases
#

  • Quota exhaustion: A specific SKU family is at quota in your target region quickly find the closest alternative.
  • SKU retirement: Microsoft is retiring a VM series identify the best upgrade path.
  • Multi-region deployments: Not all SKUs are available in every region find a compatible alternative available in your target region.

Hope it helps!

References: