afhubbard/gpu-prices
GPU Price Tracker A continuously-updated dataset of cross-cloud GPU rental pricing covering 13 public cloud providers (AWS, GCP, Azure, Lambda Labs, RunPod, Vast.ai, DataCrunch, Cudo Compute, TensorDock, Vultr, Oracle, Nebius, CloudRift): 3M+ listing observations, 70+ GPU types, collected twice daily since January 2026 by scraping provider pricing surfaces via the gpuhunt library and published as Hive-partitioned Parquet files (prices/dt=YYYY-MM-DD/*.parquet). The dataset is… See the full description on the dataset page: https://huggingface.co/datasets/afhubbard/gpu-prices.
GPU Price Tracker
A continuously-updated dataset of cross-cloud GPU rental pricing covering 13 public cloud providers (AWS, GCP, Azure, Lambda Labs, RunPod, Vast.ai, DataCrunch, Cudo Compute, TensorDock, Vultr, Oracle, Nebius, CloudRift): 3M+ listing observations, 70+ GPU types, collected twice daily since January 2026 by scraping provider pricing surfaces via the `gpuhunt` library and published as Hive-partitioned Parquet files (prices/dt=YYYY-MM-DD/*.parquet).
The dataset is intended for:
- Researchers studying cloud-market microstructure, GPU price dynamics, and the spot–on-demand spread as a utilization proxy.
- Practitioners comparing GPU rental costs across providers for capacity planning, procurement, and ML-training cost estimation.
Explore it interactively at the hosted dashboard: <https://gpu-price-trends.streamlit.app/>.
Quick start
from datasets import load_dataset
ds = load_dataset("afhubbard/gpu-prices", split="train")
print(ds[0])
# {'timestamp': '2026-05-07T09:17:00Z', 'provider': 'aws',
# 'instance_type': 'p4d.24xlarge', 'gpu_type': 'A100', 'gpu_count': 8,
# 'gpu_memory_gb': 40, 'vcpus': 96, 'ram_gb': 1152.0,
# 'region': 'us-east-1', 'price_per_hour': 32.7726, 'is_spot': False,
# 'available': True, 'availability_zone': None, 'quality': 'ok',
# 'region_canonical': 'us-east-virginia', 'country': 'US',
# 'region_lat': 38.13, 'region_lon': -78.45,
# 'region_group': 'North America East'}Or with DuckDB directly (no datasets install required):
import duckdb
con = duckdb.connect()
con.sql("INSTALL httpfs; LOAD httpfs;")
con.sql("""
SELECT gpu_type,
AVG(price_per_hour / gpu_count) AS avg_price_per_gpu_hour,
COUNT(*) AS listings
FROM read_parquet('hf://datasets/afhubbard/gpu-prices/prices/**/*.parquet',
hive_partitioning = true)
WHERE timestamp = (SELECT MAX(timestamp) FROM read_parquet(
'hf://datasets/afhubbard/gpu-prices/prices/**/*.parquet',
hive_partitioning = true))
AND quality = 'ok'
GROUP BY gpu_type
ORDER BY avg_price_per_gpu_hour
LIMIT 10
""").show()Schema
Compute price_per_gpu_hour = price_per_hour / gpu_count for fair cross-SKU comparison.
The quality and region columns were added in schema v1.1 (July 2026); all earlier snapshot files were upgraded in place, so every file in the tree has the same schema. Each Parquet file also embeds provenance metadata (schema_version, row_count, quality_summary, and backfilled = true on upgraded files).
Collection cadence
Twice daily (~09:00 and 21:00 UTC) via a GitHub Actions cron. Files are append-only — each run produces a new immutable Parquet file under prices/dt=<UTC date>/.
Limitations (read before modeling)
- Region canonicalization is best-effort —
region_canonicaland friends come from a hand-maintained lookup and are NULL for raw regions not yet mapped; fall back withCOALESCE(region_canonical, region). - Spot semantics differ by provider (AWS auction vs. Vast.ai P2P, etc.). See the methodology document.
- No customer telemetry — the data is supply/listing prices only.
- Noisy rows are tagged, not dropped — historical snapshots contain
cpu_onlyandunknown_gpurows. Filter toquality = 'ok'for most analyses. - 12-hour cadence — too coarse for intraday auction analyses.
Full methodology, provider-by-provider notes, and a list of analytical questions the data does and does not support: methodology.md and MODELING_GPU_USAGE_TRENDS.md.
License
CC BY 4.0. Suggested citation:
@misc{hubbard2026gpuprices,
author = {Alex Hubbard},
title = {GPU Price Tracker},
year = {2026},
howpublished = {\url{https://github.com/alex-hubbard/gpu_price_tracker}},
note = {Dataset and software, MIT (code) / CC BY 4.0 (data)}
}Source code
Collection pipeline, dashboard, and migration scripts live at <https://github.com/alex-hubbard/gpupricetracker>.
