使用scikit-learn-intel-extension加速你的scikit-learn开发应用


说明

Scikit-learn作为传统机器学习/数据科学领域使用最广泛的开发包,在数据从业人员中得到广泛的使用好评。但是使用性能(特别是模型训练部分)并不是最优的。一些使用python实现的机器学习算法需要花费几个小时才能完成训练。scikit-learn-intelex号称可以为sklearn中的机器学习算法带来成百上千倍的速度提升。

这个官方公布的加速前后对比:

Image

之前做的许多机器学习项目,的确是在模型训练部分花费太多时间,而且模型训练部分只能被动等待训练完成。因此这部分的时间花费越少越好。因此,也尝试采用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错误。参考此处的解决方案,同样也是无法解决。Image

因此,cpu加速基本也可以放弃。

cpu加速使用案例效率比对

  • 使用加速补丁

    Image
  • 未使用加速补丁

    Image

使用加速补丁是比不使用要快一点,但是几乎无差异。

(2)gpu

配置依赖比较复杂,而且大多数机器学习不依赖GPU,暂时放弃。

错误集合

1、ModuleNotFoundError: No module named ‘daal4p

(1)问题描述
Image

(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版本均有依赖关系

Image

(2)解决

安装的python、ipython、ipykernel版本太旧,安装匹配的新版本即可。

小结

  • 目前仅成功在cpu环境实现sklearn-intelex加速,但加速与否几乎无差异,可能存在依赖intel官方硬件的原因;
  • SVM算法无法成功实现加速,存在内存泄漏的问题;
  • gpu加速配置更加复杂,没能成功。

文章作者: 安立广
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 安立广 !
  目录