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

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

3天内不再提示

NVIDIA的GPU开源套件加速数据库的应用价值

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-04-19 10:56 次阅读

介绍

NVDashboard 是一个开源软件包,用于在交互式Jupyter 实验室环境中实时可视化 NVIDIA GPU 指标。 NVDashboard 是所有 GPU 用户监视系统资源的好方法。然而,它对于RAPIDS, NVIDIA的GPU开源套件加速数据科学软件库的用户尤其有价值。

考虑到现代数据科学算法的计算强度,在许多情况下 GPU 可以提供改变游戏规则的工作流加速。为了获得最佳性能,底层软件有效地使用系统资源是绝对关键的。尽管加速库(如 cuDNN 和 RAPIDS )是专门设计用于执行性能优化方面的繁重任务的,但对于开发人员和最终用户来说,验证他们的软件是否真正按照预期利用了 GPU 资源是非常有用的。虽然这可以通过 NVIDIA -smi 等命令行工具实现,但许多专业数据科学家更喜欢使用交互式 Jupyter 笔记本进行日常模型和工作流开发。

图 1 : NVDashboard Jupyter 实验室扩展正在运行。 GPU 仪表板显示在屏幕右侧,而两个dask-labextension仪表板显示在左下角。

如图 1所示, NVDashboard 使 Jupyter 笔记本用户能够在用于开发的相同交互环境中可视化系统硬件指标。支持的指标包括:

GPU – 计算利用率

GPU – 内存消耗

PCIe 吞吐量

NVLink 吞吐量

该软件包构建在基于 Python 的仪表板服务器上,该服务器支持 Bokeh 可视化库在实时[1]中显示和更新图形。另外一个 Jupyter Lab 扩展将这些仪表板作为可移动窗口嵌入到交互式环境中。大多数 GPU 指标都是通过 PyNVML 收集的, PyNVML 是一个开源的 Python 包,它构成了 NVIDIA 管理库( NVML )的包装。因此,可以修改/扩展可用的仪表板,以显示可通过 NVML 访问的任何可查询 GPU 指标。

使用 NVDashboard

nvdashboard 软件包在PyPI上提供,由两个基本组件组成:

博克服务器:服务器组件利用出色的 Bokeh 可视化库实时显示和更新 GPU -诊断仪表板。所需的硬件指标可通过PyNVML访问,该PyNVML是一个开源的 Python 包,由 NVIDIA 管理库(NVML)的包装组成。因此,可以修改/扩展NVDashboard以显示任何可查询的 GPU 指标,这些指标可以通过NVML轻松地从 Python 访问。

Jupyter 实验室扩建: Jupyter 实验室扩展将 GPU 诊断仪表板嵌入为交互式Jupyter-Lab环境中的可移动窗口。

$ pip install jupyterlab-nvdashboard

# If you are using Jupyter Lab 2 you will also need to run
$ jupyter labextension install jupyterlab-nvdashboard

图 2 : Jupyter 实验室扩展的主菜单。

必须澄清的是, NVDashboard 自动监控整个机器的 GPU 资源,而不仅仅是本地 Jupyter 环境使用的资源。朱皮特实验室eExtension 当然可以用于非 i Python /笔记本开发。例如,在图 3中,“ NVLink 时间线”和“ GPU 利用率”仪表板在 Jupyter 实验室环境中用于监控从命令行执行的多 GPU 深度学习工作流。


图 3 : Jupyter 实验室使用的“ NVLink Timeline ”仪表板。

博克服务器

虽然 Jupyter 实验室扩展肯定是基于 i Python /笔记本电脑开发的爱好者的理想选择,但其他 GPU 用户也可以使用 sandalone Bokeh 服务器访问仪表板。这是通过运行来完成的。

$ Python -m jupyterlab nvdashboard 。 server 《端口号》

启动 Bokeh 服务器后,可通过在标准 web 浏览器中打开相应的 url (例如 http ://《 ip 地址》:《 port number 》)来访问 GPU 仪表板。如图 4所示,主菜单列出了 NVDashboard 中可用的所有仪表板。


图 4 : NVDashboard 的 Bokeh 服务器组件的主菜单。

例如,选择“ GPU -Resources ”链接将打开图 5中所示的仪表板,该仪表板使用对齐的时间线图总结各种 GPU 资源的利用率。


图 5 : Jupyter 实验室外部使用的“ GPU 资源”仪表板。

要以这种方式使用 NVDashboard ,只需要 pip 安装步骤(可以跳过实验室扩展安装步骤):

$ pip 安装 jupyterlab nvdashboard

或者,您也可以克隆jupyterlab-nvdashboard存储库,只需执行server.py脚本(例如python jupyterlab_nvdashboard/server.py 《port-number》)。

实施细节

现有的 nvdashboard 包提供了许多有用的 GPU – 资源仪表板。但是,修改现有仪表板和/或创建全新的仪表板非常简单。为了做到这一点,您只需要利用 PyNVML 和 Bokeh 。

PyNVML dasic

PyNVML 是 NVIDIA 管理库( NVML )的 Python 包装器,它是一个基于 C 的 API ,用于监视和管理 NVIDIA GPU 设备的各种状态。 NVML 直接由更知名的 NVIDIA 系统管理接口( NVIDIA -smi )使用。根据 NVIDIA 开发者网站, NVML 提供对以下可查询状态的访问(除了此处未讨论的可修改状态外):

ECC 错误计数:报告可纠正的单位错误和可检测的双位错误。为当前引导周期和 GPU 的生命周期提供错误计数。

GPU 利用率:报告 GPU 和内存接口的计算资源的当前利用率。

主动计算过程:报告在 GPU 上运行的活动进程列表,以及相应的进程名称/ id 和分配的 GPU 内存。

时钟和 PState:报告了几个重要时钟域的最大和当前时钟速率,以及当前 GPU 性能状态。

温度和风扇转速:报告当前堆芯 GPU 温度以及非无源产品的风扇转速。

电源管理:对于支持的产品,会报告当前板功率消耗和功率限制。

Identification:报告各种动态和静态信息,包括板序列号、 PCI 设备 ID 、 VBIOS / Inforom 版本号和产品名称。

尽管目前存在几种不同的 NVML Python 包装器,但我们在 GitHub 上使用 GoAi 托管的PyNVML包。这个版本的 PyNVML 使用 ctypes 包装大多数 nvmlcapi 。 NVDashboard 仅利用查询实时 GPU 资源利用率所需的一小部分 API ,包括:

nvmlInit():初始化 NVML 。初始化成功后,缓存 GPU 句柄,以降低仪表板中活动监视期间的数据查询延迟。

nvmlShutdown(): Finalize NVML

nvmlDeviceGetCount ():获取可用 GPU 设备的数量

nvmlDeviceGetHandleByIndex():获取设备的句柄(给定整数索引)

nvmlDeviceGetMemoryInfo():获取内存信息对象(给定设备句柄)

nvmlDeviceGetUtilizationRates():获取利用率对象(给定设备句柄)

nvmlDeviceGetPcieThroughput():获取 PCIe 吞吐量对象(给定设备句柄)

nvmlDeviceGetNvLinkUtilizationCounter():获取 NVLink 利用率计数器(给定设备句柄和链接索引)

在 PyNVML 的当前版本中, Python 函数名的选择通常与 C API 完全匹配。例如,要查询每个可用设备上的当前 GPU – 利用率,代码如下所示:

可用设备上的当前 GPU – 利用率,代码如下所示:

In [1]: from pynvml import *
In [2]: nvmlInit()
In [3]: ngpus = nvmlDeviceGetCount()
In [4]: for i in range(ngpus):
…: handle = nvmlDeviceGetHandleByIndex(i)
…: gpu_util = nvmlDeviceGetUtilizationRates(handle).gpu
…: print(‘GPU %d Utilization = %d%%’ % (i, gpu_util))
…:
GPU 0 Utilization = 43%
GPU 1 Utilization = 0%
GPU 2 Utilization = 15%
GPU 3 Utilization = 0%
GPU 4 Utilization = 36%
GPU 5 Utilization = 0%
GPU 6 Utilization = 0%
GPU 7 Utilization = 11%

注意,除了 GitHub 存储库之外, PyNVML 还托管在PyPI和锻造伯爵上。

仪表板代码

要修改/添加 GPU 仪表板,只需使用两个文件(jupyterlab_bokeh_server/server.py和jupyterlab_nvdashboard/apps/gpu.py)。添加/修改仪表板所需的大多数 PyNVML 和 bokeh 代码都将在gpu.py中。只有在添加或更改菜单/显示名称的情况下,才需要修改server.py。在这种情况下,必须在 routes dictionary 中指定新的/修改的名称(键为所需的名称,值为相应的仪表板定义):

routes = {
   "/GPU-Utilization": apps.gpu.gpu,
   "/GPU-Memory": apps.gpu.gpu_mem,
   "/GPU-Resources": apps.gpu.gpu_resource_timeline,
   "/PCIe-Throughput": apps.gpu.pci,
   "/NVLink-Throughput": apps.gpu.nvlink,
   "/NVLink-Timeline": apps.gpu.nvlink_timeline,
   "/Machine-Resources": apps.cpu.resource_timeline,
}

为了让服务器不断刷新 bokeh 应用程序使用的 PyNVML 数据,我们使用 bokeh 的 ColumnDataSource 类在每个图中定义数据的source。 ColumnDataSource 类允许为每种类型的数据传递更新函数,可以在每个应用程序的专用回调函数( cb )中调用更新函数。例如,现有 GPU 应用程序的定义如下:

def gpu(doc):

fig = figure(title=“GPU Utilization”, sizing_mode=“stretch_both”, x_range=[0, 100])

def get_utilization():

return [

pynvml.nvmlDeviceGetUtilizationRates(gpu_handles[i]).gpu

for i in range(ngpus)

gpu = get_utilization()

y = list(range(len(gpu)))

source = ColumnDataSource({“right”: y, “gpu”: gpu})

mapper = LinearColorMapper(palette=all_palettes[“RdYlBu”][4], low=0, high=100)

fig.hbar(

source=source,

y=“right”,

right=“gpu”,

height=0.8,

color={“field”: “gpu”, “transform”: mapper},

fig.toolbar_location = None

doc.title = “GPU Utilization [%]”

doc.add_root(fig)

def cb():

source.data.update({“gpu”: get_utilization()})

doc.add_periodic_callback(cb, 200)

请注意, PyNVML GPU 利用率数据的实时更新是在source.data.update()调用中执行的。有了必要的ColumnDataSource逻辑,可以通过多种方式修改标准 GPU 定义(如上)。例如,交换 x 轴和 y 轴,指定不同的调色板,甚至将图形从 hbar 完全更改为其他图形。

关于作者

Jacob Tomlinson 是 NVIDIA 的高级 Python 软件工程师,专注于分布式系统的部署工具。他的工作包括维护开源项目,包括 RAPIDS 和 Dask 。 RAPIDS 是一套 GPU 加速开源 Python 工具,模拟 PyData 堆栈中的 API ,包括 NumPy 、 pandas 和 SciKit Learn 的 API 。 Dask 为分析提供了高级并行性,包括核心外计算、延迟计算和 PyData 堆栈的分布式执行。

Ken Hester 是 NVIDIA 的解决方案架构师和经理,在 HPC 、 AI 深度学习和机器学习以及 CUDA GPU 计算领域为能源行业提供支持。他来自德克萨斯州休斯顿,在 NVIDIA 工作了近 8 年。在 NVIDIA 之前, Ken 在能源行业工作了 15 年以上,是数据科学、软件架构、软件设计和开发领域的行业专家。

Rick Zamora 是 NVIDIA 在 RAPIDS 和 Dask 工作的高级软件工程师。他有科学计算研究和并行软件开发的背景。

审核编辑:郭婷

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

    关注

    14

    文章

    4793

    浏览量

    102428
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4591

    浏览量

    128144
  • python
    +关注

    关注

    53

    文章

    4753

    浏览量

    84077
收藏 人收藏

    评论

    相关推荐

    数据库数据恢复—SQL Server数据库出现823错误的数据恢复案例

    SQL Server数据库故障: SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库
    的头像 发表于 09-20 11:46 95次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—SQL Server<b class='flag-5'>数据库</b>出现823错误的<b class='flag-5'>数据</b>恢复案例

    NVIDIA全面转向开源GPU内核模块

    借助 R515 驱动程序,NVIDIA 于 2022 年 5 月发布了一套开源的 Linux GPU 内核模块,该模块采用双许可证,即 GPL 和 MIT 许可。初始版本主要面向数据
    的头像 发表于 07-25 09:56 267次阅读
    <b class='flag-5'>NVIDIA</b>全面转向<b class='flag-5'>开源</b><b class='flag-5'>GPU</b>内核模块

    阿里云与中兴通讯达成开源数据库合作

    近日,阿里云与中兴通讯宣布达成开源数据库领域的深度合作。中兴通讯正式加入PolarDB开源社区,并荣任首届理事会成员单位,这一举措标志着两大科技巨头在数据库领域的合作迈向新的高度。
    的头像 发表于 05-17 10:47 443次阅读

    阿里云与中兴通讯达成开源数据库合作,助推国产数据库发展

    据悉,阿里云与中兴通讯于5月16日公布了开源数据库合作事宜。中兴通讯正式宣布加入PolarDB开源社区,并担任首届理事会成员单位。
    的头像 发表于 05-16 16:34 336次阅读

    NVIDIA加速微软最新的Phi-3 Mini开源语言模型

    NVIDIA 宣布使用 NVIDIA TensorRT-LLM 加速微软最新的 Phi-3 Mini 开源语言模型。TensorRT-LLM 是一个
    的头像 发表于 04-28 10:36 393次阅读

    搭载英伟达GPU,全球领先的向量数据库公司Zilliz发布Milvus2.4向量数据库

    在美国硅谷圣何塞召开的 NVIDIA GTC 大会上,全球领先的向量数据库公司 Zilliz 发布了 Milvus 2.4 版本。这是一款革命性的向量数据库系统,在业界首屈一指,它首次采用了英伟达
    的头像 发表于 04-01 14:33 356次阅读
    搭载英伟达<b class='flag-5'>GPU</b>,全球领先的向量<b class='flag-5'>数据库</b>公司Zilliz发布Milvus2.4向量<b class='flag-5'>数据库</b>

    选择 KV 数据库最重要的是什么?

    经常有客户提到 KV 数据库,但却偏偏“不要 Redis”。比如有个做安全威胁分析平台的客户,他们明确表示自己对可靠性要求非常高,需要的不是开源 Redis 这种内存缓存,而是 KV 数据库
    的头像 发表于 03-28 22:11 592次阅读
    选择 KV <b class='flag-5'>数据库</b>最重要的是什么?

    数据库数据恢复】Oracle数据库ASM实例无法挂载的数据恢复案例

    oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
    的头像 发表于 02-01 17:39 371次阅读
    【<b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复】Oracle<b class='flag-5'>数据库</b>ASM实例无法挂载的<b class='flag-5'>数据</b>恢复案例

    深耕文档型数据库12载,SequoiaDB再开源

    1月15日,巨杉数据库举行SequoiaDB新特性及开源项目发布活动。本次活动回顾了巨杉数据库深耕JSON文档型数据库12年的发展历程与技术演进,全面解读了SequoiaDB包括在高可
    的头像 发表于 01-16 13:06 209次阅读

    OpenHarmony开源GPUMesa3D适配说明

    ,对下使用Gallium框架,屏蔽驱动差异。在RK3568中,panfrost对ARM GPU提供了非常好的开源驱动支持。 二、适配方法 在RK3568 GPU 开源
    发表于 12-25 11:38

    关于JSON数据库

    如何理解JSON数据库?作为NoSQL数据库的一种类型,JSON数据库有哪些优势呢?JSON数据库如何运作,它为应用程序开发者带来了哪些价值
    的头像 发表于 12-06 13:46 711次阅读
    关于JSON<b class='flag-5'>数据库</b>

    什么是JSON数据库

    如何理解JSON数据库?作为NoSQL数据库的一种类型,JSON数据库有哪些优势呢?JSON数据库如何运作,它为应用程序开发者带来了哪些价值
    的头像 发表于 12-02 08:04 687次阅读
    什么是JSON<b class='flag-5'>数据库</b>

    NoSQL 数据库如何选型

    什么是NoSQL数据库?为什么要使用NoSQL数据库?键值数据库内存键值数据库文档数据库列式数据库
    的头像 发表于 11-26 08:05 357次阅读
    NoSQL <b class='flag-5'>数据库</b>如何选型

    MySQL数据库基础知识

    MySQL 是一种开源的关系型数据库管理系统,它是目前最流行的数据库之一。MySQL 提供了一种结构化的方法来管理大量的数据,并且具有高效、可靠和可扩展的特性。本文将介绍 MySQL
    的头像 发表于 11-21 11:09 834次阅读

    177倍加速NVIDIA最新开源 | GPU加速各种SDF建图!

    但最近,NVIDIA和ETHZ就联合提出了nvblox,是一个使用GPU加速SDF建图的。计算速度非常快,相较CPU计算TSDF甚至快了177倍。更重要的是,因为所有
    的头像 发表于 11-09 16:46 909次阅读
    177倍<b class='flag-5'>加速</b>!<b class='flag-5'>NVIDIA</b>最新<b class='flag-5'>开源</b> | <b class='flag-5'>GPU</b><b class='flag-5'>加速</b>各种SDF建图!