py3nvml实现GPU相关信息读取的示例分析(gpu,py3nvml,开发技术)

时间:2024-04-29 13:48:57 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    py3nvml%E5%AE%9E%E7%8E%B0GPU%E7%9B%B8%E5%85%B3%E4%BF%A1%E6%81%AF%E8%AF%BB%E5%8F%96%E7%9A%84%E7%A4%BA%E4%BE%8B%E5%88%86%E6%9E%90

在深度学习或者其他类型的GPU运算过程中,对于GPU信息的监测也是一个非常常用的功能。如果仅仅是使用系统级的GPU监测工具,就没办法非常细致的去跟踪每一步的显存和使用率的变化。如果是用profiler,又显得过于细致,而且环境配置、信息输出和筛选并不是很方便。此时就可以考虑使用py3nvml这样的工具,针对于GPU任务执行的过程进行细化的分析,有助于提升GPU的利用率和程序执行的性能。

随着模型运算量的增长和硬件技术的发展,使用GPU来完成各种任务的计算已经渐渐成为算法实现的主流手段。而对于运行期间的一些GPU的占用,比如每一步的显存使用率等诸如此类的信息,就需要一些比较细致的GPU信息读取的工具,这里我们重点推荐使用py3nvml来对python代码运行的一个过程进行监控。

一般大家比较常用的就是nvidia-smi这个指令,来读取GPU的使用率和显存占用、驱动版本等信息:

但是如果不使用profile仅仅使用nvidia-smi这个指令的输出的话,是没有办法非常细致的分析程序运行过程中的变化的。这里顺便推荐一个比较精致的跟nvidia-smi用法非常类似的小工具:gpustat。这个工具可以直接使用pip进行安装和管理:

使用的时候也是跟nvidia-smi非常类似的操作:

返回结果如下所示:

Every 1.0s: gpustat -cpu ubuntu2004: Wed Jan 12 15:58:59 2022

ubuntu2004 Wed Jan 12 15:58:59 2022 470.42.01
[0] Quadro RTX 4000 | 39'C, 3 % | 537 / 7979 MB | root:Xorg/1643(412M) de
chin:gnome-shell/2940(75M) dechin:slack/47102(35M) dechin:chrome/172424(11M)
[1] Quadro RTX 4000 | 32'C, 0 % | 6 / 7982 MB | root:Xorg/1643(4M)

通过gpustat返回的结果,包含了GPU的型号、使用率和显存使用大小和GPU当前的温度等常规信息。

接下来正式看下py3nvml的安装和使用方法,这是一个可以在python中实时查看和监测GPU信息的一个库,可以通过pip来安装和管理:

有一些框架为了性能的最大化,在初始化的时候就会默认去使用到整个资源池里面的所有GPU卡,比如如下使用Jax来演示的一个案例:

在这个案例中我们只是在显存中分配了一块空间用于存储一个向量,但是Jax在初始化之后,自动占据了本地的2张GPU卡。根据Jax官方提供的方法,我们可以使用如下的操作配置环境变量,使得Jax只能看到其中的1张卡,这样就不会扩张:

可以看到结果中已经是只使用了1张GPU卡,达到了我们的目的,但是这种通过配置环境变量来实现的功能还是着实不够pythonic,因此py3nvml中也提供了这样的功能,可以指定某一系列的GPU卡用于执行任务:

可以看到结果中也是只使用了1张GPU卡,达到了跟上一步的操作一样的效果。

对于环境中可用的GPU,py3nvml的判断标准就是在这个GPU上已经没有任何的进程,那么这个就是一张可用的GPU卡:

当然这里需要说明的是,系统应用在这里不会被识别,应该是会判断守护进程。

nvidia-smi非常类似的,py3nvml也可以在命令行中通过调用py3smi来使用。值得一提的是,如果需要用nvidia-smi来实时的监测GPU的使用信息,往往是需要配合watch -n来使用的,但是如果是py3smi则不需要,直接用py3smi -l就可以实现类似的功能。

可以看到略有区别的是,这里并不像nvidia-smi列出来的进程那么多,应该是自动忽略了系统进程。

在py3nvml中把查看驱动和型号的功能单独列了出来:

这样也不需要我们自己再去逐个的筛选,从灵活性和可扩展性上来说还是比较方便的。

这里同样的也是把显存的使用信息单独列了出来,不需要用户再去单独筛选这个信息,相对而言比较细致:

如果把这些代码插入到程序中,就可以获悉每一步所占用的显存的变化。

本文:py3nvml实现GPU相关信息读取的示例分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:html5新特性中移除了什么元素下一篇:

14 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18