天天看點

機器學習模型太慢?來看看英特爾(R) 擴充加速 ⛵💡 Scikit-Learn (SKlearn) 機器學習工具庫💡 面向 Scikit-Learn 的英特爾擴充💡 工具庫安裝&配置💡 英特爾® Scikit-Learn 擴充使用方法:💡 案例💡 總結參考資料

機器學習模型太慢?來看看英特爾(R) 擴充加速 ⛵💡 Scikit-Learn (SKlearn) 機器學習工具庫💡 面向 Scikit-Learn 的英特爾擴充💡 工具庫安裝&配置💡 英特爾® Scikit-Learn 擴充使用方法:💡 案例💡 總結參考資料

💡 作者:韓信子@ShowMeAI

📘 機器學習實戰系列:https://www.showmeai.tech/tutorials/41

📘 本文位址:https://www.showmeai.tech/article-detail/295

📢 聲明:版權所有,轉載請聯系平台與作者并注明出處

📢 收藏ShowMeAI檢視更多精彩内容

我們在應用機器學習模型時,除了最終效果,也非常關注它們的性能。而機器學習模型的性能,不僅僅取決于我們的應用方式(特征多少、模型複雜度),也和硬體息息相關。

在本篇内容中,ShowMeAI 要給大家介紹到的是 Intel 針對 Scikit-Learn 機器學習工具庫做的加速不定,可以非常大程度加速我們的模型訓練與預測速度。

在我們的機器學習應用案例中,使用intel拓展加速的方式,僅僅花費原始模組化方式1/5的時間,可以完成一樣的任務達到一緻的效果。

機器學習模型太慢?來看看英特爾(R) 擴充加速 ⛵💡 Scikit-Learn (SKlearn) 機器學習工具庫💡 面向 Scikit-Learn 的英特爾擴充💡 工具庫安裝&配置💡 英特爾® Scikit-Learn 擴充使用方法:💡 案例💡 總結參考資料

💡 Scikit-Learn (SKlearn) 機器學習工具庫

Scikit-Learn (Sklearn) 是 Python 中最有用和最強大的機器學習庫。 它通過 Python 中的接口為機器學習和統計模組化提供了一系列有效工具,包括分類、回歸、聚類和降維。

  • 📘 SKLearn 官網
  • 📘 SKLearn Github
機器學習模型太慢?來看看英特爾(R) 擴充加速 ⛵💡 Scikit-Learn (SKlearn) 機器學習工具庫💡 面向 Scikit-Learn 的英特爾擴充💡 工具庫安裝&配置💡 英特爾® Scikit-Learn 擴充使用方法:💡 案例💡 總結參考資料
SKLearn 的快速使用方法也推薦大家檢視[ShowMeAI](https://www.showmeai.tech/)的文章和速查手冊:
  • 機器學習實戰 | SKLearn入門與簡單應用案例
  • 機器學習實戰 | SKLearn最全應用指南
  • AI 垂直領域工具庫速查表 | Scikit-Learn 速查表

💡 面向 Scikit-Learn 的英特爾擴充

Scikit-Learn是一個大而全的工具庫,但它的性能并不總是最佳的,有時候一些 ML 算法可能需要數小時才能運作,時間成本很高。

面向 Scikit-Learn 的英特爾擴充(Intel(R) Extension for Scikit-learn)隻需在大家熟悉的模組化方法基礎上,添加幾行代碼,就能顯着提升性能,而且它也是開源的。

機器學習模型太慢?來看看英特爾(R) 擴充加速 ⛵💡 Scikit-Learn (SKlearn) 機器學習工具庫💡 面向 Scikit-Learn 的英特爾擴充💡 工具庫安裝&配置💡 英特爾® Scikit-Learn 擴充使用方法:💡 案例💡 總結參考資料

📌 scikit-learn-intelex 提速效果

通過 📘 scikit-learn-intelex 優化算法運作方式,可以獲得 1-3 個數量級的效率改進,最終取決于使用到的資料集和算法。

  • Intel Extension for Scikit-Learn 提供了許多 Scikit-Learn 算法(下表)的優化實作,這些算法與原始版本一緻,有一樣的最終結果。
  • 即使大家使用到了目前拓展不支援的算法或參數,工具包也會自動退回到原始 Scikit-Learn,保證大家無縫銜接,大部分代碼可以維持原來的形式,無需重寫代碼。
機器學習模型太慢?來看看英特爾(R) 擴充加速 ⛵💡 Scikit-Learn (SKlearn) 機器學習工具庫💡 面向 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,相比原始版本,有多大程度的提升,這裡使用到的業務場景是信用卡欺詐識别場景。

機器學習模型太慢?來看看英特爾(R) 擴充加速 ⛵💡 Scikit-Learn (SKlearn) 機器學習工具庫💡 面向 Scikit-Learn 的英特爾擴充💡 工具庫安裝&配置💡 英特爾® Scikit-Learn 擴充使用方法:💡 案例💡 總結參考資料

資料可以在 🏆 Kaggle場景資料 下載下傳,也可以在ShowMeAI 的百度網盤位址直接下載下傳。

🏆 實戰資料集下載下傳(百度網盤):公衆号『ShowMeAI研究中心』回複『實戰』,或者點選 這裡 擷取本文 [8] 面向 Scikit-Learn 的英特爾加速擴充更新檔 『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")
           

運作結果截圖如下所示:

機器學習模型太慢?來看看英特爾(R) 擴充加速 ⛵💡 Scikit-Learn (SKlearn) 機器學習工具庫💡 面向 Scikit-Learn 的英特爾擴充💡 工具庫安裝&配置💡 英特爾® Scikit-Learn 擴充使用方法:💡 案例💡 總結參考資料

📌 添加更新檔的加速版本

下面是我們測試Intel優化版Logistic Regression算法, 代碼使用

patch_sklearn()

添加更新檔,最後 執行時間

7.1

秒,可以看到,隻花費了原始版本20%的時間,卻取得了完全一樣的效果!

機器學習模型太慢?來看看英特爾(R) 擴充加速 ⛵💡 Scikit-Learn (SKlearn) 機器學習工具庫💡 面向 Scikit-Learn 的英特爾擴充💡 工具庫安裝&配置💡 英特爾® Scikit-Learn 擴充使用方法:💡 案例💡 總結參考資料

💡 總結

  • 優化常見 ML 算法的性能
  • 減少 ML 訓練和推理時間
  • 提供無縫體驗(隻需添加兩行代碼即可啟用加速)

參考資料

  • 🏆 實戰資料集下載下傳(百度網盤):公衆号『ShowMeAI研究中心』回複『實戰』,或者點選 這裡 擷取本文 [8] 面向 Scikit-Learn 的英特爾加速擴充更新檔 『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