透明人,教师资格证报考条件-遇见斯里兰卡,换个角度去旅行,斯里兰卡旅行计划

雷锋网 AI 科技谈论按,数据科学家需求算力。不论您是用 pandas 处理一个大数据集,仍是用西左的疯人 Numpy 在一个大矩阵上运转一些核算,您都需求一台强壮的机器,以便在合理的时刻内完结这项作业。

在曩昔的几年中,数据科学家常用的 Python 库现已十分拿手运用 CPU 才能。

Pandas 的根底代码是用 C 言语编写的,它能够很好地处理巨细超越 100GB 的数据集。假如您没有满足的 RAM 来包容这样的数据集,那么您能够运用分块功用,它很便利,能够一次处理一个数据块。

GPUs vs CPUs:并行处理

有了很多的数据,CPU 就不会堵截它了。

一个超越 100GB 的数据集将有许多数据点,数据点的数值在数百万乃至数十亿的范围内。有了这么多的数据点要处理,不论你的 CPU 有多快,它都没有满足的内核来进行有用的并行处理。假如你的 CPU 有 20 个内核(这将是适当贵重的 CPU),你一次只能处理 2吉祥suv0 个数据点!

CPU 在时钟频率更重要的使命中会更好——或许底子没有 GPU 完结。假如你测验履行的流程有一个 GPU 完结,且该使命能够从并行处理中获益,那么 GPU 将愈加有用。

雷峰塔

多核体系怎么更快地处理数据。关于单核体系(左),全部 10 个使命都转到一涩涩撸个节点。关于双核系龙芯统(右),每个节点承当 5 个使命,从而使处理速度加倍

深度学习现已在运用 GPU 方面发挥了适当大的效果。许多在深度学习中完结的卷积操作是重复的,因而在 GPU 上能够大大加快,乃至能够到达 100 次。

今日的数据科学没有什么不同,因为许多重复的操作都是在大数据集上履行的,库中有 panda第二军医大学s、Numpy 和 scikit-learn。这些操作也不太杂乱,无法在 GPU 上完结。

最终,还有一个九阳豆浆机解决方案。

用 Rapids 加快 GPU

Rapids 是一套软件库,旨在穿条纹睡衣的男孩运用 GPU 加快数据科学。它运用初级其他 CUDA 代码完结快速的、GPU 优化的算法,一起它上面还有一个易于运用的 Pyt人女hon 层。

Rapids 的美好之处在于它与数据科学库的集成十分顺畅,比方 pandas 数据帧就很简略经过 Rapids 完结 GPU 加快。下图阐明晰 Rapids 怎么在坚持顶层易用性的一起完结低层的加快。

Rapids 运用了几个 Python 库:

  • cuDF-Python GPU 数据帧。它简直能够做 pan昆山财政局管帐之窗das 在数据处理和操作方面所能做的全部。
  • cuML-cuGraph 机器学习库。它包含了 Scikit-Learn 具有的许多 ML 算法,全部算法的格局都十分类似。
  • cuGraph-c透明人,教师资格证报考条件-遇见斯里兰卡,换个视点去游览,斯里兰卡游览方案uGrap秤杆提米h 图处理库。它包含许多常见的图剖析算法,包含 PageRank 和各种类似性衡量。

怎么运用 Rapids

装置

现在你将看到怎么运用 Rapids!

要装置它,请拜访这个网站,在这里你将看到怎么装置 Rapids。你能够经过 Conda 将其直接装置到你的机器上,或许简略地运用 Docker 容器。

装置时,能够设置体系标准,如 CUDA 版别和要装置的库。例如,我有 CUDA 10佐藤健.0,想要装置全部库,所以我的装置指令是:

conda install -c nvidia -c rapidsai -c numba -c conda-forge -c pytorch -c defaults cudf=0.8 cuml=0.8 cugraph=0.8 python=3.6 cudatoolkit=10.0

conda install -c nvidia -c rapidsai -c numba -c conda-forge -c pytorch -c defaults cudf=0.8 cuml=0.8 cugraph=0.8 python=3.6 cudatoolkit=10.0

一旦指令完结八珍汤运转,就能够开端用 GPU 加快数据科学了。

设置咱们的数据

关于本教程,咱们将介绍 DBSCAN demo 的修正版别。我将透明人,教师资格证报考条件-遇见斯里兰卡,换个视点去游览,斯里兰卡游览方案运用 Nvidia 数据科学作业站和 2 个 GPU 运转这个测验。

DBSCAN 是一种根据密度的聚类算法,能够主动对数据进行分类,而无需用户指定有多少组数据。在 Scikit-Learn 中有它的完结。

咱们将从获取全部导入设置开端。先导入用于加载数据、可视化数据和运用 ML 模型的库。

import os

import matplotlib.pyplot as plt

from matplotlib.colors import ListedColormap

from sklearn.datasets import make_circles

import os

import matplotlib.pyplot as plt

from matplotlib.colors import ListedColormap

from sklearn.datasets import make_circles

make_circles 函数将主动创立一个杂乱的数据散布,类似于咱们将运用于 DBSCAN 的两个圆。

让咱们从创立 100000 点的数据集开端,并在图中可视化:

X, y = make_circles(n_samples=int(1e5), factor=.35, noise=.05)

X[:, 0] = 3*X[:, 0]

X[:, 1] = 3*X[:, 1]

plt.scatter(X[:, 0], X[:, 1])

plt.show

X, y = make_circles(n_samples=int(1e5), factor=.35, noise=.05)

X[:, 0] = 3*X[:, 0]

X[:, 1] = 3*X[:, 1]

plt.scatter(X[:云虞之欢, 0], X[:, 1])

plt.show

CPU 上的 DBSCAN

运用 Scikit-Learn 在 CPU 上运转 DBSCAN 很简略。咱们将导入咱们透明人,教师资格证报考条件-遇见斯里兰卡,换个视点去游览,斯里兰卡游览方案的算法并设置一些参数。

from sklearn.cluster import DBSCAN

db = DBSCAN(eps=0.6, min_sample透明人,教师资格证报考条件-遇见斯里兰卡,换个视点去游览,斯里兰卡游览方案s=2)

from sklearn.cluster import DBSCAN

db = DBSCAN(eps=0.6, min_samples=2)

咱们现在能够经过调用 Scikit-Learn 中的一个函数对循环数据运用 DBSCAN。在天之蓝价格函数前面加上一个「%」,就能够让 Jupyter Notebook 丈量它的运转时刻。

%%time

y_db = db.fit_predict(X)

%%time

y_db = db.fit_predict(X)

这 10 万个点的运转时刻是 8.31 秒,如下图所示:

运用 Scikit-Learn 在 CPU 上运转 DBSCAN 的成果

GPU 冷空气上带 Rapids 的 DBSCAN

现在,让咱们用 Rapids 进行加快!

首要,咱们将把数据转换为 pandas.DataFrame 并运用它创立一个 cudf.DataFrame。pandas.DataFrame 无缝转换成 cudf.DataFrame,数据格局无任何更改。

import pandas as pd

import cudf

X_df = pd.DataFrame({'fea%d'%i: X[:, i] for i in range(X.shape[1])})

X_gpu = cudf.DataFrame.from_pandas(X_df)

import pandas as pd

import cudf

X_df = pd.DataFrame({'fea%d'%i: X[:, i] for i in range(X.shape[1])})

X_gpu = cudf.DataFrame.from_pandas(X_df)

然后咱们将从 cuML 导入并初始化一个特别版别的 DBSCAN,它是 GPU 加快的版别。DBSCAN 的 cuML 版别的函数格局与 Scikit-Learn 的函数格局完全相同:相同的参数、相同的款式、相同的函数。

from cuml import DBSCAN as cumlDBSCAN

db_gpu = cumlDBSCAN(eps=0.6, min_samples=2)

from cuml import DBSCAN as cumlDBSCAN

db_gpu = cumlDBSCAN(eps=0.6, min_samples=2)

最终,咱们能够在丈量运转时刻的一起运转 GPU DBSCAN 的猜测函数。

%%time

y_db_gpu = db_gpu.高原反响fit_predict(X_gpu)

%%time

y_db_gpu = db_gpu.fit_predict(X_gpu)

GPU 版别的运转时刻为 4.22 秒,简直加快了 2 倍。因为咱们运用的是相同的算法,因而成果图也与 CPU 版别完全相同。

运用 cuML 在 GPU 上运转 DBSCAN 的成果

运用 Rapids GPU 取得超高速

咱们从 Rapids 取得的加快量取决于咱们正在处理的数据量。一个好的经历法则是,较大的数据集将愈加500克是多少斤获益于 GPU 加快。在 CPU 和 GPU 之间传输数据有一些开支时刻——关于较大的数据集,开支时刻变得更「值得」。

咱们能够用一个简略的比如来阐明这一点。

咱们将创立一个随机数的 Numpy 数组并对其运用 DBSCAN。咱们将比较惯例 CPU DBSCAN 和 cuML 的 GPU 版别的速度,一起添加和削减数据点的数量,以了解它怎么影响咱们的运转时刻。

下面的代码阐明怎么进行测验:

import numpy as np

n_rows, n_cols = 10000, 100

X = np.random.rand(n_rows, n_cols)

print(X.shape)

X_df = pd.DataFrame({'fea%d'%i: X[:, i] for i in range(X.shape[1])})

X_gpu = cudf.DataFrame.from_pandas(X_df)

db = DBSCAN(eps=3, min_samples=2)

db_gpu = cumlDBSCAN(eps=3, min_samples=2)

%%time

y万科a_db = db.fit_predict(X)

%%time

y_db_gpu = db_gpu.fit_predict(X_gpu)

import numpy as np

n_rows, n_cols = 10000, 100

X = np.random.rand(n_rows, n_cols)

print(X.shape)

X_df = pd.DataFrame({'fea%d'%i: X[:, i] f透明人,教师资格证报考条件-遇见斯里兰卡,换个视点去游览,斯里兰卡游览方案or i in range(X.shape[1])})

X_gpu = cudf.DataFrame.from_pandas(X_df)

db = DBSCAN(eps=3, min_samples=2)

db_gpu = cumlDBSCAN(eps=3, min_samples=2)

%%t透明人,教师资格证报考条件-遇见斯里兰卡,换个视点去游览,斯里兰卡游览方案ime

y_db = db.fit_predict(X)

%%time

y_db_gpu = db_gpu.fit_predict(X_gpu)

查看下面的 Matplotlib 成果图:

当运用 GPU 而不是 CPU 时,数量会急剧添加。即便在 10000 点(最左面),咱们的速度仍然是 4.54x。在更高的一端,1 千万点,咱们切换到 GPU 时的速度是 88.04x!

Via:https://www.kdnuggets.com/2019/07/accelerate-data-science-on-gpu.html

雷锋网雷锋网

 关键词: