跳转到主要内容

基于numba-dpex的scikit-learn计算引擎

项目描述

sklearn-numba-dpex

为scikit-learn提供实验性插件,使其能够通过numba-dpex在Intel GPU上运行(一些估计器)。

免责声明:这是一个正在进行中的工作,不要期望这个仓库目前处于可用状态。

这需要使用以下分支的scikit-learn,该分支本身目前也处于非工作状态。

入门指南

步骤 1:安装 numba_dpex 环境

入门需要为使用 numba_dpex 准备一个工作环境。目前有 conda 安装docker 镜像 两种方式。目前最稳定且推荐的环境是使用 docker 镜像。

使用 conda 安装

待办事项:一旦可用,更新从非开发 conda 软件包安装所有内容的说明。

带有英特尔 Python 库的 conda 环境配置(1/2)

让我们创建一个专门的 conda 环境来使用英特尔 Python 库的开发版本(来自 dppy/label/dev 频道)。

conda create -n dppy-dev dpnp numba cython spirv-tools -c dppy/label/dev -c intel --override-channels

让我们激活它并检查可用的硬件

conda activate dppy-dev
python -c "import dpctl; print(dpctl.get_devices())"

如果您没有看到任何 CPU 设备,尝试在设置 SYCL_ENABLE_HOST_DEVICE=1 环境变量后重新尝试以下操作

SYCL_ENABLE_HOST_DEVICE=1 python -c "import dpctl; print(dpctl.get_devices())"

如果您有英特尔 GPU 并且没有检测到,请检查以下步骤

  • 确保您已安装最新版本的 GPU 驱动程序

  • 在 Linux 上,请确保 i915 驱动程序已正确加载

    $ lspci -nnk | grep i915
          Kernel driver in use: i915
          Kernel modules: i915
    
  • 在 Linux 上,请确保当前用户属于 render 组,例如

    $ groups
    myuser adm cdrom sudo dip plugdev render lpadmin lxd sambashare docker
    

    如果不是,请使用以下命令添加: sudo adduser $USER render,注销并重新登录,然后再次检查。

  • 安装最近版本的 运行时库(尚未作为 conda 软件包提供)

有关更深入的信息,您可以参考有关为英特尔硬件和软件配置系统的 指南 以及此 github 问题中的讨论 https://github.com/IntelPython/dpnp/issues/1149

dpctl.lsplatform() 也可以列出您的 SYCL 运行时环境上的版本信息

python -c "import dpctl; dpctl.lsplatform()"
从源代码安装 numba-dpex(2/2)

安装并激活随 英特尔 oneAPI 基础工具包 一起提供的英特尔 oneAPI DPC++ 编译器。

例如,在 Ubuntu 上,一旦 apt 仓库已配置

sudo apt update
sudo apt install intel-basekit
source /opt/intel/oneapi/compiler/latest/env/vars.sh

确保可以通过以下命令在 PATH 中找到 icx 命令

which icx

在之前创建的 conda 环境中安装 numba-dpex

git clone https://github.com/IntelPython/numba-dpex/
cd numba-dpex
pip install -e . --no-build-isolation

重要:为了使用 numba-dpex,需要将 llvm-spirv 编译器放在 PATH 中。这可以通过以下方式实现

$ export PATH=/opt/intel/oneapi/compiler/latest/linux/bin-llvm:$PATH

使用 docker 镜像

可用的 docker 镜像提供最新且一键安装的环境。您可以从中 Dockerfile 构建

$ cd docker
$ docker build . -t my_tag

或从以下公开可用的存储库拉取 docker 镜像 此存储库

$ docker pull jjerphan/numba_dpex_dev:latest

使用您喜欢的 docker 标志以交互式模式运行容器,例如

$ docker run --name my_container_name -it -v /my/host/volume/:/mounted/volume --device=/dev/dri my_tag

其中 my_tag 将会是如果您从存储库拉取则为 jjerphan/numba_dpex_dev:latest

⚠ 标志 --device=/dev/dri强制性的 以在容器内启用 GPU,同时启动 docker run 命令的用户必须有权访问 GPU,例如通过成为 render 组的成员。

除非在启动容器时使用标志 --rm,否则您可以在退出后重新启动它,命令为

sudo docker start -a -i my_container_name

一旦进入容器,您可以检查环境是否正常工作:命令

python -c "import dpctl; print(dpctl.get_devices())"

将检查可用的硬件,并应显示正常工作的 opencl cpu 和 gpu 设备以及 level_zero gpu 设备。

步骤 2:安装 scikit-learn 的 wip-engines 分支

一旦您根据前两条指南之一加载到 numba_dpex 开发环境后,请遵循以下说明

git clone https://github.com/ogrisel/scikit-learn
cd scikit-learn
git checkout wip-engines
pip install -e . --no-build-isolation
cd ..

步骤 3:安装此插件

git clone https://github.com/soda-inria/sklearn-numba-dpex
cd sklearn-numba-dpex
pip install -e . --no-build-isolation

预期使用

请参阅 sklearn_numba_dpex/tests 文件夹以了解示例用法。

待办事项:在此处编写一些文档。

运行基准测试

重复 步骤 3 中显示的 pip 安装步骤,并进行以下修改

pip install -e .[benchmark] --no-build-isolation

(即添加 benchmark 额外需求),然后

cd benckmark
python ./kmeans.py

运行不同 k-means 实现的基准测试,并打印性能的简要摘要。

文件 ./benchmark/kmeans.py__main__ 部分中的一些参数(如 n_clustersmax_iterskip_slow 等)可进行快速编辑。

关于首选浮点精度的说明

在许多机器学习应用中,使用单精度(float32)浮点数据进行的操作比双精度(float64)浮点数据少占用两倍内存,速度更快,精度足够,更适合 GPU 计算。此外,大多数用于机器学习项目的 GPU 在 float32 上的速度比在双精度(float64)浮点数据上要快得多。

为了充分利用 GPU 执行的潜力,强烈建议使用加载数据为 float32 的数据加载器。默认情况下,除非明确指定,否则 numpy 数组创建时使用的是 float64 类型,因此当加载器没有明确说明类型或提供类型选项时,请特别小心。

虽然不推荐避免不必要的数据复制,但也可以使用以下示例中的 numpy.ndarray.astype 类型转换器将 float64 numpy 数组转换为 float32 数组

X = my_data_loader()
X_float32 = X.astype(float32)
my_gpu_compute(X_float32)

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分布

此版本没有可用的源分布文件。请参阅 生成分布存档 的教程。

构建分布

sklearn_numba_dpex-0.1.0.dev0-py3-none-any.whl (6.9 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面