This dashboard compares implementationsCode that runs a given estimator: stock scikit-learn, scikit-learn-intelex or an Array API backend. on the same machine: stock scikit-learn, scikit-learn-intelex and Array APIStandard API shared by array libraries (NumPy, PyTorch, CuPy, dpnp). With it, some scikit-learn estimators run directly on these libraries' arrays, including on GPU. backends (PyTorchDeep learning library. scikit-learn can take its tensors as Array API inputs, on CPU or GPU. More, dpnpIntel's NumPy-like array library, running on Intel GPUs and CPUs. More, CuPyNumPy-like array library running on NVIDIA GPUs. More). Since the hardware is fixed, a speed-upBaseline time divided by the compared time: 2x is twice as fast as the baseline, 0.5x twice as slow. comes from the software: faster algorithms, better use of the CPU (vectorizationUsing CPU instructions that process several numbers at once (SIMD)., threadingUnits of execution that share the memory of their process. Each one can run on its own CPU core.), or offloading to the GPU.
How to read
Pick a machine tab. The top of the tab describes the machine and each
software environmentOne Pixi environment of this repository: a fixed set of package versions and builds. (versions, BLASBasic Linear Algebra Subprograms: the library that runs the matrix and vector products of NumPy and SciPy. OpenBLAS and MKL are two implementations of it. and OpenMPStandard for running the loops of compiled code on several threads. scikit-learn's Cython code (HistGradientBoosting, KMeans, ...) uses it. libraries). The baselineThe reference that speed-ups are computed against.
defaults to stock scikit-learn from PyPIThe Python Package Index, where pip installs packages from. Its scikit-learn wheels bundle their own OpenMP runtime, and NumPy and SciPy bundle OpenBLAS.. To change it, open another
software tab and click "Pick as baseline". The conda-forgeCommunity-maintained channel of conda packages. Its scikit-learn can be installed with different BLAS and OpenMP libraries. MKLIntel's Math Kernel Library (oneMKL): a BLAS implementation tuned for Intel CPUs, available as a conda-forge build option. build
(sklearn-cf-mkl) can be picked as a baseline too, but isn't
plotted otherwise.
The plots are arranged in a grid: one row per estimator category
(linear, tree-based, clustering) and one column for fitTraining a model on data. More in the scikit-learn glossary and
one for predictMaking predictions with a fitted model. More in the scikit-learn glossary. In each plot:
- the x-axis lists the estimators, with one color per implementation. An implementation keeps its color on every machine and for every baseline;
- each point is one benchmark case (dataset and hyperparametersParameters set before fit that control how an estimator learns, such as max_depth or the regularization strength. More in the scikit-learn glossary);
- the y-axis is the speed-up over the baseline, in log scale. Points above the dashed 1x line are faster than the baseline.
The marker shape flags cases to double check:
- circle (●): metricsScores of the fitted model on held-out data (ROC AUC, R2 score). They check that the compared implementations learn equivalent models. More in the scikit-learn glossary and setup match the baseline;
- square (■): metrics match but the setup differs, for instance a different solverThe optimization algorithm used by fit, for instance lbfgs or newton-cholesky for LogisticRegression. or number of iterations, or scikit-learn-intelex using histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate. where scikit-learn uses exact onesSplits chosen among every distinct value of the feature.;
- open diamond (◇): the metrics differ;
- grey point (●): scikit-learn-intelex fell backscikit-learn-intelex ran the stock scikit-learn code, because it doesn't support this case's parameters or data. to scikit-learn;
- cross (✕): failed run.
The notes under each plot count these cases.
Hover a point to see its case. Click it to find its row in "Detailed results", the table below each row, which has the exact timings and metrics and can be filtered by column.
Findings
On the benchmarked cases:
sklearnex-cpuis the most consistently fast option. Linear models gain less than tree-based models and KMeans.- sklearnex tree-based models are fast, but don't behave exactly
like scikit-learn:
- By default, sklearnex random forests and extra trees bin
featuresMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (
max_bins=256Maximum number of bins per feature for histogram-based splits.), which scikit-learn doesn't implement yet. Binning roughly doubles or triples the fit speed-up. Cases run with exact splitsSplits chosen among every distinct value of the feature. (max_bins=n_samples) are on the left of each implementation in the tree-based plots. - Two oneDALoneAPI Data Analytics Library: Intel's C++ library that implements the algorithms of scikit-learn-intelex. bugs make some fits worse:
oneDAL#3648
(ExtraTreesRegressor) and
oneDAL#3771
(
max_leaf_nodesTree parameter capping the number of leaves. With it, trees grow best-first: the most promising node is split first.).
- By default, sklearnex random forests and extra trees bin
featuresMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (
- sklearnex KMeans fits ~3x faster and is never slower than scikit-learn.
- Array APIStandard API shared by array libraries (NumPy, PyTorch, CuPy, dpnp). With it, some scikit-learn estimators run directly on these libraries' arrays, including on GPU. backends are mixed. Only LogisticRegression and
Ridge are benchmarked for now:
- LogisticRegression on GPU is fairly fast.
- Ridge uses the SVDSingular value decomposition: a stable but costly way to solve Ridge's least squares problem. solver instead of CholeskyMatrix factorization used to solve Ridge's normal equations. Faster than SVD. under Array API, which makes it slower (scikit-learn#35060).
- PyTorchDeep learning library. scikit-learn can take its tensors as Array API inputs, on CPU or GPU. More on CPU parallelizes every operation, including small vector operations. That's why LogisticRegression is slower than scikit-learn with NumPy.
Hardware
CPU
Intel(R) Core(TM) Ultra X7 358H
X86_64, 16 physical cores, 16 logical CPUs
31 GB RAM
$1,299, released 2026
GPU(s)
level_zero:gpu:0: Intel(R) Arc(TM) B390 GPU (29 GB, integrated, priced with the CPU)
sklearn-pypi
Python 3.12.14
Packages
scikit-learn1.9.1 (pypi)numpy2.5.3 (pypi)scipy1.18.1 (pypi)pandas2.3.3 (pypi)
Threadpools
- libscipy_openblas 0.3.31.dev (16 threads)
- libscipy_openblas 0.3.34.106.0 (16 threads)
- libgomp (16 threads)
OpenMP
- GNU libgomp (OpenMP 4.5)
- GOMP_SPINCOUNT: 300000
Full environment
sklearn-cf-mkl
Python 3.12.14
Packages
scikit-learn1.9.1 (conda-forge)numpy2.5.3 (conda-forge)scipy1.18.0 (conda-forge)pandas2.3.3 (conda-forge)
Threadpools
- libmkl_rt 2026.1-Product (16 threads)
- libomp (16 threads)
OpenMP
- Intel/LLVM OpenMP (spec 201611)
- KMP_BLOCKTIME: 0ms
Full environment
sklearnex-cpu
Python 3.12.14
Packages
scikit-learn1.8.0 (conda-forge)scikit_learn_intelex2026.1.0 (pypi)daal2026.1.0 (pypi)
Threadpools
- libopenblas 0.3.34 (16 threads)
- libgomp (16 threads)
OpenMP
- GNU libgomp (OpenMP 5.2)
- GOMP_SPINCOUNT: 1
Full environment
sklearnex-gpu
Python 3.12.14
Packages
scikit-learn1.8.0 (conda-forge)scikit_learn_intelex2026.1.0 (pypi)scikit_learn_intelex_gpu2026.1.0 (pypi)dpnp0.20.0 (pypi)daal2026.1.0 (pypi)
Threadpools
- libopenblas 0.3.34 (16 threads)
- libgomp (16 threads)
OpenMP
- GNU libgomp (OpenMP 5.2)
- GOMP_SPINCOUNT: 1
Full environment
Packages
scikit-learn1.9.1 (pypi)dpnp0.20.0 (pypi)
Threadpools
- libscipy_openblas 0.3.31.dev (16 threads)
- libscipy_openblas 0.3.34.106.0 (16 threads)
- libgomp (16 threads)
OpenMP
- GNU libgomp (OpenMP 4.5)
- GOMP_SPINCOUNT: 300000
Full environment
Packages
scikit-learn1.9.1 (pypi)torch2.14.0+cpu (pypi)
Threadpools
- libscipy_openblas 0.3.31.dev (16 threads)
- libscipy_openblas 0.3.34.106.0 (16 threads)
- libgomp (16 threads)
OpenMP
- GNU libgomp (OpenMP 4.5)
- GOMP_SPINCOUNT: 300000
Full environment
Packages
scikit-learn1.9.1 (pypi)torch2.14.0+xpu (pypi)
Threadpools
- libscipy_openblas 0.3.31.dev (16 threads)
- libscipy_openblas 0.3.34.106.0 (16 threads)
- libgomp (16 threads)
OpenMP
- GNU libgomp (OpenMP 4.5)
- GOMP_SPINCOUNT: 300000
Full environment
linear - fit time - 37 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 37 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 83 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 83 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 8 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 8 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 9 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 9 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 11 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 11 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 8 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 8 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 44 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 44 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 94 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 94 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 8 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 8 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 22 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 22 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 8 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 8 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 35 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
- Some operations fell back to CPU according to benchmark logs
linear - predict time - 35 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 81 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 81 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 8 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 8 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
- Some operations fell back to CPU according to benchmark logs
linear - predict time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 9 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 9 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 8 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 8 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 9 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
- Some operations fell back to CPU according to benchmark logs
linear - predict time - 9 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
- Some operations fell back to CPU according to benchmark logs
Detailed results
Detailed results
linear - fit time - 4 cases
- Solver differs
- Some operations fell back to CPU according to benchmark logs
linear - predict time - 4 cases
- Solver differs
- Some operations fell back to CPU according to benchmark logs
Detailed results
Detailed results
linear - fit time - 30 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 30 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Detailed results
linear - fit time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Detailed results
linear - fit time - 30 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 30 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Detailed results
linear - fit time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Detailed results
linear - fit time - 29 cases
- Some operations fell back to CPU according to benchmark logs
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 29 cases
- Some operations fell back to CPU according to benchmark logs
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Detailed results
linear - fit time - 12 cases
- Some operations fell back to CPU according to benchmark logs
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 12 cases
- Some operations fell back to CPU according to benchmark logs
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Detailed results
Hardware
CPU
Intel(R) Xeon(R) 6787P
X86_64, 172 physical cores, 344 logical CPUs
499 GB RAM
$11,648, released 2025
GPU(s)
No GPU detected.
sklearn-pypi
Python 3.12.14
Packages
scikit-learn1.9.1 (pypi)numpy2.5.3 (pypi)scipy1.18.1 (pypi)pandas2.3.3 (pypi)
Threadpools
- libscipy_openblas 0.3.31.dev (64 threads)
- libscipy_openblas 0.3.34.106.0 (64 threads)
- libgomp (344 threads)
OpenMP
- GNU libgomp (OpenMP 4.5)
- GOMP_SPINCOUNT: 300000
Full environment
sklearn-cf-mkl
Python 3.12.14
Packages
scikit-learn1.9.1 (conda-forge)numpy2.5.3 (conda-forge)scipy1.18.0 (conda-forge)pandas2.3.3 (conda-forge)
Threadpools
- libmkl_rt 2026.1-Product (172 threads)
- libomp (344 threads)
OpenMP
- Intel/LLVM OpenMP (spec 201611)
- KMP_BLOCKTIME: 200ms
Full environment
sklearnex-cpu
Python 3.12.14
Packages
scikit-learn1.8.0 (conda-forge)scikit_learn_intelex2026.1.0 (pypi)daal2026.1.0 (pypi)
Threadpools
- libopenblas 0.3.34 (128 threads)
- libgomp (344 threads)
OpenMP
- GNU libgomp (OpenMP 5.2)
- GOMP_SPINCOUNT: 300000
Full environment
Packages
scikit-learn1.9.1 (pypi)torch2.14.0+cpu (pypi)
Threadpools
- libscipy_openblas 0.3.31.dev (64 threads)
- libscipy_openblas 0.3.34.106.0 (64 threads)
- libgomp (344 threads)
OpenMP
- GNU libgomp (OpenMP 4.5)
- GOMP_SPINCOUNT: 300000
Full environment
linear - fit time - 33 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 33 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 83 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 83 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 8 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 8 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 9 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 9 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 11 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 11 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 8 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 8 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 44 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 44 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 94 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 94 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 24 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 24 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 22 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 22 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 24 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 24 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 33 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 33 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 81 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 81 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 16 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 16 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 9 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
tree-based - predict time - 9 cases
- Scikit-learn intelex uses binning & histogram-based splits while scikit-learn doesn't
Detailed results
clustering - fit time - 16 cases
- Number of iteration differs: this might mean algorithms differ
clustering - predict time - 16 cases
- Number of iteration differs: this might mean algorithms differ
Detailed results
linear - fit time - 29 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 29 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Detailed results
Detailed results
linear - fit time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 12 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Detailed results
Detailed results
Hardware
CPU
Apple M4
ARM_8, 10 physical cores, 10 logical CPUs
32 GB RAM
$1,599, released 2024
GPU(s)
mps: Apple M4 GPU (32 GB, integrated, priced with the CPU)
sklearn-pypi
Python 3.12.14
Packages
scikit-learn1.9.1 (pypi)numpy2.5.3 (pypi)scipy1.18.1 (pypi)pandas2.3.3 (pypi)
Threadpools
- libscipy_openblas 0.3.31.dev (10 threads)
- libscipy_openblas 0.3.34.106.0 (10 threads)
- libomp (10 threads)
OpenMP
- Intel/LLVM OpenMP (spec 201611)
- KMP_BLOCKTIME: 200
Full environment
Packages
scikit-learn1.9.1 (pypi)torch2.11.0 (pypi)
Threadpools
- libscipy_openblas 0.3.31.dev (10 threads)
- libscipy_openblas 0.3.34.106.0 (10 threads)
- libomp (10 threads)
- libomp (4 threads)
OpenMP
- Intel/LLVM OpenMP (spec 201611)
- KMP_BLOCKTIME: 200
Full environment
linear - fit time - 25 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 25 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 0 cases
tree-based - predict time - 0 cases
clustering - fit time - 0 cases
clustering - predict time - 0 cases
linear - fit time - 9 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 9 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 0 cases
tree-based - predict time - 0 cases
clustering - fit time - 0 cases
clustering - predict time - 0 cases
linear - fit time - 25 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 25 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
linear - fit time - 9 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
linear - predict time - 9 cases
- Number of iteration differs: this might mean algorithms differ
- Some operations fell back to CPU according to benchmark logs
- Solver differs
Detailed results
Hardware
CPU
AMD EPYC 7R13 Processor
X86_64, 2 physical cores, 4 logical CPUs
15 GB RAM
~$1/h (cloud VM), released 2024
GPU(s)
cuda:0: NVIDIA L4 (22 GB, priced with the CPU)
sklearn-pypi
Python 3.12.14
Packages
scikit-learn1.9.1 (pypi)numpy2.5.3 (pypi)scipy1.18.1 (pypi)pandas2.3.3 (pypi)
Threadpools
- libscipy_openblas 0.3.31.dev (4 threads)
- libscipy_openblas 0.3.34.106.0 (4 threads)
- libgomp (4 threads)
OpenMP
- GNU libgomp (OpenMP 4.5)
- GOMP_SPINCOUNT: 300000
Full environment
Packages
scikit-learn1.9.1 (pypi)cupy14.2.0 (conda-forge)
Threadpools
- libscipy_openblas 0.3.31.dev (4 threads)
- libopenblas 0.3.34 (4 threads)
- libgomp (4 threads)
OpenMP
- GNU libgomp (OpenMP 4.5)
- GOMP_SPINCOUNT: 300000
Full environment
Packages
scikit-learn1.9.1 (pypi)torch2.13.0+cu129 (pypi)
Threadpools
- libscipy_openblas 0.3.31.dev (4 threads)
- libopenblas 0.3.34 (4 threads)
- libgomp (4 threads)
OpenMP
- GNU libgomp (OpenMP 4.5)
- GOMP_SPINCOUNT: 300000
Full environment
linear - fit time - 18 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 18 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 0 cases
tree-based - predict time - 0 cases
Detailed results
clustering - fit time - 0 cases
clustering - predict time - 0 cases
linear - fit time - 8 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 8 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Tree-based plots: within each implementation, cases without binningMapping each feature to a small number of integer bins (a few hundred at most) before building trees. (exact splitsSplits chosen among every distinct value of the feature.) are on the left, cases with binning (histogram-based splitsSplits chosen among bin edges instead of among every distinct feature value. Faster, and usually as accurate.) on the right.
tree-based - fit time - 0 cases
tree-based - predict time - 0 cases
Detailed results
clustering - fit time - 0 cases
clustering - predict time - 0 cases
linear - fit time - 21 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 21 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Detailed results
linear - fit time - 11 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 11 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Detailed results
linear - fit time - 21 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 21 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
Detailed results
Detailed results
linear - fit time - 11 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs
linear - predict time - 11 cases
- Number of iteration differs: this might mean algorithms differ
- Solver differs