‹ Back to Benchmarks

GPU HIGGS dense training: OpenNN vs PyTorch vs TensorFlow

OpenNN trains the canonical HIGGS dense classifier at 6.76 million samples/s in fp32 and 11.35 million samples/s in bf16 on an NVIDIA GeForce RTX 4080, leading both PyTorch and TensorFlow in the same five-epoch workload.

The benchmark records one representative run per engine and precision. Held-out accuracy, log loss, and ROC AUC are reported alongside throughput; no hard common quality threshold was configured for this run.

Contents

Introduction

HIGGS is a large tabular binary-classification dataset from high-energy physics. Its 10.5-million-row training split and 28 numerical features make it useful for measuring sustained dense-network throughput rather than a short synthetic kernel.

This GPU training benchmark uses the canonical 28-1024-1024-1 ReLU classifier with Adam, batch 7,000, five epochs, and fp32 and bf16 paths in OpenNN, PyTorch, and TensorFlow.

Benchmark application

Item Configuration
Dataset HIGGS
Training rows 10,500,000
Test rows used by runner 497,000
Inputs 28 normalized numerical features
Network 28 -> 1024 ReLU -> 1024 ReLU -> 1
Parameters 1,080,321
Loss Binary cross-entropy
Optimizer Adam
Batch 7,000
Epochs 5
Precisions fp32 and bf16
Metric Training samples per second; higher is better

Reference computer

Component Value
CPU Intel Core i9-12900K
GPU NVIDIA GeForce RTX 4080, 16 GB
Operating system Linux 6.17 x86_64
NVIDIA driver 595.71.05
Python 3.12.3
PyTorch 2.13.0+cu130
PyTorch CUDA / cuDNN CUDA 13.0 / cuDNN 9.24
TensorFlow 2.21.0
OpenNN 9.0.0
Git state Clean

Methodology

The three engines read the same prepared and normalized HIGGS split. Training throughput is calculated from 10.5 million training rows and the median epoch time produced inside each engine.

  • OpenNN uses GPU-resident data and its CUDA graph training path.
  • PyTorch uses its optimized dense path, with bf16 autocast in the bf16 cell.
  • TensorFlow uses compiled graph execution and mixed bf16 in the bf16 cell.
  • All models use the same layer widths, activation, parameter count, batch, and epoch count.
  • Testing happens after training and is not part of the throughput numerator.
  • One run is stored per cell, so the figures should be read as a controlled snapshot.

Results

HIGGS dense training throughput
Higher is better
RTX 4080 · 28-1024-1024-1 · batch 7,000
fp32
OpenNN
6.76M samples/s
PyTorch
3.18M samples/s
TensorFlow
3.03M samples/s
bf16
OpenNN
11.35M samples/s
PyTorch
8.47M samples/s
TensorFlow
6.74M samples/s
One controlled run per framework and cell; see the methodology and caveats below.
Precision OpenNN PyTorch TensorFlow OpenNN / PyTorch OpenNN / TensorFlow
fp32 6,757,399 samples/s 3,183,481 samples/s 3,025,572 samples/s 2.123x 2.233x
bf16 11,350,935 samples/s 8,468,435 samples/s 6,741,006 samples/s 1.340x 1.684x
Precision OpenNN epoch PyTorch epoch TensorFlow epoch
fp32 1.554 s 3.298 s 3.470 s
bf16 0.925 s 1.240 s 1.558 s

Held-out quality

Throughput is only meaningful if the training loop produces a usable model. The runner reports the following held-out metrics after five epochs:

Precision Framework Accuracy Log loss ROC AUC
fp32 OpenNN 0.7705 0.4696 0.8558
fp32 PyTorch 0.7749 0.4629 0.8598
fp32 TensorFlow 0.7784 0.4576 0.8632
bf16 OpenNN 0.7707 0.4694 0.8558
bf16 PyTorch 0.7755 0.4627 0.8600
bf16 TensorFlow 0.7785 0.4573 0.8634

The models land in the same broad quality band, but TensorFlow has the best held-out log loss and AUC in this specific five-epoch snapshot. Because no common hard target was configured, this article does not convert throughput into a convergence-to-quality claim.

Discussion

OpenNN’s largest relative lead is fp32, where it processes 2.12x as many samples per second as PyTorch and 2.23x as many as TensorFlow. In bf16, the competitor implementations also benefit strongly from tensor-core execution; OpenNN remains first at 1.34x PyTorch and 1.68x TensorFlow.

Within OpenNN, bf16 improves throughput by 1.68x for this exact network. The absolute 11.35-million-sample/s result is the fastest cell in the training table.

The quality table is important context. OpenNN’s advantage is sustained training throughput, while the final five-epoch metrics are not identical and should not be described as a formal quality tie without repeated seeds or a fixed target.

Conclusions

  • OpenNN leads both fp32 and bf16 training throughput.
  • In fp32, OpenNN reaches 2.12x PyTorch and 2.23x TensorFlow.
  • In bf16, OpenNN reaches 1.34x PyTorch and 1.68x TensorFlow.
  • All held-out metrics are published so the throughput result can be interpreted with its quality context.

Reproducing

The canonical runner is docs/benchmarks/throughput/higgs-gpu/run_higgs_dense.py:

python run_higgs_dense.py \
  --train "$OPENNN_BENCH_DATA/higgs/higgs_train.csv" \
  --test "$OPENNN_BENCH_DATA/higgs/higgs_test.csv" \
  --epochs 5 --batch 7000 --hidden 1024 --hidden-layers 2 \
  --activation relu --shuffle shuffle --precision both --runs 1

The result artifact is docs/benchmarks/results/gpu-higgs-dense-training-speed-20260710T084732Z.json.

References