一行代码加速sklearn运算上千倍

人工智能 机器学习
今天我要给大家介绍的知识,可以帮助我们在不改变原有代码的基础上,获得数十倍甚至上千倍的scikit-learn运算效率提升,let's go!

1 简介

大家好我是费老师,scikit-learn作为经典的机器学习框架,从诞生至今已发展了十余年,但其运算速度一直广受用户的诟病。熟悉scikit-learn的朋友应该清楚,scikit-learn中自带的一些基于joblib等库的运算加速功能效果有限,并不能很充分地利用算力。

而今天我要给大家介绍的知识,可以帮助我们在不改变原有代码的基础上,获得数十倍甚至上千倍的scikit-learn运算效率提升,let's go!

2 利用sklearnex加速scikit-learn

为了达到加速运算的效果,我们只需要额外安装sklearnex这个拓展库,就可以帮助我们在拥有intel处理器的设备上,获得大幅度的运算效率提升。

抱着谨慎尝鲜的态度,我们可以在单独的conda虚拟环境中做实验,全部命令如下,我们顺便安装jupyterlab作为IDE:

conda create -n scikit-learn-intelex-demo python=3.8 -c https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main -y
conda activate scikit-learn-intelex-demo
pip install scikit-learn scikit-learn-intelex jupyterlab -i https://pypi.douban.com/simple/

完成实验环境的准备后,我们在jupyter lab中编写测试用代码来看看加速效果如何,使用方式很简单,我们只需要在代码中导入scikit-learn相关功能模块之前,运行下列代码即可:

from sklearnex import patch_sklearn, unpatch_sklearn
patch_sklearn()

成功开启加速模式后会打印以下信息:

其他要做的仅仅是将你原本的scikit-learn代码在后面继续执行即可,我在自己平时写作以及开发开源项目的老款拯救者笔记本上简单测试了一下。

以线性回归为例,在百万级别样本量以及上百个特征的示例数据集上,开启加速后仅耗时0.21秒就完成对训练集的训练,而使用unpatch_sklearn()强制关闭加速模式后(注意scikit-learn相关模块需要重新导入),训练耗时随即上升到11.28秒,意味着通过sklearnex我们获得了50多倍的运算速度提升!

而按照官方的说法,越强劲的CPU可以获得的性能提升比例也会更高,下图是官方在Intel Xeon Platinum 8275CL处理器下测试了一系列算法后得出的性能提升结果,不仅可以提升训练速度,还可以提升模型推理预测速度,在某些场景下甚至达到数千倍的性能提升:

官方也提供了一些ipynb示例(https://github.com/intel/scikit-learn-intelex/tree/master/examples/notebooks),展示了包含K-means、DBSCAN、随机森林、逻辑回归、岭回归等多种常用算法示例,感兴趣的读者朋友们可以自行下载学习。

责任编辑:庞桂玉 来源: 小詹学Python
相关推荐

2019-12-25 14:08:50

Pandas数据计算

2019-05-10 14:50:09

Java代码技巧

2022-10-27 16:03:57

2016-12-02 08:53:18

Python一行代码

2023-12-06 13:36:00

模型数据

2011-02-24 17:54:10

IBMwatson

2014-02-12 13:43:50

代码并行任务

2022-04-09 09:11:33

Python

2017-04-05 11:10:23

Javascript代码前端

2019-03-04 15:53:02

SQL存储系统

2012-08-22 10:10:18

中国国际通信大会华为IEEE

2022-06-15 11:27:15

开源代码项目

2021-08-31 09:49:37

CPU执行语言

2017-04-13 19:20:18

Python代码并行任务

2023-08-14 07:42:01

模型训练

2018-09-19 15:46:51

编程语言Python编译器

2022-12-05 10:01:41

代码模型

2023-03-16 16:18:09

PyTorch程序人工智能

2020-09-09 16:00:22

Linux进程

2021-11-02 16:25:41

Python代码技巧
点赞
收藏

51CTO技术栈公众号