# Microsoft Azure GPU VMs

Official pricing: https://prices.azure.com/api/retail/prices  
Category: gpu-cloud · Isolation: vm

## Pricing regimes (raw)

- **Standard_ND96isr_H100_v5, on-demand (×8 node)** (resource): $0/vCPU-h, $0/GiB-h
- **Standard_ND96isr_H100_v5, reserved (×8 node)** (resource): $0/vCPU-h, $0/GiB-h [commit]
- **Standard_ND96isr_H100_v5, reserved (×8 node)** (resource): $0/vCPU-h, $0/GiB-h [commit]
- **Standard_ND96isr_H100_v5, reserved (×8 node)** (resource): $0/vCPU-h, $0/GiB-h [commit]
- **Standard_NC24ads_A100_v4, spot (×1)** (resource): $0/vCPU-h, $0/GiB-h [spot]
- **Standard_ND96amsr_A100_v4, spot (×8 node)** (resource): $0/vCPU-h, $0/GiB-h [spot]
- **Standard_NC24ads_A100_v4, on-demand (×1)** (resource): $0/vCPU-h, $0/GiB-h
- **Standard_NC24ads_A100_v4, reserved (×1)** (resource): $0/vCPU-h, $0/GiB-h [commit]

## Features

Yes: snapshots, pause/resume, persistent disk, volumes, ≥24 h sessions, custom image (Docker or snapshot), start from your own snapshot, full VM (own kernel), Docker inside, root, SSH, public IPv4, HTTPS preview URLs, egress allowlist, open internet, static egress IP, private networking, SOC 2, HIPAA, SSO, GPU, Windows, Python, HTTP method/path egress rules, EU data residency, snapshots on demand, gVisor or VM (no shared kernel), inbound access rules, firewall inside (nftables), extra volumes, shared volumes

No: memory snapshots, fork/clone, idle auto-stop, your own Docker/OCI image, nested virtualization, browser, desktop GUI, computer-use API, browser + desktop control, anti-bot stealth, CAPTCHA solving, residential IPs, preinstalled agents, self-hosting, BYOC, open source, arm64, macOS, Node.js, wake on request, live resize, live fork (no pause), memory fork, MCP server, automatic snapshots, agent harness API, hosted agent API (their own agent), secret proxy, secret proxy for any API

Unknown: everything else. Evidence (source + quote) per feature: https://battleships.dev/data/providers/azure-gpu.json → feature_evidence

## Caveats

- Azure Retail Prices API eastus Linux list. Windows excluded. Spot snapshot not guaranteed. Reservations API retailPrice is TOTAL commitment despite 1 Hour unit label, not hourly! VM CPU/RAM bundled; managed disks/network/IP extra.
- Any null count, CPU/RAM, billing increment or minimum is unverified, not unlimited/free.
- This is GPU-product research, not a claim that every feature of the entire vendor documentation was audited. Unverified features are null.
- GPU multi-count bundles, variant/region selection and fractional slices require a SKU-aware estimator; unsupported rows remain unpriced in strict cards.
- Modes with gpu=null are intentionally excluded, not free GPU modes. Never substitute 0 for a null rate. Flags alt indicate DIY/ML infrastructure, not the same thing as managed untrusted-code sandboxes.
- Unknown fee, storage or bandwidth means full monthly total may be unavailable. Rates exclude taxes.
- Added 2026-09-28 (missing-providers audit): single-GPU H100 via Standard_NC40ads_H100_v5 (H100 NVL 94 GB): on-demand eastus $6.98/h, northeurope $8.376/h (cheapest EU checked), Spot eastus $1.289904/h (snapshot), reserved 1y $5.23505/h, 3y $3.839/h. Before this only 8-GPU ND H100 v5 nodes were carded.
- 2026-09-28 (fix batch): 8-GPU ND96 nodes now priced per GPU (node price / 8, Azure Retail Prices API eastus) with gpu_min_count 8; reserved regimes flagged commit (self-serve reservations, not sales) with hourly = term total / term hours. alt removed from all GPU instances.
- Azure free account gives $200 credit for 30 days, but Free Trial subscriptions cannot raise quota or use Spot, so it does not realistically cover A100/H100/ND nodes; deliberately not modelled as one_time_credit on this GPU card.

## How this provider charges

As of 2026-09-28. NC/ND Linux GPU VMs.

Azure Retail Prices API eastus Linux list. Windows excluded. Spot snapshot not guaranteed. Reservations API retailPrice is TOTAL commitment despite 1 Hour unit label, not hourly! VM CPU/RAM bundled; managed disks/network/IP extra.

| Regime | When applicable | Billing | Numbers ($/GPU-hour unless slice) | Source |
|---|---|---|---|---|
| on-demand  | Standard_ND96isr_H100_v5 ; count [8]; eastus; Linux | per-second; min unknowns | 12.29; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| reserved  | Standard_ND96isr_H100_v5 ; count [8]; eastus; Linux | per-second; min unknowns | 7.8655964612; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| reserved  | Standard_ND96isr_H100_v5 ; count [8]; eastus; Linux | per-second; min unknowns | 5.3953101218; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| reserved  | Standard_ND96isr_H100_v5 ; count [8]; eastus; Linux | per-second; min unknowns | 4.9159988584; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| spot  | Standard_NC24ads_A100_v4 ; count [1]; eastus; Linux | per-second; min unknowns | 0.67877; dynamic-snapshot; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| spot  | Standard_ND96amsr_A100_v4 ; count [8]; eastus; Linux | per-second; min unknowns | 1.055194; dynamic-snapshot; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| on-demand  | Standard_NC24ads_A100_v4 ; count [1]; eastus; Linux | per-second; min unknowns | 3.673; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| reserved  | Standard_NC24ads_A100_v4 ; count [1]; eastus; Linux | per-second; min unknowns | 2.4010273973; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| reserved  | Standard_NC24ads_A100_v4 ; count [1]; eastus; Linux | per-second; min unknowns | 1.3630517504; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| spot  | Standard_ND96isr_H100_v5 ; count [8]; eastus; Linux | per-second; min unknowns | 2.271192; dynamic-snapshot; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| on-demand  | Standard_ND96amsr_A100_v4 ; count [8]; eastus; Linux | per-second; min unknowns | 4.09625; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| reserved  | Standard_ND96amsr_A100_v4 ; count [8]; eastus; Linux | per-second; min unknowns | 2.6216038813; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| reserved  | Standard_ND96amsr_A100_v4 ; count [8]; eastus; Linux | per-second; min unknowns | 1.8023496956; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| spot  | Standard_NC4as_T4_v3 ; count [1]; eastus; Linux | per-second; min unknowns | 0.149174; dynamic-snapshot; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| on-demand  | Standard_NC4as_T4_v3 ; count [1]; eastus; Linux | per-second; min unknowns | 0.526; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| reserved  | Standard_NC4as_T4_v3 ; count [1]; eastus; Linux | per-second; min unknowns | 0.3092465753; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |
| reserved  | Standard_NC4as_T4_v3 ; count [1]; eastus; Linux | per-second; min unknowns | 0.1977929985; list; per_gpu_hour | [source](https://prices.azure.com/api/retail/prices?$filter=serviceName%20eq%20%27Virtual%20Machines%27%20and%20armRegionName%20eq%20%27eastus%27) |

## Gotchas
- Azure Retail Prices API eastus Linux list. Windows excluded. Spot snapshot not guaranteed. Reservations API retailPrice is TOTAL commitment despite 1 Hour unit label, not hourly! VM CPU/RAM bundled; managed disks/network/IP extra.
- Any null count, CPU/RAM, billing increment or minimum is unverified, not unlimited/free.
- This is GPU-product research, not a claim that every feature of the entire vendor documentation was audited. Unverified features are null.
- GPU multi-count bundles, variant/region selection and fractional slices require a SKU-aware estimator; unsupported rows remain unpriced in strict cards.

## Worked example (required protocol workload)
4 vCPU / 8 GiB, 50 concurrent × 8 hours/day × 22 days = **8,800 instance-hours/month**. 30% CPU utilization does not reduce allocated GPU uptime. 50 GiB snapshots and 100 GiB egress are additional. The requested CPU-only workload has no GPU type/count, so its full GPU-provider total is **null**, not a fictitious CPU equivalent.

Explicit GPU sensitivity example: add **1 × A100-80GB** to each of those 50 workers at the Standard_NC24ads_A100_v4 quoted shape. Compute component = 8,800 × $3.673 = **$32,322.4000**. CPU/RAM are included in that SKU (not independently resizable).
This is compute-only, before platform fees, storage, egress, setup, minimum rounding, cold-start/idle tails and capacity quotas. 50 concurrent GPUs are not promised by a unit rate.

## Evidence scope
Sources read are listed in the provider/features JSON. Raw pricing pages, relevant docs and API payloads are retained under `../raw/`. All unknown feature toggles remain null.

## Added 2026-09-28: single H100 (Standard_NC40ads_H100_v5)

1x NVIDIA H100 NVL 94 GB (PCIe), 40 vCPU (AMD EPYC Genoa, no SMT), 320 GiB RAM, 3,576 GiB temp NVMe. Source: Retail Prices API Linux rows (`raw/azure-vm-linux-retail-2026-09-28.json`) and the MS NCads H100 v5 size doc.

| Regime | When applicable | Billing | $/h (whole VM = per GPU) | Source |
|---|---|---|---|---|
| on-demand | eastus | per full minute | 6.98 | [API](https://prices.azure.com/api/retail/prices?$filter=armRegionName eq 'eastus' and armSkuName eq 'Standard_NC40ads_H100_v5') |
| on-demand | northeurope, cheapest EU checked (swedencentral 9.074, westeurope 9.08) | per full minute | 8.376 | same API, EU regions |
| spot | eastus, snapshot, 30 s eviction | per full minute | 1.289904 | same |
| reserved 1y | eastus, always-on | every hour of term | 5.23505 | same (total / 8,760) |
| reserved 3y | eastus, always-on | every hour of term | 3.839 | same (total / 26,280) |

GPU sensitivity: 50 workers × 176 h with 1x H100 NVL each = 8,800 × $6.98 = **$61424.00**/month compute on-demand (eastus), before disks, IPv4, egress.
