本文示例程式碼已上傳至我的
Github
倉庫https://github.com/CNFeffery/DataScienceStudyNotes
1 簡介
大家好我是費老師,scikit-learn
作為經典的機器學習框架,從誕生至今已發展了十餘年,但其運算速度一直廣受使用者的詬病。熟悉scikit-learn
的朋友應該清楚,scikit-learn
中自帶的一些基於joblib
等庫的運算加速功能效果有限,並不能很充分地利用算力。
而今天我要給大家介紹的知識,可以幫助我們在不改變原有程式碼的基礎上,獲得數十倍甚至上千倍的scikit-learn
運算效率提升,let's go!
2 利用sklearnex加速scikit-learn
為了達到加速運算的效果,我們只需要額外安裝sklearnex
這個擴充庫,就可以幫助我們在擁有intel處理器的裝置上,獲得大幅度的運算效率提升。
抱著謹慎嚐鮮的態度,我們可以在單獨的conda
虛擬環境中做實驗,全部命令如下,我們順便安裝jupyterlab
作為IDE:
conda create -n scikit-learn-intelex-demo python=3.8 -c https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main -y
conda activate scikit-learn-intelex-demo
pip install scikit-learn scikit-learn-intelex jupyterlab -i https://pypi.douban.com/simple/
完成實驗環境的準備後,我們在jupyter lab
中編寫測試用程式碼來看看加速效果如何,使用方式很簡單,我們只需要在程式碼中匯入scikit-learn
相關功能模組之前,執行下列程式碼即可:
from sklearnex import patch_sklearn, unpatch_sklearn
patch_sklearn()
成功開啟加速模式後會列印以下資訊:
其他要做的僅僅是將你原本的scikit-learn
程式碼在後面繼續執行即可,我在自己平時寫作以及開發開源專案的老款拯救者筆記本上簡單測試了一下。
以線性迴歸為例,在百萬級別樣本量以及上百個特徵的示例資料集上,開啟加速後僅耗時0.21秒就完成對訓練集的訓練,而使用unpatch_sklearn()
強制關閉加速模式後(注意scikit-learn
相關模組需要重新匯入),訓練耗時隨即上升到11.28秒,意味著通過sklearnex
我們獲得了50多倍的運算速度提升!
而按照官方的說法,越強勁的CPU可以獲得的效能提升比例也會更高,下圖是官方在Intel Xeon Platinum 8275CL
處理器下測試了一系列演算法後得出的效能提升結果,不僅可以提升訓練速度,還可以提升模型推理預測速度,在某些場景下甚至達到數千倍的效能提升:
官方也提供了一些ipynb
示例(https://github.com/intel/scikit-learn-intelex/tree/master/examples/notebooks
),展示了包含K-means
、DBSCAN
、隨機森林
、邏輯迴歸
、嶺迴歸
等多種常用演算法示例,感興趣的讀者朋友們可以自行下載學習。
以上就是本文的全部內容,歡迎在評論區與我進行討論~