Speed up your scikit-learn applications for CPUs and GPUs across single- and multi-node configurations
Releases | Documentation | Examples | Support | License
Extension for scikit-learn is a free software AI accelerator designed to deliver up to 100X acceleration to existing workflows from scikit-learn (e.g. logistic regression models, random forests, support vector machines, among others), the most widely-used Python library for machine learning on tabular data.
This software acceleration is achieved through SIMD instructions, multi-threading, hardware-specific cache optimizations, and algorithmic optimizations.
Features:
- Average speed up of 8.5x on both training and inference over scikit-learn, with equivalent mathematical accuracy.
- Support for different hardware configurations, including GPUs and multi-GPU setups.
- Easy to integrate into existing scikit-learn workflows without code modifications through monkeypatching, or as an API-compatible module
sklearnex. - Can produce much faster predictions from decision-tree models generated by other libraries such as XGBoost or LightGBM.
Easiest way to benefit from accelerations from the extension is by patching scikit-learn with it:
-
Enable CPU optimizations
import numpy as np from sklearnex import patch_sklearn patch_sklearn() from sklearn.cluster import DBSCAN X = np.array([[1., 2.], [2., 2.], [2., 3.], [8., 7.], [8., 8.], [25., 80.]], dtype=np.float32) clustering = DBSCAN(eps=3, min_samples=2).fit(X)
-
Enable GPU optimizations
Note: executing on GPU has additional system software requirements - see details.
import numpy as np from sklearnex import patch_sklearn, config_context patch_sklearn() from sklearn.cluster import DBSCAN X = np.array([[1., 2.], [2., 2.], [2., 3.], [8., 7.], [8., 8.], [25., 80.]], dtype=np.float32) with config_context(target_offload="gpu:0"): clustering = DBSCAN(eps=3, min_samples=2).fit(X)
👀 Read about other ways to patch scikit-learn.
👀 Check out available notebooks for more examples.
Alternatively, all functionalities are also available under a separate module which can be imported directly, without involving any patching.
-
To run on CPU:
import numpy as np from sklearnex.cluster import DBSCAN X = np.array([[1., 2.], [2., 2.], [2., 3.], [8., 7.], [8., 8.], [25., 80.]], dtype=np.float32) clustering = DBSCAN(eps=3, min_samples=2).fit(X)
-
To run on GPU:
import numpy as np from sklearnex import config_context from sklearnex.cluster import DBSCAN X = np.array([[1., 2.], [2., 2.], [2., 3.], [8., 7.], [8., 8.], [25., 80.]], dtype=np.float32) with config_context(target_offload="gpu:0"): clustering = DBSCAN(eps=3, min_samples=2).fit(X)
To install Extension for scikit-learn, run:
pip install scikit-learn-intelexPackage is also offered through other channels such as conda-forge. See all installation instructions in the Installation Guide.
Acceleration in patched scikit-learn classes is achieved by replacing calls to scikit-learn with calls to oneDAL (oneAPI Data Analytics Library) behind the scenes:
We welcome community contributions, check our Contributing Guidelines to learn more.
* The Intel logo, and other Intel marks are trademarks of Intel Corporation or its subsidiaries. Other names and brands may be claimed as the property of others.