scikit-learn会利用GPU吗?

118

阅读在TensorFlow中实现scikit-learn:http://learningtensorflow.com/lesson6/和 scikit-learn:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html。我正在努力决定使用哪个实现。

scikit-learn作为tensorflow docker容器的一部分安装,因此可以使用任何一个实现。

使用scikit-learn的原因:

scikit-learn包含的样板代码少于tensorflow实现。

使用tensorflow的原因:

如果在Nvidia GPU上运行,则该算法将并行运行,但我不确定scikit-learn是否会利用所有可用的GPU?

阅读https://www.quora.com/What-are-the-main-differences-between-TensorFlow-and-SciKit-Learn

TensorFlow更低级别; 基本上是乐高积木,可帮助您实现机器学习算法,而scikit-learn则为您提供现成的算法,例如分类算法(如SVM,随机森林,逻辑回归等等)。如果您想实现深度学习算法,则TensorFlow表现出色,因为它允许您利用GPU进行更有效的训练。

这个声明强化了我的主张,“scikit-learn包含的样板代码少于tensorflow实现”,但也表明scikit-learn可能不会利用所有可用的GPU?


经典的scikit-learn库仅支持CPU,如FAQs中所示(编辑:抱歉,我没有在答案中看到这个参考)。 (此外,我检查过的所有sklearn代码都不支持GPU) - sascha
1
NVIDIA已经发布了他们自己的版本,支持GPU的sklearn。 - mhdadk
3个回答

150

Tensorflow只有在构建时与Cuda和CuDNN配合使用才会使用GPU。默认情况下,它不会使用GPU,特别是如果在Docker中运行,除非您使用了内置支持的nvidia-docker镜像。

Scikit-learn不适用于作为深度学习框架,并且不提供任何GPU支持。

为什么scikit-learn没有深度或强化学习支持?它将来会支持深度或强化学习吗?

深度学习和强化学习都需要一个丰富的词汇表来定义体系结构,其中深度学习还需要GPU进行高效计算。然而,这两者都不能符合scikit-learn的设计约束;因此,深度学习和强化学习目前超出了scikit-learn所追求的范围。

摘自http://scikit-learn.org/stable/faq.html#why-is-there-no-support-for-deep-or-reinforcement-learning-will-there-be-support-for-deep-or-reinforcement-learning-in-scikit-learn

您会在scikit-learn中添加GPU支持吗?

不会,至少在不久的将来不会。主要原因是GPU支持将引入许多软件依赖项并引入特定于平台的问题。scikit-learn旨在易于安装在各种平台上。除了神经网络外,GPU在机器学习中的作用不是很大,通过仔细选择算法通常可以实现更大的速度提升。

摘自http://scikit-learn.org/stable/faq.html#will-you-add-gpu-support

这里的翻译是:本文节选自http://scikit-learn.org/stable/faq.html#will-you-add-gpu-support。

3
NVIDIA已经发布了他们自己的版本,支持GPU的sklearn。 - mhdadk

17

我正在尝试使用一种可插拔的解决方案(h2o4gpu),特别是针对Kmeans利用GPU加速:

请尝试这个:

from h2o4gpu.solvers import KMeans
#from sklearn.cluster import KMeans

截至目前,版本0.3.2仍然没有.inertia_,但我认为这在他们的TODO列表中。

编辑:尚未测试,但scikit-cuda似乎正在引起关注。

编辑:RAPIDS真的是值得一试的。


1
更具体地说,RAPIDS下的 cuML 项目是一个带有GPU支持的sklearn镜像。 - mhdadk

8

根据我的经验,我使用这个软件包此处为一些sklearn算法利用GPU。

我使用的代码:

import numpy as np
import dpctl
from sklearnex import patch_sklearn, config_context
patch_sklearn()

from sklearn.cluster import DBSCAN

X = np.array([[1., 2.], [2., 2.], [2., 3.],
            [8., 7.], [8., 8.], [25., 80.]], dtype=np.float32)
with config_context(target_offload="gpu:0"):
    clustering = DBSCAN(eps=3, min_samples=2).fit(X)

来源:Intel(R) Extension for Scikit-learn 中的 oneAPI 和 GPU 支持


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接