说明
Scikit-learn作为传统机器学习/数据科学领域使用最广泛的开发包,在数据从业人员中得到广泛的使用好评。但是使用性能(特别是模型训练部分)并不是最优的。一些使用python实现的机器学习算法需要花费几个小时才能完成训练。scikit-learn-intelex号称可以为sklearn中的机器学习算法带来成百上千倍的速度提升。
这个官方公布的加速前后对比:
之前做的许多机器学习项目,的确是在模型训练部分花费太多时间,而且模型训练部分只能被动等待训练完成。因此这部分的时间花费越少越好。因此,也尝试采用intel官方对sklearn的加速补丁对之前项目的模型训练过程进行加速。也是为了验证官方公布的加速效果是否确有其事。
安装使用
安装
(1)单独安装加速包
在另外的虚拟环境中安装intelex加速包。
conda create --name skintel python=3.9 -y
conda activate skintel
conda install -n skintel -c conda-forge scikit-learn=1.0.2 scikit-learn-intelex=2021.6.0 -y
(2)安装anaconda
anaconda 2022.10已经默认配置sklearn加速包。这是最简便的安装使用方法,当然如果不愿意重新安装本地的python base环境的话,那就使用第一种方式。
使用
(1)cpu
# 使用intel sklearn加速扩展补丁
use_intelex = 1
if use_intelex:
from sklearnex import patch_sklearn
patch_sklearn()
# 停用intel sklearn加速扩展补丁
nouse_intelex = 1
if nouse_intelex:
from sklearnex import unpatch_sklearn
unpatch_sklearn()
总的来说体验不是很好。
- 对于正常可完成训练的模型,加速效果与未使用skintelex差别不大。如我用random forest跑一个3万个训练集200个特征的分类模型,之前1分钟,使用后反而需要近2分钟;
- 对于无法完成训练的模型,直接将电脑弄成卡死状态。如使用SVM分类模型,训练开始后cpu满荷、内存满荷,出现memory error错误。参考此处的解决方案,同样也是无法解决。
因此,cpu加速基本也可以放弃。
cpu加速使用案例效率比对
使用加速补丁
未使用加速补丁
使用加速补丁是比不使用要快一点,但是几乎无差异。
(2)gpu
配置依赖比较复杂,而且大多数机器学习不依赖GPU,暂时放弃。
错误集合
1、ModuleNotFoundError: No module named ‘daal4p
(1)问题描述
(2)解决
https://github.com/intel/scikit-learn-intelex/issues/989
无法在vscode cell中执行python脚本
(1)问题描述
在python3.8.8环境,安装ipykernel和ipython后,无法在vscode cell中执行python脚本。
python版本、ipykernel版本和ipython版本均有依赖关系
(2)解决
安装的python、ipython、ipykernel版本太旧,安装匹配的新版本即可。
小结
- 目前仅成功在cpu环境实现sklearn-intelex加速,但加速与否几乎无差异,可能存在依赖intel官方硬件的原因;
- SVM算法无法成功实现加速,存在内存泄漏的问题;
- gpu加速配置更加复杂,没能成功。