Intel® Extension for Scikit-learn*

With Intel® Extension for Scikit-learn* you can accelerate your Scikit-learn applications and still have full conformance with all Scikit-Learn APIs and algorithms. Intel® Extension for Scikit-learn* is a free software AI accelerator that brings over 10-100X acceleration across a variety of applications.

Intel® Extension for Scikit-learn* offers you a way to accelerate existing scikit-learn code. The acceleration is achieved through patching: replacing the stock scikit-learn algorithms with their optimized versions provided by the extension.

Designed for Data Scientists and Framework Designers

Intel® Extension for Scikit-learn* was created to provide data scientists with a way to get a better performance while using the familiar scikit-learn package and getting the same results.

Usage

You may enable patching in different ways:

Important

These patching methods are interchangeable. They support different enabling scenarios while producing the same result.

  • Without editing the code of a scikit-learn application by using the following command line flag:

    python -m sklearnex my_application.py
    
  • Directly from the script:

    from sklearnex import patch_sklearn
    patch_sklearn()
    

Important

You have to import scikit-learn after these lines. Otherwise, the patching will not affect the original scikit-learn estimators.

  • Through importing the desired estimator from the sklearnex module in your script:

    from sklearnex.neighbors import NearestNeighbors
    
  • Through global patching to enable patching for your scikit-learn installation for all further runs:

    python -m sklearnex.glob patch_sklearn
    

Example

import numpy as np
from sklearnex import patch_sklearn
patch_sklearn()

# You need to re-import scikit-learn algorithms after the patch
from sklearn.cluster import KMeans

X = np.array([[1,  2], [1,  4], [1,  0],
              [10, 2], [10, 4], [10, 0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
print(f"kmeans.labels_ = {kmeans.labels_}")

In the example above, you can see that the use of the original Scikit-learn has not changed. This behavior is achieved through drop-in patching.

To undo the patch, run:

sklearnex.unpatch_sklearn()
# Re-import scikit-learn algorithms after the unpatch:
from sklearn.cluster import KMeans

You may specify which algorithms to patch:

  • Patching only one algorithm:

    from sklearnex import patch_sklearn
    # The names match scikit-learn estimators
    patch_sklearn("SVC")
    
  • Patching several algorithms:

    from sklearnex import patch_sklearn
    # The names match scikit-learn estimators
    patch_sklearn(["SVC", "DBSCAN"])