当前位置: 首页 > 工业电气产品 > 端子与连接器 > 线路板连接器 > FFC连接器

类型分类:
科普知识
数据分类:
FFC连接器

GPU加速 Node.js实现可视化和更高的速度

发布日期:2022-04-22 点击率:35

NVIDIA GTC21 有大量精彩且引人入胜的内容,特别是在 RAPIDS 附近,因此很容易错过我们的首次演示“ 使用 RAPIDS 加速 Node. js Javascript 以实现可视化和更高的速度。 ”是的–我们正在通过 Node.js 项目将 GPU 加速数据科学的力量带到 Javascript Node.js 社区。

Node- RAPIDS 是 Node.js 中模块化 RAPIDS 库绑定的开源技术预览,以及支持基于浏览器的高性能可视化的补充方法。


poYBAGJg_RGASsApAACskN4gI4E854.png

web viz 有什么问题?

大约十年前 是围绕基于 web 的数据可视化的迷你复兴,它展示了 D3 等高度交互、易于共享和使用的工具的好处。虽然性能不如 C / C ++或 Python 框架,但由于 Javascript 的可访问性,它们的受欢迎程度开始上升。毫不奇怪,它通常被列为 最流行的开发人员语言 ,排在 Python 或 Java 之前,现在有了完整的可视化和数据工具目录。

然而,这个庞大的 Javascript 开发社区由于缺乏首选语言中的一流加速数据工具而受到阻碍。当分析与数据源、科学和可视化尽可能接近时,分析是最有效的。要使用 Javascript 完全访问 GPU 硬件(超越 webGL 限制和黑客),需要精通多种语言来设置复杂的中间件管道或使用 Plotly Dash 等非 js 框架。因此,数据工程师、数据科学家、可视化专家和前端开发人员往往被孤立起来,甚至在组织内部也是如此。这是有害的,因为数据可视化是这些群体之间交流的理想媒介。

至于 RAPIDS Viz 团队 自从我们第一次证明概念 ,我们希望构建能够通过浏览器与数亿个数据点实时无缝交互的工具——我们终于找到了一种方法。

为什么选择 Node 。 js

如果您不熟悉 Node.js ,它是一个基于 C / C ++的开源跨平台运行时环境,在 web 浏览器之外执行 Javascript 代码。超过 100 万 Node. js 下载量 per day 。 节点包管理器 ( NPM )是默认的 Javascript 包管理器,微软拥有它。 Node.js 用于 eBay 、 AliExpress 等在线市场的后端,并被 Netflix 、 PayPal 和 Groupon 等高流量网站使用。显然,这是一个强大的框架。

pYYBAGJg_RKATPVpAAKTThE7u88229.png

图 1 : XKCD Node 。 js 是一个通用连接器

Node. js 是一个连接器,它为我们提供了直接访问硬件的 Javascript ,从而简化了 API 并能够使用 NVIDIA CUDA.

. 通过创建节点 – RAPIDS 绑定,我们使一个庞大的开发人员社区能够使用 GPU 加速,而无需学习新语言或在新环境中工作。我们还为同一社区提供高性能数据科学平台: RAPIDS !

下面是一个基于 我们的基本笔记本 的节点 – RAPIDS 的片段,它显示了一个小型正则表达式示例的 6x 加速:


// Using https://github.com/rapidsai/node-rapids/



const cudf = require('@rapidsai/cudf');



const regexps = [

/Cloud|Overcast/,

/Rain|T-Storm|Thunderstorm|Squalls|Drizzle/,

/Snow/,

/Fog/,

/Ice|Hail|Freezing|Sleet/,

/Dust|Smoke|Sand/,

];

?

console.log('');

?

const weather_condition_gpu = cudf.Dataframe.readCSV({

header: 0,

sourceType: 'files',

sources: [`${__dirname}/US_Accidents_Dec20.csv`],

dataTypes: {

id: 'str', source: 'str', tmc: 'float64', severity: 'int32', start_time: 'str', end_time: 'str',

start_lat: 'float64', start_lng: 'float64', end_lat: 'float64', end_lng: 'float64',

distance: 'float64', description: 'str', number: 'int32', street: 'str', side: 'str',

city: 'str', county: 'str', state: 'str', zipcode: 'str', country: 'str', timezone: 'str', airport_code: 'str',

weather_timestamp: 'str', temperature: 'float64', wind_chill: 'float64', humidity: 'float64', pressure: 'float64',

visibility: 'float64', wind_direction: 'str', wind_speed: 'float64', precipitation: 'float64', weather_condition: 'str',

amenity: 'bool', bump: 'bool', crossing: 'bool', give_way: 'bool', junction: 'bool', no_exit: 'bool', railway: 'bool',

roundabout: 'bool', station: 'bool', stop: 'bool', traffic_calming: 'bool', traffic_signal: 'bool', turning_loop: 'bool',

sunrise_sunset: 'str', civil_twilight: 'str', nautical_twighlight: 'str', astronomical_twighlight: 'str'

},

}).get('weather_condition');

?

console.time(`GPU time`);

?

regexps.forEach((regexp) => {

console.time(`${regexp.source} time`);

const matches = weather_condition_gpu.containsRe(regexp.source).sum();

console.timeEnd(`${regexp.source} time`);

console.log(`${regexp.source} matches: ${matches.toLocaleString()}`);

});

?

console.timeEnd(`GPU time`);

?

console.log('');

?

const weather_condition_cpu = (() => {

const categorical = weather_condition_gpu.cast(new cudf.Categorical(new cudf.Utf8String));

const categories = [...categorical.categories];

const codes = [...categorical.codes];

return codes.map((i) => categories[i]);

})();

?

console.time(`CPU time`);

?

regexps.forEach((regexp) => {

console.time(`${regexp.source} time`);

const matches = weather_condition_cpu.reduce((matches, weather_condition) => {

return matches + (regexp.exec(weather_condition) || []).length;

}, 0);

console.timeEnd(`${regexp.source} time`);

console.log(`${regexp.source} matches: ${matches.toLocaleString()}`);

});

?

console.timeEnd(`CPU time`);

?

console.log('');



节点 – RAPIDS :计为构建块

poYBAGJg_ROAJDYzAADfZRoxj_4417.png

图 2 : Node- RAPIDS 模块概述。

与节点项目类似,节点 – RAPIDS 设计为模块化。我们的目标不是构建交钥匙 web 应用程序,而是创建一个 功能清单 ,以支持或加速各种各样的用例和管道。前面是当前和计划节点的概述 – RAPIDS 模块按一般类别分组。 节点 – RAPIDS 应用程序可以根据需要使用任意数量的模块。

为了减少起步的困难,我们还构建了一个 演示目录 ,它可以作为通用应用程序的模板。随着我们开发更多绑定,我们将创建更多演示来展示它们的功能。

pYYBAGJg_ROAAVhUAABusW_eiSQ990.png

图 3 :交叉过滤器应用程序的示例。

前面是使用 RAPIDS cuDF 和 RAPIDS cuSpatial 库的地理空间交叉过滤仪表板应用程序的理想堆栈。我们有一个使用 Deck.gl 的简单演示,您可以使用我们的 video 进行预览,并在 Github 上探索 演示代码 。

poYBAGJg_RSAOksjAABZHz0hjxA642.png

图 4 :流式 ETL 流程的示例。

前面的最后一个示例是一个仅服务器端的 ETL 管道,没有任何可视化。我们有一个使用 cuDF 绑定和 互动笔记本 桌面应用程序的简单 ETL 流程示例,您可以在 Notebook 上使用 video 进行预览,并使用(获取)交互。

下一步是什么?

虽然我们考虑这个项目已经有一段时间了,但我们才刚刚开始开发。 RAPIDS 是一个令人难以置信的框架,我们希望将它带给更多的人和更多的应用程序— RAPIDS 正如我们所说的那样。

近期下一步:

接下来的一些短期步骤是继续构建核心 RAPIDS 绑定特性,您可以在我们的 当前绑定覆盖率表 上查看这些特性。

如果直接从您的 web 应用程序中使用 GPU 加速 SQL 查询的想法听起来很有趣(对我们来说的确如此),那么我们也希望尽快开始使用一些 blazingSQL 绑定。

最值得注意的是,我们计划开始创建和发布模块化 docker 容器,这将大大简化当前的源代码技术预览安装过程。

关于作者

Allan Enemark ,数据可视化设计, NVIDIA RAPIDS 数据可视化团队负责人,致力于建立概念证明,开发工具,并与 RAPIDS 集成框架,通过 GPU 加速推进可视化分析领域。

Ajay Thorve 是 NVIDIA 的软件工程师, RAPIDS 组织的可视化团队的一部分。 Ajay 的背景是全栈开发和数据科学,主要兴趣包括 Javascript / Typescript 和 Python 。目前, Ajay 在 RAPIDS viz 团队的工作主要集中在为 cuXfilter 和 node- RAPIDS 项目做出贡献。

Bryan Van de Ven 是 NVIDIA 的高级系统软件工程师,负责 RAPIDS 的前端和可视化工具。此前,他曾在微软和 Anaconda 工作,在那里他创建了 conda 软件包管理器,并共同创建了 Bokeh 可视化库。布莱恩获得了 UT 奥斯汀大学的计算机科学和数学学士学位,以及加州大学洛杉矶分校的物理学硕士学位。

Paul Taylor 是 NVIDIA RAPIDS 的高级工程师。

审核编辑:郭婷

 

下一篇: PLC、DCS、FCS三大控

上一篇: 如何借助高均匀性的 S

推荐产品

更多