Skip to content

Repository files navigation

Extension for scikit-learn*

Speed up your [scikit-learn](https://scikit-learn.org) applications for CPUs and GPUs across single- and multi-node configurations

Releases | Documentation | Examples | Support | License

Build StatusCoverity Scan Build StatusOpenSSF ScorecardJoin the community on GitHub DiscussionsPyPI VersionConda Versionpython versionscikit-learn supported versions


Overview

Extension for scikit-learn is a free software AI accelerator designed to deliver up to 100X acceleration to existing workflows from scikit-learn, which is the most widely-used Python library for machine learning on tabular data. This software acceleration is achieved with vector instructions, AI hardware-specific memory optimizations, threading, and optimizations.

With Extension for scikit-learn, you can:

  • Get an average speed up of 8.5x on training and inference with equivalent mathematical accuracy
  • Benefit from performance improvements across different hardware configurations, including GPUs and multi-GPU configurations
  • Integrate the extension into your existing scikit-learn applications without code modifications
  • Continue to use the open-source scikit-learn API
  • Enable and disable the extension with a couple of lines of code or at the command line

Acceleration

Benchmarks code

Optimizations

Easiest way to benefit from accelerations from the extension is by patching scikit-learn with it:

  • Enable CPU optimizations

    importnumpyasnpfromsklearneximportpatch_sklearnpatch_sklearn()
    fromsklearn.clusterimportDBSCANX=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.

    importnumpyasnpfromsklearneximportpatch_sklearn, config_contextpatch_sklearn()
    fromsklearn.clusterimportDBSCANX=np.array([[1., 2.], [2., 2.], [2., 3.],
    [8., 7.], [8., 8.], [25., 80.]], dtype=np.float32)
    withconfig_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.

Usage without patching

Alternatively, all functionalities are also available under a separate module which can be imported directly, without involving any patching.

  • To run on CPU:

    importnumpyasnpfromsklearnex.clusterimportDBSCANX=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:

    importnumpyasnpfromsklearneximportconfig_contextfromsklearnex.clusterimportDBSCANX=np.array([[1., 2.], [2., 2.], [2., 3.],
    [8., 7.], [8., 8.], [25., 80.]], dtype=np.float32)
    withconfig_context(target_offload="gpu:0"):
    clustering=DBSCAN(eps=3, min_samples=2).fit(X)

Installation

To install Extension for scikit-learn, run:

pip install scikit-learn-intelex

Package is also offered through other channels such as conda-forge. See all installation instructions in the Installation Guide.

Documentation

Extension and oneDAL

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:

Samples & Examples

How to Contribute

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.

Releases

Packages

Used by

Contributors

Languages