基于numba-dpex的scikit-learn计算引擎
项目描述
sklearn-numba-dpex
为scikit-learn提供实验性插件,使其能够通过numba-dpex在Intel GPU上运行(一些估计器)。
免责声明:这是一个正在进行中的工作,不要期望这个仓库目前处于可用状态。
这需要使用以下分支的scikit-learn,该分支本身目前也处于非工作状态。
wip-engines
分支位于 https://github.com/ogrisel/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_clusters
、max_iter
、skip_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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b7dac17d0e381e6b323cf30ff55bd141b7b95cfd85e5039019a7cdda85cd54b5 |
|
MD5 | 2aba61b0072a228dd7e2e0c9f09f7359 |
|
BLAKE2b-256 | ddf3fd16005ace3b15a34615950c9f1dc8faf85cf8c0728169f8c2bec3dc3c0e |