Nvidia的人工智能野心

2019-10-08 11:50发布

原文来自ZDNet,作者George Anadiotis

原文链接:https://www.zdnet.com/article/nvidia-rapids-cugraph-making-graph-analysis-ubiquitous/


Nvidia很早就不“仅仅”是一家硬件公司了。当Nvidia的硬件为海量的人工智能运算保驾护航的同时,它也已经开始打通其软件业务发展的“最后一英里”。

为完成这一任务,Nvidia投身于开发和发布程序库(libraries),这类库可帮助软件开发人员和数据科学家在工作中将GPU的计算和处理能力整合到一起。

假设很简单:并不是每个人都想成为并行方面的专家。并行编程固然困难(Parallel programming)(译注:通过编码方式利用多核或多处理器称为并行编程),但为了发挥GPU的作用并提高软件性能和分析水平,并行编程又是十分有必要的。

因此,Nvidia提供了库,让人们在不知道所有实现方法和硬件原理的细节时,仍可以利用库去开发自己的软件。

自2007年起,Nvidia就一直与运算平台CUDA(Compute Unified Device Architecture)合作。

至今,Nvidia已发布了超过40个Nvidia CUDA-X库,其中最新发行的是加速库Rapids。它是一个开源数据平台,为并行计算库Dask和机器学习系统XGBoost等数据科学项目提供了发展空间。

Nvidia现在发布了Rapids cuGraph 0.9,旨在普及图像分析技术。这一举措可能会成为图像分析和图像数据库的发展的基石。

我们一直密切关注图像领域,而Nvidia所做的一切让我们知道我们并不孤单。但是Rapids cuGraph 0.9的重要性远不及于此。

极速发展的图像分析

以下这段摘自研究机构Gartner在《为什么图像将会在2020年代主宰世界》(Why graph will rule the world in the 2020s)一文中的分析:

“到2022年,为了不断加速数据准备工作的进程,并支持更复杂且更灵活的自适应(译注:自适应就是在处理和分析过程中,根据处理数据的数据特征自动调整处理方法、处理顺序等参数条件,使其与所处理数据特征相适应,以取得最佳的处理效果的过程。)数据科学的发展,图像处理和图像数据库的应用量每年都将增长一倍。

然而,Nvidia的技术骨干布拉德·里斯(Brad Rees)早就开始了对图像处理的应用。

里斯从20世纪80年代开始从事图像编程和分析、数据科学以及人工智能方面的工作。里斯在几年的时间里接手过数个项目,然后在2017年加入Nvidia。

在当时,图像分析还只是Nvidia内部的一个新尝试。而现在布拉德·里斯已经是Nvidia人工智能基础设施部的经理,他的任务是将图像分析和算法推广到世界各地。

里斯在CUDA 2.0发布时便对GPU编程产生了兴趣。正如其他人所指出的那样,图像处理中使用的网格完美匹配了图像处理技术:网格的每个节点表示一个概念,每个边则表示一个关系。

由此能推出一个显而易见的重要结论:GPU确实可以加速图像处理。当里斯加入时,Nvidia已经在GPU上实现了一些图像算法。

然而,正如里斯所解释的,这些算法的使用仍不够系统化、规范化,或者说,在Nvidia的生态系统中这些算法并没有很好地整合在一起。

算法集合的扩展使得图像处理也得到了发展,于是图像分析库cuGraph诞生了,里斯成为了该产品项目的负责人。

cuGraph是一个通过Nvidia GPU实现图像算法的库。如果你对图像算法不感兴趣,你可能不能理解这是什么意思。

所以为了更好地联系上下文来理解它,我们先来谈谈著名算法PageRank。PageRank也是一种图像算法,而Google正是在PageRank上建立了自己的帝国。

图像算法有很多,每种算法都可以为不同的数据分析场景提供支持。当cuGraph的第一个官方版本0.6在3月底发布时,它已经囊括了许多算法,包括PageRank。这个最初的版本包括了几种能优化单个GPU分析的算法,旨在为之后的发展打下基础。

随着版本0.9的发布,Nvidia cuGraph离1.0版又近了一步。正如里斯所解释的那样,他们的目标不仅是要不断地添加cuGraph上算法,而且还要使它们能够在多个GPU上工作。

现在PageRank做到了这一点。但是,早在cuGraph的 0.6版本中,它的处理速度就已经比复杂网络分析库NetworkX快了2000倍。

NetworkX是编程语言Python的一个图像分析框架,cuGraph就是在这个框架上建模的,它可以在GPU上完成NetworkX能做到的一切。

选择NetworkX是因为它是最受数据科学家欢迎的图像框架。NetworkX的极速发展本就是一项了不起的成就,但cuGraph的野心远不止于此。

Nvidia cuGraph的野心

里斯指出,cuGraph的开发将逐渐向提高易用性、互用性(interoperability,指一个系统或者一个产品和其它系统、产品在没有其它特殊的帮助条件下共同工作的能力)迈进,未来,它将与Nvidia Rapids库的其他部分集成为一个整体。

在一篇文章中,里斯继续解释了cuGraph是如何利用属性图范例的,以及数据帧(Data Frames)为什么是Rapids互用性的关键。(译注:一个属性图是由顶点Vertex,边Edge,标签Label,关系类型和属性Property组成的有向图;数据帧是数据链路层的协议数据单元)

里斯说,数据帧可以用来构建图,在这些图上运行算法,然后根据需要将这些算法生成的数据添加到原始数据帧中。

未来,Nvidia还将在cuGraph中添加动态数据结构。当分析的图像随时间推移发生变化时,这些结构便可以派上用场。随着数据的流入,动态数据结构可以监控和报告网络结构的变化。

在分析过程中使用动态规划结构也同样重要。在许多情况下,结果集的数量和规模无法仅凭经验来估算。(译注:结果集是对象包含符合SQL 语句中条件的所有行集合。它通过一套get 方法,这些get 方法可以访问当前行中的不同列,提供了对这些行中数据的访问。)能够折叠、展开、添加和减少图像或动态结果绝对是一门强大的技术。

然而,它并没有就此止步。里斯指出,cuGraph将添加最先进的图像分析框架,例如GraphBLAS和Hornet,同时会关注所有新技术的开发,并在cuGraph中将它们完美地整合在一起,供开发人员使用。

然而,属性图的引用引发了一场推测性的讨论,不仅涉及算法,还涉及数据库。建立图像有两种常用的方法,属性图是其中之一。

一些图像数据库就采用了属性图,同时它也是万维网联盟W3C(World Wide Web Consortium)正在进行的标准化图像数据库工作的焦点。

因此,我们想知道cuGraph和图像数据库之间将会如何产生相互作用。首先,我们应该强调它们之间的区别:和图像数据库不同,cuGraph是一个分析框架,经过优化后,它可以加载数据并运行算法。

另一方面,数据库主要用来存储数据。虽然cuGraph并不针对存储数据这一点,但cuGraph可以通过几种方式图像数据库的互相作用实现一定的存储功能。

图像查询和图像数据库

我们已经看到不仅仅是图像数据库,任何数据库都能提供了图像分析和框架。当你建立了关系数据库并将数据存储在数据表中时,该数据库会与查询框架绑定在一起,且该框架允许使用图像查询语言,如Cypher,这样就能实现图像搜索。

那么,既然数据库能做到这一点,cuGraph能做到这一点吗?

里斯指出,增加诸如Cypher的查询功能,在理论上是可行的。然而,这是否能够实现,或何时实现,则是另一回事。

这种查询功能有着异常重要的实用性:将图像处理过程表示为数据查询的一部分,远比使用应用程序接口API(Application Programming Interface)更容易,甚至在交互情景中也是如此。

后者需要编程技能,而前者,即便是没有编程技能的分析师也可以轻松上手。

同样,许多图像数据库也已经开始能运行图像算法。由于运行图像算法是一个常见的用例,那么将它们与cuGraph进行集成以提高图像数据库运行的性能是不是没有意义呢?不,这意义重大。

虽然这还只是推测,但让我们注意以下几点。

首先,有谣言说图像数据库要么已经实现对GPU的支持,要么就是正在开发这个功能。其次,现在我们周围已经有很多数据库支持GPU的运行。

由于现在人们对图像处理的需求越来越大,我们可能很快就会看到一个甚至多个应用程序添加图像处理的功能。

这就是为什么cuGraph被证明是影响图像数据库前景的决定性因素:添加图像查询功能将提升cuGraph的性能,其适用于所有语言的查询能力也将得到增强,而向数据库添加cuGraph也起到相同的作用。因此cuGraph和数据库的强强联合势在必行。

在未来更大的计划中,cuGraph的目标是使图像分析能够在各领域无处不在。这样做不仅意味着更快的分析速度,还可能成为未来人工智能的一块基石。

毕竟在很大程度上,人工智能是通过图像实现的。而cuGraph正是我们需要一直关注的东西。

文章来源: https://www.toutiao.com/group/6745272134186041863/