如何通过Maingear的新型Data Science PC将NVIDIA GPU用于机器学习

2019-10-31 13:26:56 浏览数 (1)

作者 | DéborahMesquita

来源 | Medium

编辑 | 代码医生团队

深度学习使我们能够执行许多类似人类的任务,但是如果是数据科学家并且没有在FAANG公司工作(或者如果没有开发下一个AI初创公司),那么仍然有可能会使用和旧的(好吧,也许不是那么古老)机器学习来执行日常任务。

深度学习的一个特点是它的计算量很大,因此所有主要的DL库都利用GPU来提高处理速度。但是,如果因为不使用深度学习而感到被淘汰,那段日子已经过去了:有了RAPIDS库套件,现在可以完全在GPU上运行数据科学和分析管道。

https://developer.nvidia.com/rapids

在本文中,将讨论其中的一些RAPIDS库,并进一步了解Maingear的新型Data Science PC。

人们为什么仍然使用GPU?

一般来说,GPU之所以快,是因为它们具有高带宽的内存和以比传统CPU更高的速率执行浮点运算的硬件[1]。GPU的主要任务是执行渲染3D计算机图形所需的计算。

但是在2007年,NVIDIA创建了CUDA。CUDA是一个并行计算平台,为开发人员提供API,使能够构建可以利用GPU进行通用处理的工具。

GPU已经发展成为高度并行的多核系统,可以非常高效地处理大数据块。在并行处理大数据块的情况下,此设计比通用中央处理器(CPU)更有效的算法-Wikipedia上的CUDA文章 [2]

基本上,机器学习会执行处理大量数据的操作,因此GPU在执行ML任务时非常方便。TensorFlow和Pytorch是已经利用GPU的库的示例。现在,借助RAPIDS库套件,还可以操纵数据帧并在GPU上运行机器学习算法。

快速

RAPIDS是一套开放源代码库,可与流行的数据科学库和工作流集成在一起以加快机器学习的速度[3]。

一些RAPIDS项目包括cuDF(类似于Pandas的数据框操作库)。cuML,机器学习库的集合,将提供sciKit-learn中可用的GPU版本的算法;cuGraph,类似于NetworkX的加速图分析库[4]。

https://github.com/rapidsai/cudf

https://github.com/rapidsai/cuml

Pandas和sciKit-learn是两个主要的数据科学库,因此让我们进一步了解cuDF和cuML。

cuDF:数据帧操作

cuDF提供了类似Pandas的API,用于数据帧操作,因此,如果知道如何使用Pandas,那么已经知道如何使用cuDF。如果想跨多个GPU分配工作流,则还有Dask-cuDF库[5]。

可以像Pandas一样创建系列和数据框:

代码语言:javascript复制
import numpy as np
import cudf
s = cudf.Series([1,2,3,None,4])
df = cudf.DataFrame([('a', list(range(20))),
                     ('b', list(reversed(range(20)))),
                     ('c', list(range(20)))])

也可以将pandas数据帧转换为cuDF数据帧(但不建议这样做):

代码语言:javascript复制
import pandas as pd
import cudf
df = pd.DataFrame({'a': [0, 1, 2, 3],'b': [0.1, 0.2, None, 0.3]})
gdf = cudf.DataFrame.from_pandas(df)

也可以做相反的事情,将cuDF数据帧转换为pandas数据帧:

代码语言:javascript复制
import cudf
df = cudf.DataFrame([('a', list(range(20))),
                     ('b', list(reversed(range(20)))),
                     ('c', list(range(20)))])
pandas_df = df.head().to_pandas()

或转换为numpy数组:

代码语言:javascript复制
import cudf
df = cudf.DataFrame([('a', list(range(20))),
                     ('b', list(reversed(range(20)))),
                     ('c', list(range(20)))])
df.as_matrix()
df['a'].to_array()

对数据框所做的所有其他操作(查看数据,排序,选择,处理缺失值,使用csv文件等)均相同:

代码语言:javascript复制
import cudf
df = cudf.DataFrame([('a', list(range(20))),
                     ('b', list(reversed(range(20)))),
                     ('c', list(range(20)))])
df.head(2)
df.sort_values(by='b')
df['a']
df.loc[2:5, ['a', 'b']]
s = cudf.Series([1,2,3,None,4])
s.fillna(999)
df = cudf.read_csv('example_output/foo.csv')
df.to_csv('example_output/foo.csv', index=False)

关于性能,仅举一个例子,使用Pandas加载1gb的csv文件花费了13秒,而使用cuDF加载它花费了2.53秒。

使用cuDF更快地加载1GB CSV 5倍

cuML:机器学习算法

cuML与其他RAPIDS项目集成,以实现机器学习算法和数学基元函数。在大多数情况下,cuML的Python API与sciKit-learn中的 API匹配。该项目仍然有一些局限性(例如,目前无法腌制cuML RandomForestClassifier实例),但是它们的发布周期很短,为期6周,因此它们总是会添加新功能。

除其他工具外,还有回归,分类,聚类和降维算法的实现。该API与sciKit API确实非常一致:

代码语言:javascript复制
import cudf
import numpy as np
from cuml.linear_model import LogisticRegression
 
X = cudf.DataFrame()
X['col1'] = np.array([1,1,2,2], dtype = np.float32)
X['col2'] = np.array([1,2,2,3], dtype = np.float32)
y = cudf.Series( np.array([0.0, 0.0, 1.0, 1.0], dtype = np.float32) )
# training
reg = LogisticRegression()
reg.fit(X,y)
 
print("Coefficients:")
print(reg.coef_.copy_to_host())
print("Intercept:")
print(reg.intercept_.copy_to_host())
# making predictions
X_new = cudf.DataFrame()
X_new['col1'] = np.array([1,5], dtype = np.float32)
X_new['col2'] = np.array([2,5], dtype = np.float32)
 
preds = reg.predict(X_new)
 
print("Predictions:")
print(preds)

Maingear的Data Science PC

一切都很好,但是如何使用这些工具?好吧,首先,需要获得与RAPIDS兼容的NVIDIA GPU卡。如果不想花时间找出硬件规格的最佳选择,那么NVIDIA将发布Data Science PC。

PC随附经过优化的软件堆栈,可运行所有这些用于机器学习和深度学习的库。它随Ubuntu 18.04一起提供,可以使用NVIDIA GPU Cloud中的 Docker容器,也可以使用本机conda环境。关于PC的最好的事情之一就是完全安装了所有库和软件。如果不得不在Linux发行版上安装NVIDIA驱动程序,或者必须从源代码安装TensorFlow,就会知道这是多么的梦幻。这些是系统配置:

显卡

具有24 GB GPU内存的NVIDIA Titan RTX 或通过NVIDIA NVLink连接的2路NVIDIA Titan RTX,提供了总计48 GB GPU内存

CPU

Intel Core i7类CPU 或更高版本

内存

48 GB DDR4系统内存为最小单个GPU配置和 的DDR4 GB的96系统存储器最小为双GPU配置

硬盘

至少1 TB SSD

该Maingear公司VYBE PRO数据科学PC配备了多达两个双NVIDIA TITAN RTX 24GB卡,每个PC是手工组装。

https://maingear.com/nvidiadatascience/

一个来自Maingear公司VYBE PRO PC有两个NVIDIA TITAN RTX卡(这件事是如此美丽我害怕打开它)

在VYBER PRO PC上使用具有4,000,000行和1000列的数据集(此数据帧使用大约15 GB的内存)训练XGBoost模型在CPU上花费1分钟46s(内存增量为73325 MiB) ,在GPU上仅花费21.2s(内存增量为520 MiB)。

使用GPU更快地训练XGBoost模型5倍

结论

借助数据科学,始终需要探索和尝试新事物。在使工作流程变得困难的其他软件工程挑战中,计算数据的大小和时间是两个瓶颈,这两个瓶颈使无法在运行实验时进入流程状态。拥有一台可以改善这一点的PC和工具确实可以加快工作,并帮助更快地在数据中发现有趣的模式。想象得到一个40 GB的csv文件,然后只需将其加载到内存中即可查看其内容。

RAPIDS工具为机器学习工程师带来了深度学习工程师已经熟悉的GPU处理速度的提高。为了生产使用机器学习的产品,需要进行迭代并确保拥有可靠的端到端流水线,并且使用GPU执行它们将有望改善项目输出。

参考文献

[1] https://graphics.stanford.edu/papers/gpumatrixmult/gpumatrixmult.pdf

[2] https://en.wikipedia.org/wiki/CUDA

[3]https://nvidianews.nvidia.com/news/nvidia-introduces-rapids-open-source-gpu-acceleration-platform-for-large-scale-data-analytics-and-machine-learning

[4] https://rapids.ai/about.html

[5]https://rapidsai.github.io/projects/cudf/zh/0.10.0/10min.html#When-to-use-cuDF-and-Dask-cuDF

0 人点赞