NVSonar
GPU monitoring tools show utilization percentages, but this can be misleading. A GPU reporting 100% utilization may actually be computing useful work, or wastefully stalled waiting on memory transfers, thermal throttling, or power limits. NVSonar analyzes real-time patterns from NVML metrics to identify what's actually limiting your GPU performance.
Features
- Diagnostics: bottleneck classification (compute, memory, power, thermal, data-starved), temporal pattern detection (clock oscillation, temperature trends, utilization dips, memory leaks)
- Multi-GPU: outlier detection via Z-scores, flags the GPU slowing down distributed training
- Health scoring: 0-100 per GPU with A-F grades, actionable recommendations with specific commands
- Benchmarks: memory bandwidth, compute throughput, PCIe speed vs theoretical specs
- History: tracks GPU health over time, detects degradation trends
- Python API: session monitoring during training (
nvsonar.start(),nvsonar.stop()) - Output: terminal report, JSON, CSV
- Prometheus exporter: scrape bottleneck classification + health score from Grafana (
nvsonar exporter)
Requirements
- Python 3.10+
- NVIDIA GPU with driver installed
- Linux
- CUDA toolkit (only for
nvsonar benchmark, not required for other commands)
Installation and Usage
pip install nvsonar
nvsonar # interactive TUI
nvsonar report # one-shot diagnostic
nvsonar report --plain # plain text without colors
nvsonar report --json # structured output for scripts/LLMs
nvsonar report --csv # CSV output for spreadsheets
nvsonar report --gpu 0 # single GPU
nvsonar report --gpu 0,1,2 # subset of GPUs
nvsonar benchmark # GPU performance benchmarks
nvsonar history # health trends over time
nvsonar exporter # Prometheus exporter on :9100/metrics
Prometheus + Grafana
nvsonar exporter exposes Prometheus metrics including bottleneck classification, throttle reason, and the NVSonar health score — the things DCGM's exporter doesn't surface. Add it to your prometheus.yml:
scrape_configs:
- job_name: nvsonar
static_configs:
- targets: ['gpu-host:9100']
Useful PromQL:
sum by (type) (nvsonar_gpu_bottleneck) # bottleneck distribution across the fleet
avg_over_time(nvsonar_gpu_health_score[1h]) # rolling health average
nvsonar_gpu_throttle_active{severity="critical"} # active critical throttle reasons
A ready-made Grafana dashboard is shipped at dashboards/nvsonar.json — import it in Grafana (+ → Import → Upload JSON file) and pick your Prometheus datasource. Ten panels: health score, bottleneck distribution, temperature with thermal thresholds, power draw vs limit, compute utilization, VRAM usage, active throttle reasons, ECC error rate, and exporter self-monitoring.
Documentation
Tested on
- T4 (Turing)
- A30 (Ampere)
- GB10 Spark (Grace + Blackwell)
License
Apache License 2.0
Author
Metadata
Release files for nvsonar 2.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nvsonar-2.4.0.tar.gz | 51.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nvsonar-2.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 105.5 kB
Release files / nvsonar-2.4.0.tar.gz
| Download URL | nvsonar-2.4.0.tar.gz |
|---|---|
| Size | 51.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
77eefac1b5c965fbdc962e90eec65573add66ee20f1a183f728059e6b785ba9b
|
|
BLAKE2b-256 checksum How to use checksums |
deea0878b9caf67d5546c0a790f5591ba01c3a05fe59b811071febe872473ee2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 14, 2026.
Transparency logRelease files / nvsonar-2.4.0-py3-none-any.whl
| Download URL | nvsonar-2.4.0-py3-none-any.whl |
|---|---|
| Size | 54.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1bc5b2ea49862198b185812ae4eac7530e30b0a2af4f65d562eaf580ed97457e
|
|
BLAKE2b-256 checksum How to use checksums |
5800c15e970483013bd864d3da521f561d82f73582b42cc544cae871b380aad0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 14, 2026.
Transparency log