乐趣区

关于intel:机器学习模型太慢来看看英特尔R-扩展加速-⛵

💡 作者:韩信子 @ShowMeAI
📘 机器学习实战系列:https://www.showmeai.tech/tutorials/41
📘 本文地址:https://www.showmeai.tech/article-detail/295
📢 申明:版权所有,转载请分割平台与作者并注明出处
📢 珍藏 ShowMeAI 查看更多精彩内容

咱们在利用机器学习模型时,除了最终成果,也十分关注它们的性能。而机器学习模型的性能,不仅仅取决于咱们的利用形式(特色多少、模型复杂度),也和硬件非亲非故。

在本篇内容中,ShowMeAI 要给大家介绍到的是 Intel 针对 Scikit-Learn 机器学习工具库做的减速不定,能够十分大程度减速咱们的模型训练与预测速度。

在咱们的机器学习利用案例中,应用 intel 拓展减速的形式,仅仅破费原始建模形式 1 / 5 的工夫,能够实现一样的工作达到统一的成果。

💡 Scikit-Learn(SKlearn) 机器学习工具库

Scikit-Learn(Sklearn) 是 Python 中最有用和最弱小的机器学习库。它通过 Python 中的接口为机器学习和统计建模提供了一系列无效工具,包含分类、回归、聚类和降维。

  • 📘 SKLearn 官网
  • 📘 SKLearn Github

SKLearn 的疾速应用办法也举荐大家查看 [ShowMeAI](https://www.showmeai.tech/) 的文章和速查手册:

  • 机器学习实战 | SKLearn 入门与简略利用案例
  • 机器学习实战 | SKLearn 最全利用指南
  • AI 垂直畛域工具库速查表 | Scikit-Learn 速查表

💡 面向 Scikit-Learn 的英特尔扩大

Scikit-Learn 是一个大而全的工具库,但它的性能并不总是最佳的,有时候一些 ML 算法可能须要数小时能力运行,工夫老本很高。

面向 Scikit-Learn 的英特尔扩大(Intel(R) Extension for Scikit-learn)只需在大家相熟的建模办法根底上,增加几行代码,就能显着晋升性能,而且它也是开源的。

📌 scikit-learn-intelex 提速成果

通过 📘 scikit-learn-intelex 优化算法运行形式,能够取得 1-3 个数量级的效率改良,最终取决于应用到的数据集和算法。

  • Intel Extension for Scikit-Learn 提供了许多 Scikit-Learn 算法(下表)的优化实现,这些算法与原始版本统一,有一样的最终后果。
  • 即便大家应用到了以后拓展不反对的算法或参数,工具包也会主动退回到原始 Scikit-Learn,保障大家无缝连接,大部分代码能够维持原来的模式,无需重写代码。

利用英特尔® Extension for Scikit-learn 能够对上述 Scikit-Learn 算法效率优化,具体的能够参考 官网介绍

💡 工具库装置 & 配置

Intel Extension for Scikit-Learn 反对 x86 架构上的 Linux、Windows 和 Mac 零碎。它能够应用 PyPI 或 Anaconda Cloud 下载:

📌 从 PyPI 装置

只需在命令行运行 pip 命令进行装置:

pip install scikit-learn-intelex 

📌 从 Anaconda 装置

◉ Conda-Forge 形式:

сonda install scikit-learn-intelex -c conda-forge 

◉ 英特尔渠道:

conda install scikit-learn-intelex -c intel 

◉ 默认形式:

conda install scikit-learn-intelex 

📌 从容器装置

请留神,正确拜访链接须要 DockerHub 帐户。

大家能够通过以下命令,将最新的英特尔® Scikit-Learn 扩大装置为 Docker 容器:

docker pull intel/intel-optimized-ml:scikit-learn 

💡 英特尔® Scikit-Learn 扩大应用办法:

📌 打补丁 patch_sklearn

patch是一种保留 Scikit-Learn 库存版本以供应用的办法,大家能够在代码结尾增加它(patch_sklearn()函数调用),如下所示:

############### 在此处插入补丁 ########################## 
from sklearnex import patch_sklearn
patch_sklearn()
################################################################## 

◉ 这个补丁之后的所有 import 语句导入的来自 sklearn 的算法,都会优先导入 Scikit-Learn 优化版本

# Importing sklearn optimised version of LogisticRegression
from sklearn.linear_model import LogisticRegression

# Creating an object for model and fitting it on training data set
logmodel =  LogisticRegression()
logmodel.fit(X_train_sm, y_train_sm) 
  
# Predicting the Target variable                 
predicted = logmodel.predict(X_test)# Classification Report
report = metrics.classification_report(y_test, predicted)

🕯️ 留神:导入程序十分重要,请大家肯定记得在导入 Scikit-Learn 工具库之前打补丁!

如果大家不想应用补丁,能够随时通过 sklearnex.unpatch_sklearn() 勾销 intel 的补丁。

📌 其余代替计划

大家有很多代替计划,同样能够启用英特尔® Extension for Scikit-Learn 优化:

◉ 在命令行间接应用拓展运行原始 Scikit-Learn 利用程序代码获取减速:

python -m sklearnex my_application.py 

◉ 指定算法导入减速:

# 指定某个算法减速
from sklearnex import patch_sklearn
patch_sklearn("SVC")

# 指定若干个算法减速
patch_sklearn(["SVC", "PCA"])

# 撤销对于算法的减速补丁
from sklearnex import unpatch_sklearn 
unpatch_sklearn("SVC")

📌 查看优化算法列表

# 能够间接查看可减速算法列表
from sklearnex import get_patch_names
get_patch_names()

>>
['pca','kmeans','dbscan', 'distances','linear','ridge','elasticnet','lasso',
 'logistic','log_reg','knn_classifier','nearest_neighbors',
'knn_regressor', 'random_forest_classifier','random_forest_regressor',
 'train_test_split', 'fin_check','roc_auc_score', 'tsne', 'logisticregression',
 'kneighborsclassifier', 'nearestneighbors','kneighborsregressor',
 'randomrorestclassifier', 'randomforestregressor','svr', 'svc', 'nusvr',
 'nusvc','set_config', 'get_config','config_context']

📌 全局补丁

如果大家想应用全局补丁来优化所有 Scikit-Learn 应用程序,无需任何额定操作,只须要在命令行运行:

python sklearnex.glob patch_sklearn 

💡 案例

咱们用一个案例来阐明一下,应用英特尔® Extension for Scikit-Learn,相比原始版本,有多大程度的晋升,这里应用到的业务场景是 信用卡欺诈辨认场景

数据能够在 🏆 Kaggle 场景数据 下载,也能够在 ShowMeAI 的百度网盘地址间接下载。

🏆 实战数据集下载(百度网盘):公众号『ShowMeAI 钻研核心』回复『实战 』,或者点击 这里 获取本文 [[8] 面向 Scikit-Learn 的英特尔减速扩大补丁](https://www.showmeai.tech/art…)『creditcard 信用卡欺诈场景数据集

ShowMeAI 官网 GitHub:https://github.com/ShowMeAI-Hub

📌 勾销补丁的原始版本

因为咱们的电脑上进行了配置,intel 优化的算法会全局失效,为了比照原始版本的 sklearn 速度,咱们这里应用 unpatch_sklearn() 函数勾销补丁,整个逻辑回归模型训练与测试破费了 35.5 秒。

################ Insert Patch here ############################
from sklearnex import unpatch_sklearn
unpatch_sklearn()
##########################################################
# 导入
from sklearn.linear_model import LogisticRegression

# 开始工夫
start_time = time.time()

# 初始化模型并你和数据集
logmodel = LogisticRegression()
logmodel.fit(X_train_sm, y_train_sm)   

# 测试集预估                 
predicted = logmodel.predict(X_test)
patched_time = time.time() - start_time
print("Time to calculate \033[1m logmodel.predict in Unpatched scikit-learn {:4.1f}\033[0m seconds".format(patched_time))

# 成果评估
report = metrics.classification_report(y_test, predicted)
print(f"Classification report for Logistic Regression with SMOTE:\n{report}\n")

运行后果截图如下所示:

📌 增加补丁的减速版本

上面是咱们测试 Intel 优化版 Logistic Regression 算法,代码应用 patch_sklearn() 增加补丁,最初 执行工夫 7.1秒,能够看到,只破费了原始版本 20% 的工夫,却获得了齐全一样的成果!

💡 总结

本文介绍了英特尔针对 Scikit-Learn 的减速扩大,它的一些特点包含:

  • 优化常见 ML 算法的性能
  • 缩小 ML 训练和推理工夫
  • 提供无缝体验(只需增加两行代码即可启用减速)

参考资料

  • 🏆 实战数据集下载(百度网盘):公众号『ShowMeAI 钻研核心』回复『实战 』,或者点击 这里 获取本文 [[8] 面向 Scikit-Learn 的英特尔减速扩大补丁](https://www.showmeai.tech/art…)『creditcard 信用卡欺诈场景数据集
  • ShowMeAI 官网 GitHub:https://github.com/ShowMeAI-Hub
  • 📘 SKLearn 官网:https://scikit-learn.org/stable/
  • 📘 SKLearn Github:https://github.com/scikit-learn/scikit-learn
  • 📘 scikit-learn-intelex:https://github.com/intel/scikit-learn-intelex
  • 📘 机器学习实战 | SKLearn 入门与简略利用案例:https://www.showmeai.tech/article-detail/202
  • 📘 机器学习实战 | SKLearn 最全利用指南:https://www.showmeai.tech/article-detail/203
  • 📘 AI 垂直畛域工具库速查表 | Scikit-Learn 速查表:https://www.showmeai.tech/article-detail/108
退出移动版