「scikit-learn」作为经典的机器学习框架,其运算速度一直广受用户的诟病。今天分享一个新包 「sklearnex」,可以在不改变原有代码的基础上,获得数十倍甚至上千倍的效率提升。
sklearnex简介
借助英特尔® Extension for Scikit-learn,您可以加速您的 Scikit-learn 应用程序,并且不需修改 Scikit-Learn原有代码结构。 英特尔® Extension for Scikit-learn是一款免费软件 AI 加速器,可带来超过 10-100 倍的加速。
安装sklearnex
pip3 install notebook scikit-learn-intelex
快速上手
scikit-learn原代码
import numpy as np
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_}")
Run
kmeans.labels_ = [1 1 1 0 0 0]
加速代码
import numpy as np
from sklearnex import patch_sklearn
patch_sklearn() #启动加速补丁
# 加速补丁放置于sklearn之前
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_}")
Run
kmeans.labels_ = [1 1 1 0 0 0]
去掉加速
一般使用sklearn的环境是jupyter内,如果使用了sklearnex的加速功能,那么整个jupyter文件都是加速环境。如果想回到常规速度,可以在机器学习算法之前使用unpatch_sklearn()回到sklearn正常速度
from sklearnex import unpatch_sklearn
unpatch_sklearn()
# Re-import scikit-learn algorithms after the unpatch:
from sklearn.cluster import KMeans
效率对比
按照官方说法,越强劲的CPU可以获得的性能提升比例也会更高,下图是官方在Intel Xeon Platinum 8275CL
处理器下测试了一系列算法后得出的性能提升结果,不仅可以提升训练速度,还可以提升模型推理预测速度,在某些场景下甚至达到数千倍的性能提升。