前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习模型太慢?来看看英特尔(R) 扩展加速 ⛵

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

原创
作者头像
ShowMeAI
发布2022-08-09 19:48:12
7870
发布2022-08-09 19:48:12
举报

💡 作者:韩信子@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 的百度网盘地址直接下载。

🏆 实战数据集下载(百度网盘):点击 这获取本文 [8] 面向 Scikit-Learn 的英特尔加速扩展补丁 『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 训练和推理时间
  • 提供无缝体验(只需添加两行代码即可启用加速)

参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 💡 Scikit-Learn (SKlearn) 机器学习工具库
  • 💡 面向 Scikit-Learn 的英特尔扩展
    • 📌 scikit-learn-intelex 提速效果
    • 💡 工具库安装&配置
      • 📌 从 PyPI 安装
        • 📌 从 Anaconda 安装
          • 📌 从容器安装
          • 💡 英特尔® Scikit-Learn 扩展使用方法:
            • 📌 打补丁 patch_sklearn
              • 📌 其他替代方案
                • 📌 查看优化算法列表
                  • 📌 全局补丁
                  • 💡 案例
                    • 📌 取消补丁的原始版本
                      • 📌 添加补丁的加速版本
                      • 💡 总结
                      • 参考资料
                      相关产品与服务
                      容器服务
                      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档