机器学习模型太慢?来看看英特尔(R) 扩展加速 ⛵

简介: 机器学习建模过程如何提速?本文提供 Intel 针对 Scikit-Learn 工具库做的加速补丁,是一种硬件层面的解决方案,支持多种算法,并可以将建模时间压缩为常规方式的 1/5

💡 作者: 韩信子@ 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 的快速使用方法也推荐大家查看[ShowMeAI](https://www.showmeai.tech/)的文章和速查手册

💡 面向 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/article-detail/295)creditcard 信用卡欺诈场景数据集

ShowMeAI官方GitHubhttps://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 训练和推理时间
  • 提供无缝体验(只需添加两行代码即可启用加速)

参考资料

目录
相关文章
|
22天前
|
机器学习/深度学习 数据采集 数据挖掘
实战派教学:掌握Scikit-learn,轻松实现数据分析与机器学习模型优化!
【10月更文挑战第4天】Scikit-learn凭借高效、易用及全面性成为数据科学领域的首选工具,简化了数据预处理、模型训练与评估流程,并提供丰富算法库。本文通过实战教学,详细介绍Scikit-learn的基础入门、数据预处理、模型选择与训练、评估及调优等关键步骤,助你快速掌握并优化数据分析与机器学习模型。从环境搭建到参数调优,每一步都配有示例代码,便于理解和实践。
71 2
|
12天前
|
机器人
1024 云上见 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建 “文旅领域知识问答机器人” 领精美计时器
1024 云上见 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建 “文旅领域知识问答机器人” 领精美计时器
60 3
|
19天前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
【10月更文挑战第6天】如何使用机器学习模型来自动化评估数据质量?
|
2月前
|
机器学习/深度学习 人工智能 分布式计算
使用PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建文旅领域知识问答机器人
本次教程介绍了如何使用 PAI ×LLaMA Factory 框架,基于全参方法微调 Qwen2-VL 模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
|
2月前
|
机器学习/深度学习 算法 数据可视化
机器学习模型中特征贡献度分析:预测贡献与错误贡献
本文将探讨特征重要性与特征有效性之间的关系,并引入两个关键概念:预测贡献度和错误贡献度。
189 3
|
18天前
|
数据采集 移动开发 数据可视化
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
这篇文章介绍了数据清洗、分析、可视化、模型搭建、训练和预测的全过程,包括缺失值处理、异常值处理、特征选择、数据归一化等关键步骤,并展示了模型融合技术。
33 1
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
|
1天前
|
机器学习/深度学习 数据采集 Python
从零到一:手把手教你完成机器学习项目,从数据预处理到模型部署全攻略
【10月更文挑战第25天】本文通过一个预测房价的案例,详细介绍了从数据预处理到模型部署的完整机器学习项目流程。涵盖数据清洗、特征选择与工程、模型训练与调优、以及使用Flask进行模型部署的步骤,帮助读者掌握机器学习的最佳实践。
8 1
|
4天前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
如何使用机器学习模型来自动化评估数据质量?
|
10天前
|
机器人
1024 云上见 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建 “文旅领域知识问答机器人” 领 200个 精美计时器等你领
1024 云上见 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建 “文旅领域知识问答机器人” 领 200个 精美计时器等你领
51 2
|
17天前
|
机器学习/深度学习 前端开发 网络架构
Django如何调用机器学习模型进行预测
Django如何调用机器学习模型进行预测
43 5

热门文章

最新文章