NVIDIA GPU benchmark suite for CUDA workload automation, reporting, and comparison
Project description
nvProbe: NVIDIA GPU & CUDA Benchmark Suite
NVIDIA GPU benchmark suite for CUDA workload automation, reporting, and comparison.
nvProbe runs standardized benchmarks across your GPU fleet, captures environment details, stores results in SQLite, and generates self-contained HTML reports — helping HPC engineers and ML teams make data-driven hardware purchasing decisions.
Features
- Benchmark modules: Bandwidth, custom CUDA kernels (matmul, conv2d, attention), HPL, HPCG, MLPerf
- Slurm integration: Generate and submit sbatch scripts, run across multiple nodes/GPUs
- Environment fingerprinting: Driver version, CUDA version, GPU model, memory, PCI bus ID — captured automatically
- SQLite storage: All results persisted with full query capability
- CSV/JSON export: Raw data for programmatic access
- HTML reports: Self-contained reports with matplotlib charts, sidebar navigation, and comparison views
- YAML configs: Define test matrices (GPU models, precisions, batch sizes) declaratively
- Reproducible: Same config + same hardware = same results
Quick Start
pip install nvprobe
nvprobe setup # install cupy + HPL/HPCG + generate configs
nvprobe run --config nvprobe/configs/local.yaml --local
Or install from source
git clone https://github.com/SergioZ3R0/nvprobe.git
cd nvprobe
pip install -e .
nvprobe setup # installs nvprobe + self-contained CuPy
nvprobe run --config nvprobe/configs/local.yaml --local
Detect GPU environment
nvprobe env
Run benchmarks (dry run)
nvprobe run --config configs/default.yaml --dry-run
Run benchmarks
nvprobe run --config configs/default.yaml
Generate report
nvprobe report
Compare two runs
nvprobe compare --a results/run1 --b results/run2
Configuration
Edit configs/default.yaml to define your test matrix:
name: my-benchmark-run
description: "Comparing L40S vs B200"
gpu:
models: ["L40S", "B200"]
slurm:
enabled: true
partition: gpu
gpus_per_node: 8
precisions:
- fp32
- fp16
- int8
benchmarks:
- name: bandwidth
enabled: true
params:
sizes_mb: [1, 4, 16, 64, 256, 1024]
- name: custom
enabled: true
params:
kernels: [matmul, conv2d, attention]
Project Structure
nvprobe/
├── nvprobe/
│ ├── cli.py # CLI entry point
│ ├── config.py # YAML config loader
│ ├── runner.py # Benchmark orchestration
│ ├── slurm.py # Slurm job management
│ ├── reporter.py # HTML report generator with charts
│ ├── db.py # SQLite storage + CSV/JSON export
│ └── benchmarks/
│ ├── base.py # Base benchmark class
│ ├── bandwidth.py # Memory bandwidth tests
│ ├── custom.py # Custom CUDA kernels
│ ├── hpl.py # HPL wrapper
│ ├── hpcg.py # HPCG wrapper
│ ├── mlperf.py # MLPerf wrapper
│ └── _cuda/
│ ├── bandwidth_test.py # CUDA bandwidth implementation
│ ├── custom_kernels.py # matmul/conv2d/attention
│ └── utils.py # Shared GPU utilities
├── configs/
│ └── default.yaml # Default test configuration
├── reports/ # Generated HTML reports
├── results/ # Benchmark results (SQLite + JSON)
├── README.md
└── pyproject.toml
Roadmap
v0.1.0 — Project base ✓
- CLI with Typer (run, report, compare, env, version)
- YAML config system for test matrices
- Benchmark module framework (base class + stubs)
- Runner with nvidia-smi environment detection
- SQLite storage for results
- HTML report generator (basic)
- Default config for L40S/B200 GPUs
v0.2.0 — CUDA benchmarks ✓
- Bandwidth test (host↔device, device↔device) via cupy
- Custom CUDA kernels: matmul, conv2d, attention
- HPL/HPCG binary wrappers with Slurm script generation
- MLPerf inference/training wrapper
- Optional cupy dependency (
pip install nvprobe[cuda])
v0.3.0 — Slurm integration ✓
- sbatch script generation
- Job submission and monitoring
- Multi-GPU parallel execution
- Result collection from Slurm output
v0.4.0 — Reporting ✓
- Matplotlib charts (bandwidth, matmul, attention, GPU comparison)
- Corporate branding (sidebar, color palette, env cards)
- Comparison reports (A vs B)
- CSV/JSON auto-export alongside HTML
v0.5.0 — Reproducibility ✓
- Singularity container support (CUDA 12.4 runtime)
- Makefile for common dev operations
- Git-tracked configs and results
- Singularity container support
- Environment fingerprinting
- Git-tracked configs and results
Requirements
- Python 3.10+
- NVIDIA GPU with CUDA drivers installed
- Slurm (for multi-node execution)
nvidia-smiavailable in PATH- Singularity (optional, for containerized execution)
Container
make container-build # builds nvprobe.sif
make container-run # runs with --nv GPU passthrough
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nvprobe-0.5.44.tar.gz.
File metadata
- Download URL: nvprobe-0.5.44.tar.gz
- Upload date:
- Size: 48.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b0bfc2ed12ef5b252383d71eff5c74f94a1e65b42393f0afaf0abe5a5426cf1
|
|
| MD5 |
b0453444517d8b938240118063a017aa
|
|
| BLAKE2b-256 |
e11b12d535e3aac23df3674cac498b7d24f13be78e4f90bc2b9091323f4ae755
|
File details
Details for the file nvprobe-0.5.44-py3-none-any.whl.
File metadata
- Download URL: nvprobe-0.5.44-py3-none-any.whl
- Upload date:
- Size: 57.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87c64e59e36f5992f785de1b306a6ec6051b9296130490b922f85bdbc1829cf2
|
|
| MD5 |
5f7ec69890c4218e894f989d0944ac76
|
|
| BLAKE2b-256 |
475922a14e0dfff4e5e7d71d4e8ee5e16215d3f325bfb554c749aa2fde70bd64
|