0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-04-21 14:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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('');
/* OUTPUT:
---------------------------
// 1.6GB .CSV
// GPU: Titan RTX
Cloud|Overcast time: 26.819ms
Cloud|Overcast matches: 1,896,354
Rain|T-Storm|Thunderstorm|Squalls|Drizzle time: 63.813ms
Rain|T-Storm|Thunderstorm|Squalls|Drizzle matches: 326,441
Snow time: 6.396ms
Snow matches: 68,101
Fog time: 6.997ms
Fog matches: 52,063
Ice|Hail|Freezing|Sleet time: 44.031ms
Ice|Hail|Freezing|Sleet matches: 4,698
Dust|Smoke|Sand time: 29.932ms
Dust|Smoke|Sand matches: 8,846
GPU time: 190.457ms
// CPU: AMD Ryzen Threadripper 1900X 8-Core (3.8GHZ)
Cloud|Overcast time: 244.493ms
Cloud|Overcast matches: 1,896,354
Rain|T-Storm|Thunderstorm|Squalls|Drizzle time: 192.591ms
Rain|T-Storm|Thunderstorm|Squalls|Drizzle matches: 326,441
Snow time: 206.071ms
Snow matches: 68,101
Fog time: 204.61ms
Fog matches: 52,063
Ice|Hail|Freezing|Sleet time: 214.325ms
Ice|Hail|Freezing|Sleet matches: 4,698
Dust|Smoke|Sand time: 164.633ms
Dust|Smoke|Sand matches: 8,846
CPU time: 1.230s
---------------------------
// GPU is 6.45x faster than CPU
*/

节点 – 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 的高级工程师。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    5694

    浏览量

    110118
  • gpu
    gpu
    +关注

    关注

    28

    文章

    5272

    浏览量

    136070
  • 可视化
    +关注

    关注

    1

    文章

    1363

    浏览量

    22902
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    3D系统可视化

    本身的深入描述和F-Theta透镜的应用示例。 光学系统的3D-可视化 VirtualLab Fusion提供的工具可以实现光学系统的3D可视化,因此可以用于检查元件的位置,以及快速了解系统内部的光
    发表于 03-30 09:25

    森林消防智慧预警技术实现:火灾监测 Web GIS 可视化平台搭建

    本文基于图扑软件(Hightopo)自研的 HT 前端插件,从技术实现与功能落地角度,解析森林消防火灾监测 Web GIS 可视化平台的搭建逻辑、核心技术应用及功能模块实现流程,该平台依托
    的头像 发表于 03-19 11:31 181次阅读
    森林消防智慧预警技术<b class='flag-5'>实现</b>:火灾监测 Web GIS <b class='flag-5'>可视化</b>平台搭建

    KubePi:开源Kubernetes可视化管理面板,让集群管理如此简单

    维人员 :能够在一个统一的界面上监控和管理所有集群资源,大幅提升效率。 企业IT :实现对跨地域、跨云的Kubernetes集群进行统一管理,提升运维效率。 二、核心功能特点:不止于可视化
    发表于 02-11 12:53

    ARMxy+Node-RED+FUXA:一台设备实现采集、控制与可视化

    在工业现场,我们经常会遇到这样的需求: 设备越来越多,协议五花八门 既要本地实时控制,又想要直观的可视化界面 不想上复杂的上位机,也不希望被传统 SCADA 深度绑定 项目周期短、需求改动频繁,开发
    的头像 发表于 01-19 16:36 484次阅读
    ARMxy+<b class='flag-5'>Node</b>-RED+FUXA:一台设备<b class='flag-5'>实现</b>采集、控制与<b class='flag-5'>可视化</b>

    基于 HT 技术的园区元宇宙可视化管理平台

    设计、核心功能实现及技术亮点,展现如何通过HT技术实现园区“安环能”一体管控。 HT 技术作为平台开发的核心支撑,其基于 HTML5 标准的特性,为园区可视化管理提供了轻量、高效、跨
    的头像 发表于 11-07 14:54 588次阅读
    基于 HT 技术的园区元宇宙<b class='flag-5'>可视化</b>管理平台

    工业可视化平台是什么

    工业可视化平台是一种基于信息技术和可视化技术,将工业生产过程中的数据、信息、流程等以直观、动态的图形方式呈现,并实现交互式管理与分析的数字化工具。它通过整合工业物联网(IIoT)、大
    的头像 发表于 10-24 18:00 1234次阅读

    光伏电站可视化实现

    实现光伏电站可视化,核心是在于通过直观的视觉界面,解决传统运维中低效巡检、数据孤岛、被动响应等痛点,从而提升运营效率并提供决策支持。这是一种有效的技术手段,通过数字孪生、三维建模、数据融合等技术
    的头像 发表于 10-21 17:29 1338次阅读
    光伏电站<b class='flag-5'>可视化</b>的<b class='flag-5'>实现</b>

    TDK传感器技术助力实现标枪比赛数据的可视化

    近日,TDK株式会社(东京证券交易所代码:6762) 宣布,通过与世界田径联合会于2025年6月宣布的技术合作,成功实现了标枪比赛数据的可视化。通过应用TDK的优势传感器技术,将此前无法观察到的信息可视化,旨在进一步提升比赛魅力
    的头像 发表于 09-26 09:10 1364次阅读

    数字孪生可视化系统构建行业数字智能管理生态!

    数字孪生可视化系统具备丰富的模型组件,包括二维平面组件及3D模型组件,可根据用户需求进行定制。数字孪生可视化系统在行业数字升级、数字管理中有着重要的意义,充分利用大数据技术和信息技
    的头像 发表于 09-19 11:45 867次阅读
    数字孪生<b class='flag-5'>可视化</b>系统构建行业数字<b class='flag-5'>化</b>智能管理生态!

    如何实现光伏数字孪生可视化

    光伏数字孪生可视化是通过数字手段构建光伏电站的虚拟镜像,实现物理实体与数字模型的实时映射与交互,目的是促进光伏电站运维管理的智能、高效
    的头像 发表于 05-29 15:27 871次阅读
    如何<b class='flag-5'>实现</b>光伏数字孪生<b class='flag-5'>可视化</b>?

    工业设备可视化管理系统是什么

    工业设备可视化管理系统是一种基于物联网(IoT)、大数据、云计算、数字孪生等技术,对工业设备的运行状态、性能参数、维护信息等进行实时监测、数据整合与可视化呈现的智能管理平台。它通过将复杂的设备数据
    的头像 发表于 05-27 14:56 1325次阅读
    工业设备<b class='flag-5'>可视化</b>管理系统是什么

    HarmonyOS5云服务技术分享--ArkTS开发Node环境

    、支付平台的通知,触发自动流程。 ? 四、总结与展望 通过本文,你已经掌握了HarmonyOS云函数的核心开发流程,特别是Node.js与HTTP触发器的实战技巧。随着HarmonyOS生态的壮大,云
    发表于 05-22 17:21

    光伏电站可视化这种技术的难点有哪些?

    通过数字孪生、三维建模、数据融合等技术,将光伏电站的物理环境、设备状态、发电数据等信息以图形、动态的形式呈现,这便是光伏电站可视化,其核心在于构建电站的虚拟镜像,实现运行状态的实时
    的头像 发表于 05-15 10:56 735次阅读

    工业设备数据集中监控可视化管理平台是什么

    工业设备数据集中监控可视化管理平台是一种用于整合、监控和可视化工业设备数据的综合性系统,旨在帮助企业实现设备数据的集中管理、实时监控和可视化展示,从而提升生产效率、优化设备运行状态并支
    的头像 发表于 05-06 11:10 1216次阅读

    VirtualLab Fusion应用:3D系统可视化

    描述和F-Theta透镜的应用示例。 光学系统的3D-可视化 VirtualLab Fusion提供的工具可以实现光学系统的3D可视化,因此可以用于检查元件的位置,以及快速了解系统内部的光传播情况
    发表于 04-30 08:47