当滴滴云notebook遇见rapids: 使用GPU加速数据分析和机器学习
正如NVIDIA公司创始人黄仁勋所说,数据科学家以及机器学习专家饱受算力限制导致的效率低下之折磨和困扰。而RAPIDS正是可以充分利用GPU的强大算力来为数据科学家提供支持的强有力的工具,它第一次为数据科学家提供了他们需要用来在GPU上运行整个数据科学的标准流水线工具......
▎背景
随着深度学习的流行,GPU被用来加速深度学习的训练已经非常常见,并且被各个深度学习框架所支持。然而,对于广大的数据科学家们来说,他们还难以利用上GPU的高性能优势。
大量传统的经典机器学习算法,以及整个数据科学计算和分析的流程,GPU并没有的良好支持;围绕GPU计算能力的大数据分析和计算的软件生态或者工具栈也并不丰富。正如NVIDIA公司创始人兼首席执行官黄仁勋所说,数据科学家以及机器学习专家饱受算力限制导致的效率低下之折磨和困扰。
由于算力的限制,在数据模型训练期间或者数据处理过程期间,科学家只能频繁的喝咖啡以打发等待的时间。下图以幽默的方式,阐述了科学家的这种无奈:
Figure 1. GPU-powered data science enables much greater interactivity, but affords fewer coffee breaks.
(图片来源于rapids官网)
如果能够在数据分析领域,以及在深度学习之前的训练数据处理阶段,就能利用上GPU的高性能优势,则对整个行业提高效率来说,肯定具有巨大意义!
NVIDIA开发的CUDA,将GPU编程的难度大大降低。然而,对于数据科学或数据分析来说,依然还是不够的。在CUDA之上的开发,大多数依然停留在C语言层面。在继续阐述之前,我们不得不提数据科学界的另一个极受欢迎的工具——python!
Python在数据科学界红的发紫,而且愈演愈烈。在Python的世界里,形成了丰富的数据科学和分析的工具软件栈。这其中包括非常流行的数值计算的基础包Numpy、数据分析和处理的工具Pandas、以及机器学习包scikit-learn。
▎RAPIDS的出现
将这些已经存在的软件或工具包直接运行在GPU上,显然是不可能的。抛弃这些丰富的且已经被业界广泛使用的资源而另开炉灶,无异于天方夜谭。
而RAPIDS正是可以充分利用GPU的强大算力来为数据科学家提供支持的强有力的工具,它第一次为数据科学家提供了他们需要用来在GPU上运行整个数据科学的标准流水线工具。
虽然RAPIDS是由英伟达主导研发,但开源是RAPIDS非常重要的一点。整个RAPIDS是英伟达与包括Anaconda、BlazingDB、Databricks、Quansight、scikit-learn、Ursa Labs 负责人兼 Apache Arrow 缔造者 Wes McKinney 以及迅速增长的 Python 数据科学库 pandas 等在内的众多开源社区以及开源生态系统贡献者紧密合作的产物。
英伟达也希望通过开源这种方式,可以有更多开源开发者,来贡献他们的代码、智慧,不断丰富和完善整个平台上面的基础特性,服务更多场景,更好的将业界已经积累起来的丰富的经验和成果,集成到RAPIDS里面来。
滴滴云GPU产品团队也看到了RAPIDS巨大的行业应用潜力和前景。因此我们提供了基于最新的RAPIDS 0.14版本的镜像,结合我们简单易用的DAI开发环境,以及底层高性能的GPU云实例服务器资源,为数据科学和分析,提供了简单易用和高效的解决方案。下面我们将对RAPIDS和滴滴云GPU RAPIDS环境做较为详细的介绍。
▎ RAPIDS的简介:
RAPIDS构建于Apache Arrow、pandas和scikit-learn等流行的开源项目之上,包含cuDF、cuML、cuGraph等组件;底层采用C语言编写,利用CUDA和GPU加速。上层提供了Python接口,整体架构如下图所示:
cuDF:
cuDF是一个基于 Apache Arrow 列内存格式的 GPU DataFrame库,它可以进行加载、连接、聚合、过滤等常见的数据操作。另外,它提供了类似于pandas的API,数据科学家或工程师都很熟悉它,易于理解掌握和使用;无需了解底层CUDA实现细节。如以下代码:
import cudf, io, requests
from io import StringIO
url = "https://github.com/plotly/datasets/raw/master/tips.csv"
content = requests.get(url).content.decode('utf-8')
tips_df = cudf.read_csv(StringIO(content))
tips_df['tip_percentage'] = tips_df['tip'] / tips_df['total_bill'] * 100
# display average tip by dining party size
print(tips_df.groupby('size').tip_percentage.mean())
通过上面的代码段可以看到它和pandas的使用方式非常相似。另外,在我们滴滴云notebook产品上申请NVIDIA Tesla P40型号的notebook实际测试cuDF性能,得到结果如下:
从上图可以看到,cuDF通过GPU加速,性能得到了极大的提高。上述代码示例中cuDF对比CPU版本实际加速超过30倍!非常可观!
cuML:
cuML提供了传统经典的机器学习算法GPU实现版本,另外还提供了其他基础的数学运算API。同样,cuML使用方式类似于现有的scikit-learn,使得数据科学家不必深入cuda细节,就可以方便的使用。另外,cuML性能高效。对比CPU,cuML在某些场景下可以提供10-50倍的性能加速。下图是一段使用DBSCAN算法进行聚类的代码,可以看到它的API和使用方式和scikit-learn非常相似。
import cudf
from cuml.cluster import DBSCAN
# Create and populate a GPU DataFrame
gdf_float = cudf.DataFrame()
gdf_float['0'] = [1.0, 2.0, 5.0]
gdf_float['1'] = [4.0, 2.0, 1.0]
gdf_float['2'] = [4.0, 2.0, 1.0]
# Setup and fit clusters
dbscan_float = DBSCAN(eps=1.0, min_samples=1)
dbscan_float.fit(gdf_float)
print(dbscan_float.labels_)
同样,我们在滴滴云notebook产品申请了一个NVIDIA Tesla P40型号的notebook实例,实际测试了一下cuML的性能,得到结果如下图:
从上图可以看到,上述简单的代码示例,经过了GPU加速后,cuML的实际性能,比CPU上的版本性能提高了非常多!是数量级的差别。
cuGraph:
cuGraph是实现了图相关算法的程序库,cuGraph的使命是使得数据科学家只关心业务逻辑本身而不必为了技术或框架担忧。它可以利用cuDF进行数据加载、处理,也可以使用cuML进行机器学习;同时,在API方面,它和已经广泛使用的程序库NetworkX类似,方便且易于上手!下图是一段简单的cuGraph代码示例:
import cugraph
# read data into a cuDF DataFrame using read_csv
cu_M = cudf.read_csv("graph_data.csv", names=["src", "dst"], dtype=["int32", "int32"])
# We now have data as edge pairs
# create a Graph using the source (src) and destination (dst) vertex pairs
G = cugraph.Graph()
G.from_cudf_edgelist(cu_M, source='src', destination='dst')
# Let's now get the PageRank score of each vertex by calling cugraph.pagerank
df_page = cugraph.pagerank(G)
# Let's look at the PageRank Score (only do this on small graphs)
for i in range(len(df_page)):
print("vertex " + str(df_page['vertex'].iloc[i]) +
" PageRank is " + str(df_page['pagerank'].iloc[i]))
另外,除了上述三大组件外,RAPIDS程序库还提供了:
cuSignal
cuSpatial
cuxfilter
其中,cuSignal是模拟SciPy API实现了信号处理的一个组件; cuSpatial实现了空间和轨迹数据处理的程序库;cuxFilter是一个数据可视化的工具库;上述全部组件我们滴滴云RAPIDS镜像里都已经具备,可以在我们滴滴云GPU notebook产品里直接使用。
▎ 总结:
总之,RAPIDS套件还在不断的完善当中,对RAPIDS得相关组件和API不做过多得展开介绍,详细情况可以参考。
综上也可以看到RAPIDS在利用GPU进行高效高性能得加速的基础上,在API和使用方式方面延续了数据分析界广泛使用得各个工具得API和使用习惯,简单易用、方便上手。
在滴滴云GPU notebook产品里,我们将易用性更进一步。结合我们的DAI notebook产品,可以直接在基于jupyter环境的notebook里进行开发、调试、运行,简单易用。
开发者不但不用关心底层CUDA和GPU技术细节,而且,我们屏蔽了操作系统、硬件环境差异,使得开发者可以全心得聚焦和投入到数据分析最核心得业务逻辑上去,滴滴云DAI notebook产品和底层得GPU云服务器,为这一切提供了强有力得底层技术支撑。更关键的是,物美价廉,性价比高!欢迎大家使用!
作者:郭鸿岩【滴滴出行专家工程师】
▎如何使用:
(先注册)
读者福利:在购买GPU产品或notebook产品,结算时候,输入大师码:9999,立享原基础上的9折优惠!
更多推荐
▬
推荐阅读
▬