Open source

An open-source civic project. Not affiliated with the Government of Canada.

GitHub repo
Open NshipyardThe Montreal Premium

Open Nshipyard · Cloud GPU pricing

The Montreal Premium.

The same GPU costs 11.0% to 23.1% more per hour in a Canadian cloud region than in the nearest US region, on identical on-demand SKUs priced October 9, 2026. Azure's H100 80GB carries the largest premium at 23.1%; AWS's A10G carries the smallest at 11.0%.

18

identical GPU SKUs compared across Canada vs US regions, on-demand, Linux, October 9, 2026 snapshot (13 Azure, 5 AWS)

+23.1%

premium on Azure H100 80GB (NC40ads_H100_v5): $6.98/hr East US vs $8.59/hr Canada Central

+11.0%

premium on AWS A10G (g5.xlarge): $1.006/hr US East vs $1.117/hr Canada Central

1.4241

CAD per USD used for billing-currency conversion (Bank of Canada, October 8, 2026)

The premium

Same SKU, same hour, different price.

Each pair compares one identical GPU SKU in a Canadian region against the nearest US region, on-demand list price per hour, Linux, October 9, 2026. Azure: Canada Central (Toronto) vs East US (Virginia). AWS: Canada (Central, Montreal) vs US East (N. Virginia). Red is Canada; grey is the US baseline.

H100 80GB

Azure · on-demand
Canada
$8.59/hr+23.1%
US
$6.98/hr

A100 80GB

Azure · on-demand
Canada
$4.41/hr+20.0%
US
$3.67/hr

A100 40GB

AWS · on-demand
Canada
$25.25/hr+15.0%
US
$21.96/hr

A10G 24GB

AWS · on-demand
Canada
$1.12/hr+11.0%
US
$1.01/hr

“Paying the Montreal premium, or training in Virginia?”

Azure Retail Prices API, October 9, 2026 · FX: Bank of Canada, October 8, 2026

All SKUs

Every SKU in the snapshot.

Eighteen GPU SKUs across five GPU types and two providers, all on-demand, all Linux, all priced the same day. Premiums are computed as (Canada minus US) divided by US, in USD list prices; the FX conversion does not change the percentage.

GPUSKUUS $/hrCA $/hrUS C$/hrCA C$/hrPremium
A100 40GBp4d.24xlarge$21.958$25.252$31.270$35.961+15.0%
A10G 24GBg5.12xlarge$5.672$6.298$8.078$8.969+11.0%
A10G 24GBg5.2xlarge$1.212$1.346$1.726$1.916+11.0%
A10G 24GBg5.48xlarge$16.288$18.085$23.196$25.755+11.0%
A10G 24GBg5.xlarge$1.006$1.117$1.433$1.591+11.0%
A100 80GBStandard_NC24ads_A100_v4$3.673$4.408$5.231$6.277+20.0%
A100 80GBStandard_NC48ads_A100_v4$7.346$8.815$10.461$12.553+20.0%
A100 80GBStandard_NC96ads_A100_v4$14.692$17.630$20.923$25.107+20.0%
H100 80GBStandard_NC40ads_H100_v5$6.980$8.590$9.940$12.233+23.1%
H100 80GBStandard_NC80adis_H100_v5$13.960$17.180$19.880$24.466+23.1%
T4 16GBStandard_NC16as_T4_v3$1.204$1.336$1.715$1.903+11.0%
T4 16GBStandard_NC4as_T4_v3$0.526$0.584$0.749$0.832+11.0%
T4 16GBStandard_NC64as_T4_v3$4.352$4.820$6.198$6.864+10.8%
T4 16GBStandard_NC8as_T4_v3$0.752$0.834$1.071$1.188+10.9%
V100 16GBStandard_NC12s_v3$6.120$6.732$8.716$9.587+10.0%
V100 16GBStandard_NC24rs_v3$13.460$14.810$19.168$21.091+10.0%
V100 16GBStandard_NC24s_v3$12.240$13.464$17.431$19.174+10.0%
V100 16GBStandard_NC6s_v3$3.060$3.366$4.358$4.794+10.0%

Policy context

Does the federal subsidy erase the premium?

The AI Compute Access Fund, an Innovation, Science and Economic Development Canada (ISED) program under the Canadian Sovereign AI Compute Strategy, covers two-thirds of eligible Canadian cloud compute costs and one-half of non-Canadian costs, for projects of $100,000 to $5,000,000 (program guide, June 24, 2025). For a funded company, a 23.1% Canada premium becomes roughly a 59% discount against the US price after the subsidy: the company pays about one-third of the Canadian price versus the full US price. The catch is eligibility: Canadian SMEs under 500 employees doing R&D in Canada, and the non-Canadian coverage ends March 31, 2027. Unfunded teams pay the full premium.

Subsidy figures verified against the ISED program guide, October 9, 2026. Coverage rules can change; check the guide before budgeting.

What this does not show

Read this before you share the chart.

  • 1

    Rate types: every bar is on-demand list price, the price with no commitment. Committed-use and reservation prices are lower on both sides and are not in this snapshot; the premium on committed rates may differ.

  • 2

    AWS P5 (H100) instances have no true on-demand list price, so no AWS on-demand H100 bar exists. The bulk price file lists $55.04/hr for p5.48xlarge in US East, but labels it per Unused Reservation Instance Hour, not on-demand. Any honest H100 comparison on AWS must use committed or reservation rates.

  • 3

    The claimed AWS reservation-rate inversion (non-US regions cheaper than US East for H100 reservations) does not extend to Canada: 1-year reserved p5.48xlarge is $43.34/hr ($5.42/GPU-hr) in US East vs $49.85/hr ($6.23/GPU-hr) in Canada Central, a 15.0% Canada premium, matching the on-demand pattern.

  • 4

    Prices are USD list prices from the vendors' public pricing APIs. Your invoice adds tax, and Canadian customers are billed in CAD at the vendor's conversion; the CAD columns use the Bank of Canada rate of October 8, 2026 (1 USD = 1.4241 CAD), not each vendor's billing rate.

  • 5

    Regions compared are Azure Canada Central (Toronto) vs East US (Virginia), and AWS Canada (Central, Montreal) vs US East (N. Virginia), the nearest US regions. Latency, data residency, and carbon intensity differ by region and are not priced here.

  • 6

    Vintage: prices move monthly. This snapshot is October 9, 2026. Re-run the scripts in the repo for a fresh pull.

  • 7

    GCP is not in this snapshot: Google publishes per-region GPU prices behind a JavaScript region selector, and the Cloud Billing Catalog API requires an API key, so no citable Montreal figure could be verified. The methodology page documents the attempt.

Methodology

How the premium was computed, and what was left out.

  1. 1.

    Sources: the Azure Retail Prices API (prices.azure.com/api/retail/prices, keyless), queried October 9, 2026 for serviceName 'Virtual Machines' in arm regions canadacentral and eastus; and the AWS Price List Bulk API (AmazonEC2 offer files for us-east-1 and ca-central-1, downloaded October 9, 2026), parsed for Compute Instance, Shared tenancy, Linux. Raw responses are committed in data/raw/.

  2. 2.

    SKU normalization: Azure rows were filtered to type Consumption (on-demand), unitOfMeasure '1 Hour', Linux product names, meter names without Spot or Low Priority suffixes, then inner-joined on identical armSkuName across the two regions (13 SKUs matched). AWS rows were filtered to instanceType, location, tenancy Shared, operatingSystem Linux, productFamily Compute Instance, then matched on identical instanceType across the two regions (5 instance types matched). Every published figure is one of those rows.

  3. 3.

    The premium is (Canada price minus US price) divided by US price, on USD list prices. Currency conversion cannot change the percentage; CAD columns are shown because Canadian invoices land in CAD.

  4. 4.

    FX: Bank of Canada Valet, FXCADUSD 0.7022 on October 8, 2026, meaning 1 USD = 1.4241 CAD. Rate and date are stamped in the dataset.

  5. 5.

    Rate-type honesty: on-demand only. AWS P5 (H100) has no true on-demand list price (the $55.04/hr entry in the bulk file is labeled per Unused Reservation Instance Hour), so AWS on-demand H100 is excluded by rule, not by omission. The reservation-rate inversion claim was checked: 1-year reserved p5.48xlarge shows no inversion for Canada ($5.42/GPU-hr US East vs $6.23/GPU-hr Canada Central).

  6. 6.

    GCP: per-region GPU prices could not be verified. Google's published pricing pages render one region's prices behind a JavaScript selector, and the Cloud Billing Catalog API needs a key. No Montreal figure is published rather than an unverified one.

  7. 7.

    What moves: cloud GPU list prices change monthly. The snapshot is dated October 9, 2026; scripts/fetch_azure.py, scripts/fetch_aws_fast.py, and scripts/build_snapshot.py re-pull and rebuild it deterministically.

For developers

Query it from code, or from an agent.

Three consumption paths, same snapshot. REST for applications, OpenAPI for integration, MCP tools over streamable HTTP for AI agents.

Endpoints

GET/api/v1/summaryHeadline premiums, FX rate and date, snapshot vintageTry it →
GET/api/v1/pricesFull normalized price table, filterable by provider and GPUTry it →
GET/api/openapi.jsonOpenAPI 3.1 document for the REST APITry it →
POST/mcpMCP server (streamable HTTP): premium_summary, prices_list, sku_lookupTry it →

MCP server

One streamable-HTTP endpoint. Tools: premium_summary, prices_list, sku_lookup.

Connect your agent

Put this data to work inside your AI tools.

Pick your harness, copy the prompt, send it to your agent. Your agent runs the setup itself.

Copy and send this to Claude Code

Set up the The Montreal Premium MCP server so I can query it from here.
1. Run: claude mcp add --transport http gpu-premium https://gpu.canada.nshipyard.com/mcp
2. Run `claude mcp list` to confirm it connected.
3. look up the H100 premium, and show me the result.
MCP server: premium_summary, prices_list, sku_lookup

Data

Take the files.

The normalized per-region price table and the snapshot metadata, MIT licensed. Prices move monthly; check the snapshot date before citing.

/data/prices.csv

Normalized GPU price comparison: provider, GPU, SKU, rate type, regions, USD and CAD hourly prices, premium percent

Download

/data/prices.json

Same data as JSON, plus FX rate and date, vintage note, and source URLs

Download

snapshot: 2026-10-09 · FX FXCADUSD 0.7022 (2026-10-08) · 18 rows