范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

py3nvml实现GPU相关信息读取

  目录 技术背景 常规信息读取 py3nvml的安装与使用 py3nvml绑定GPU卡 查看空闲GPU 命令行信息获取 单独查看驱动版本和显卡型号 单独查看显存信息 总结概要 版权声明 参考链接 技术背景
  随着模型运算量的增长和硬件技术的发展,使用GPU来完成各种任务的计算已经渐渐成为算法实现的主流手段。而对于运行期间的一些GPU的占用,比如每一步的显存使用率等诸如此类的信息,就需要一些比较细致的GPU信息读取的工具,这里我们重点推荐使用py3nvml来对python代码运行的一个过程进行监控。常规信息读取
  一般大家比较常用的就是nvidia-smi  这个指令,来读取GPU的使用率和显存占用、驱动版本等信息:$ nvidia-smi Wed Jan 12 15:52:04 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.42.01    Driver Version: 470.42.01    CUDA Version: 11.4     | |-------------------------------+----------------------+----------------------+ | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC | | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. | |                               |                      |               MIG M. | |===============================+======================+======================| |   0  Quadro RTX 4000     On   | 00000000:03:00.0  On |                  N/A | | 30%   39C    P8    20W / 125W |    538MiB /  7979MiB |     16%      Default | |                               |                      |                  N/A | +-------------------------------+----------------------+----------------------+ |   1  Quadro RTX 4000     On   | 00000000:A6:00.0 Off |                  N/A | | 30%   32C    P8     7W / 125W |      6MiB /  7982MiB |      0%      Default | |                               |                      |                  N/A | +-------------------------------+----------------------+----------------------+  +-----------------------------------------------------------------------------+ | Processes:                                                                  | |  GPU   GI   CI        PID   Type   Process name                  GPU Memory | |        ID   ID                                                   Usage      | |=============================================================================| |    0   N/A  N/A      1643      G   /usr/lib/xorg/Xorg                412MiB | |    0   N/A  N/A      2940      G   /usr/bin/gnome-shell               76MiB | |    0   N/A  N/A     47102      G   ...AAAAAAAAA= --shared-files       35MiB | |    0   N/A  N/A    172424      G   ...AAAAAAAAA= --shared-files       11MiB | |    1   N/A  N/A      1643      G   /usr/lib/xorg/Xorg                  4MiB | +-----------------------------------------------------------------------------+
  但是如果不使用profile仅仅使用nvidia-smi  这个指令的输出的话,是没有办法非常细致的分析程序运行过程中的变化的。这里顺便推荐一个比较精致的跟nvidia-smi  用法非常类似的小工具:gpustat。这个工具可以直接使用pip进行安装和管理:$ python3 -m pip install gpustat Collecting gpustat   Downloading gpustat-0.6.0.tar.gz (78 kB)      | | 78 kB 686 kB/s Requirement already satisfied: six>=1.7 in /home/dechin/.local/lib/python3.8/site-packages (from gpustat) (1.16.0) Collecting nvidia-ml-py3>=7.352.0   Downloading nvidia-ml-py3-7.352.0.tar.gz (19 kB) Requirement already satisfied: psutil in /home/dechin/.local/lib/python3.8/site-packages (from gpustat) (5.8.0) Collecting blessings>=1.6   Downloading blessings-1.7-py3-none-any.whl (18 kB) Building wheels for collected packages: gpustat, nvidia-ml-py3   Building wheel for gpustat (setup.py) ... done   Created wheel for gpustat: filename=gpustat-0.6.0-py3-none-any.whl size=12617 sha256=4158e741b609c7a1bc6db07d76224db51cd7656a6f2e146e0b81185ce4e960ba   Stored in directory: /home/dechin/.cache/pip/wheels/0d/d9/80/b6cbcdc9946c7b50ce35441cc9e7d8c5a9d066469ba99bae44   Building wheel for nvidia-ml-py3 (setup.py) ... done   Created wheel for nvidia-ml-py3: filename=nvidia_ml_py3-7.352.0-py3-none-any.whl size=19191 sha256=70cd8ffc92286944ad9f5dc4053709af76fc0e79928dc61b98a9819a719f1e31   Stored in directory: /home/dechin/.cache/pip/wheels/b9/b1/68/cb4feab29709d4155310d29a421389665dcab9eb3b679b527b Successfully built gpustat nvidia-ml-py3 Installing collected packages: nvidia-ml-py3, blessings, gpustat Successfully installed blessings-1.7 gpustat-0.6.0 nvidia-ml-py3-7.352.0
  使用的时候也是跟nvidia-smi非常类似的操作:$ watch --color -n1 gpustat -cpu
  返回结果如下所示: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的安装与使用
  接下来正式看下py3nvml的安装和使用方法,这是一个可以在python中实时查看和监测GPU信息的一个库,可以通过pip来安装和管理:$ python3 -m pip install py3nvml Collecting py3nvml   Downloading py3nvml-0.2.7-py3-none-any.whl (55 kB)      | | 55 kB 650 kB/s Requirement already satisfied: xmltodict in /home/dechin/anaconda3/lib/python3.8/site-packages (from py3nvml) (0.12.0) Installing collected packages: py3nvml Successfully installed py3nvml-0.2.7py3nvml绑定GPU卡
  有一些框架为了性能的最大化,在初始化的时候就会默认去使用到整个资源池里面的所有GPU卡,比如如下使用Jax来演示的一个案例:In [1]: import py3nvml  In [2]: from jax import numpy as jnp  In [3]: x = jnp.ones(1000000000)  In [4]: !nvidia-smi Wed Jan 12 16:08:32 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.42.01    Driver Version: 470.42.01    CUDA Version: 11.4     | |-------------------------------+----------------------+----------------------+ | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC | | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. | |                               |                      |               MIG M. | |===============================+======================+======================| |   0  Quadro RTX 4000     On   | 00000000:03:00.0  On |                  N/A | | 30%   41C    P0    38W / 125W |   7245MiB /  7979MiB |      0%      Default | |                               |                      |                  N/A | +-------------------------------+----------------------+----------------------+ |   1  Quadro RTX 4000     On   | 00000000:A6:00.0 Off |                  N/A | | 30%   35C    P0    35W / 125W |    101MiB /  7982MiB |      0%      Default | |                               |                      |                  N/A | +-------------------------------+----------------------+----------------------+  +-----------------------------------------------------------------------------+ | Processes:                                                                  | |  GPU   GI   CI        PID   Type   Process name                  GPU Memory | |        ID   ID                                                   Usage      | |=============================================================================| |    0   N/A  N/A      1643      G   /usr/lib/xorg/Xorg                412MiB | |    0   N/A  N/A      2940      G   /usr/bin/gnome-shell               75MiB | |    0   N/A  N/A     47102      G   ...AAAAAAAAA= --shared-files       35MiB | |    0   N/A  N/A    172424      G   ...AAAAAAAAA= --shared-files       11MiB | |    0   N/A  N/A    812125      C   /usr/local/bin/python            6705MiB | |    1   N/A  N/A      1643      G   /usr/lib/xorg/Xorg                  4MiB | |    1   N/A  N/A    812125      C   /usr/local/bin/python              93MiB | +-----------------------------------------------------------------------------+
  在这个案例中我们只是在显存中分配了一块空间用于存储一个向量,但是Jax在初始化之后,自动占据了本地的2张GPU卡。根据Jax官方提供的方法,我们可以使用如下的操作配置环境变量,使得Jax只能看到其中的1张卡,这样就不会扩张:In [1]: import os  In [2]: os.environ["CUDA_VISIBLE_DEVICES"] = "1"  In [3]: from jax import numpy as jnp  In [4]: x = jnp.ones(1000000000)  In [5]: !nvidia-smi Wed Jan 12 16:10:36 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.42.01    Driver Version: 470.42.01    CUDA Version: 11.4     | |-------------------------------+----------------------+----------------------+ | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC | | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. | |                               |                      |               MIG M. | |===============================+======================+======================| |   0  Quadro RTX 4000     On   | 00000000:03:00.0  On |                  N/A | | 30%   40C    P8    19W / 125W |    537MiB /  7979MiB |      0%      Default | |                               |                      |                  N/A | +-------------------------------+----------------------+----------------------+ |   1  Quadro RTX 4000     On   | 00000000:A6:00.0 Off |                  N/A | | 30%   35C    P0    35W / 125W |   7195MiB /  7982MiB |      0%      Default | |                               |                      |                  N/A | +-------------------------------+----------------------+----------------------+  +-----------------------------------------------------------------------------+ | Processes:                                                                  | |  GPU   GI   CI        PID   Type   Process name                  GPU Memory | |        ID   ID                                                   Usage      | |=============================================================================| |    0   N/A  N/A      1643      G   /usr/lib/xorg/Xorg                412MiB | |    0   N/A  N/A      2940      G   /usr/bin/gnome-shell               75MiB | |    0   N/A  N/A     47102      G   ...AAAAAAAAA= --shared-files       35MiB | |    0   N/A  N/A    172424      G   ...AAAAAAAAA= --shared-files       11MiB | |    1   N/A  N/A      1643      G   /usr/lib/xorg/Xorg                  4MiB | |    1   N/A  N/A    813030      C   /usr/local/bin/python            7187MiB | +-----------------------------------------------------------------------------+
  可以看到结果中已经是只使用了1张GPU卡,达到了我们的目的,但是这种通过配置环境变量来实现的功能还是着实不够pythonic,因此py3nvml中也提供了这样的功能,可以指定某一系列的GPU卡用于执行任务:In [1]: import py3nvml  In [2]: from jax import numpy as jnp  In [3]: py3nvml.grab_gpus(num_gpus=1,gpu_select=[1]) Out[3]: 1  In [4]: x = jnp.ones(1000000000)  In [5]: !nvidia-smi Wed Jan 12 16:12:37 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.42.01    Driver Version: 470.42.01    CUDA Version: 11.4     | |-------------------------------+----------------------+----------------------+ | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC | | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. | |                               |                      |               MIG M. | |===============================+======================+======================| |   0  Quadro RTX 4000     On   | 00000000:03:00.0  On |                  N/A | | 30%   40C    P8    20W / 125W |    537MiB /  7979MiB |      0%      Default | |                               |                      |                  N/A | +-------------------------------+----------------------+----------------------+ |   1  Quadro RTX 4000     On   | 00000000:A6:00.0 Off |                  N/A | | 30%   36C    P0    35W / 125W |   7195MiB /  7982MiB |      0%      Default | |                               |                      |                  N/A | +-------------------------------+----------------------+----------------------+  +-----------------------------------------------------------------------------+ | Processes:                                                                  | |  GPU   GI   CI        PID   Type   Process name                  GPU Memory | |        ID   ID                                                   Usage      | |=============================================================================| |    0   N/A  N/A      1643      G   /usr/lib/xorg/Xorg                412MiB | |    0   N/A  N/A      2940      G   /usr/bin/gnome-shell               75MiB | |    0   N/A  N/A     47102      G   ...AAAAAAAAA= --shared-files       35MiB | |    0   N/A  N/A    172424      G   ...AAAAAAAAA= --shared-files       11MiB | |    1   N/A  N/A      1643      G   /usr/lib/xorg/Xorg                  4MiB | |    1   N/A  N/A    814673      C   /usr/local/bin/python            7187MiB | +-----------------------------------------------------------------------------+
  可以看到结果中也是只使用了1张GPU卡,达到了跟上一步的操作一样的效果。查看空闲GPU
  对于环境中可用的GPU,py3nvml的判断标准就是在这个GPU上已经没有任何的进程,那么这个就是一张可用的GPU卡:In [1]: import py3nvml  In [2]: free_gpus = py3nvml.get_free_gpus()  In [3]: free_gpus Out[3]: [True, True]
  当然这里需要说明的是,系统应用在这里不会被识别,应该是会判断守护进程。命令行信息获取
  跟nvidia-smi  非常类似的,py3nvml也可以在命令行中通过调用py3smi  来使用。值得一提的是,如果需要用nvidia-smi  来实时的监测GPU的使用信息,往往是需要配合watch -n  来使用的,但是如果是py3smi  则不需要,直接用py3smi -l  就可以实现类似的功能。$ py3smi -l 5 Wed Jan 12 16:17:37 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI                        Driver Version: 470.42.01                 | +---------------------------------+---------------------+---------------------+ | GPU Fan  Temp Perf Pwr:Usage/Cap|        Memory-Usage | GPU-Util Compute M. | +=================================+=====================+=====================+ |   0 30%   39C    8   19W / 125W |   537MiB /  7979MiB |       0%    Default | |   1 30%   33C    8    7W / 125W |     6MiB /  7982MiB |       0%    Default | +---------------------------------+---------------------+---------------------+  +-----------------------------------------------------------------------------+ | Processes:                                                       GPU Memory | | GPU        Owner      PID      Uptime  Process Name                   Usage | +=============================================================================+ +-----------------------------------------------------------------------------+
  可以看到略有区别的是,这里并不像nvidia-smi  列出来的进程那么多,应该是自动忽略了系统进程。单独查看驱动版本和显卡型号
  在py3nvml中把查看驱动和型号的功能单独列了出来:In [1]: from py3nvml.py3nvml import *  In [2]: nvmlInit() Out[2]:   In [3]: print("Driver Version: {}".format(nvmlSystemGetDriverVersion())) Driver Version: 470.42.01  In [4]: deviceCount = nvmlDeviceGetCount()    ...: for i in range(deviceCount):    ...:     handle = nvmlDeviceGetHandleByIndex(i)    ...:     print("Device {}: {}".format(i, nvmlDeviceGetName(handle)))    ...: Device 0: Quadro RTX 4000 Device 1: Quadro RTX 4000  In [5]: nvmlShutdown()
  这样也不需要我们自己再去逐个的筛选,从灵活性和可扩展性上来说还是比较方便的。单独查看显存信息
  这里同样的也是把显存的使用信息单独列了出来,不需要用户再去单独筛选这个信息,相对而言比较细致:In [1]: from py3nvml.py3nvml import *  In [2]: nvmlInit() Out[2]:   In [3]: handle = nvmlDeviceGetHandleByIndex(0)  In [4]: info = nvmlDeviceGetMemoryInfo(handle)  In [5]: print("Total memory: {}MiB".format(info.total >> 20)) Total memory: 7979MiB  In [6]: print("Free memory: {}MiB".format(info.free >> 20)) Free memory: 7441MiB  In [7]: print("Used memory: {}MiB".format(info.used >> 20)) Used memory: 537MiB
  如果把这些代码插入到程序中,就可以获悉每一步所占用的显存的变化。总结概要
  在深度学习或者其他类型的GPU运算过程中,对于GPU信息的监测也是一个非常常用的功能。如果仅仅是使用系统级的GPU监测工具,就没办法非常细致的去跟踪每一步的显存和使用率的变化。如果是用profiler,又显得过于细致,而且环境配置、信息输出和筛选并不是很方便。此时就可以考虑使用py3nvml这样的工具,针对于GPU任务执行的过程进行细化的分析,有助于提升GPU的利用率和程序执行的性能。版权声明
  本文首发链接为:https://www.cnblogs.com/dechinphy/p/py3nvml.html
  作者ID:DechinPhy
  更多原著文章请参考:https://www.cnblogs.com/dechinphy/
  打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
  腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958参考链接https://zhuanlan.zhihu.com/p/31558973

京东超市周年庆新锐品牌榜小鹿蓝蓝戴可思受年轻父母追捧9月12日,2021京东超市9。9周年庆圆满落下帷幕,新锐品牌潮品和产业带源头好物的销售成为最大亮点,核心新锐品牌销售额同比增长172宿迁霸王蟹产业带贵州修文猕猴桃产业带销售额同比物联网云平台还有机会吗?不做设备端?有机会,但是建议不要做泛和大,从垂直领域出发比较好,为啥这样说呢?原因如下。1各大运营商互联网公司设备制造商等等企业都在做综合性的平台。国内有阿里华为三大运营商百度腾讯小米海尔京东高通正在开发面向中低端的骁龙平台,将推出入门级游戏手机芯片很多时候谈及高通的手机芯片,大多数都集中在中高端产品,而游戏手机一般都采用最顶尖的型号。目前高通正在研发几款新芯片,主要面向中端和入门级市场。其中一款芯片的定位会定位入门级游戏手机哪些是你因为名字而错过的好电影?1。闪光少女看这名字我以为又是什么玛丽苏电影,演员表里也没有一个自带流量的,这种情况我根本连简介都懒得看,更别说去电影院看了,结果它成功引起了我的注意!之后,看过的网友也自成自来水为什么苹果手机像素明明不高,拍出的照片却特别真实又舒服呢?购买手机时,手机的拍照能力已经成为重要的参考因素,因此不少厂商都在极力宣传自家的4800W6400W镜头模组。那么问题来了,与动辄一亿像素的安卓机相比,为什么iPhone的像素很低买了新能源车,没想到被2万的充电桩接线费g住了今年5月,我们家买了一辆本田CRV插电式混合动力汽车,从此我家与各方的一番纠缠令人始料未及地开始了。新能源汽车多半由电力驱动,因而充电是否方便就成了购买之前需要考虑的头等事宜。由于酷派COOL20真实测评!699的价格2000的品质,你喜欢吗?遥想当年,中华酷联鼎立于国内市场,尤其是说到酷派这个品牌。作为在移动通信领域深耕28年的老牌厂商,酷派成立于1993年,曾制造出全球第一部GSMCDMA智能双模手机,也曾推出过中国人机共存时代来临服务机器人渐成大众需求从服务机器人到飞行机器人,从工业机器人到可以治病救人的微纳机器人,机器人正日益普遍地出现在人们身边,带来了更便捷的生活。记者从正在举行的世界机器人大会获悉,机器人与人类共存的时代已网友实体店买到iPhone12后封机,购买时间激活日期仅差两天iPhone12后封机非常多,特别是某些实体店。后封机基本都是高保修的手机,商家将手机重新清理,用盒子包装起来,冒充全新机出售。但某些平台买的后封机,基本都是翻新机,不可同日而语。辅助驾驶再升级!马斯克特斯拉新功能将上线,遭遇危险时刻可紧急倒车9月14日消息,据报道,马斯克宣布其全自动驾驶测试版FSDBeta将更加拟人化,FSDBeta10。1甚至能够做到在车辆遭遇紧急状态时启动快速倒车操作。FSDBeta旨在最终取代合使用微信支付宝要留意了,这2个功能最好关闭,避免扣款声明原创不易,禁止搬运,违者必究!微信支付宝成支付主流2004年支付宝上线了,原本只是支持线上支付,没想到如今成为了支付的主流,改变了人们的支付方式。而后微信也随之而来,这两者几乎
Mac配置Mysql环境变量查看默认ShellechoSHELL结果binzsh从macOSCatalina版开始,zsh(Zshell)是所有新建用户帐户的默认Shell。bash是macOSMojave及打造多元化营销活动,顺联动力中秋上线超值拼团专区拼团是一种营销效率更高成本更低的营销模式。当参与拼团的人数达到平台要求时,就能以更低的价格购买商品,对消费者来说,可以获得更大的优惠空间,而商家也能通过让利,获得更多流量曝光。为了A股迎来大涨,是起死回生还是回光返照?前言昨天的大涨给很多投资者一个措手不及。由于后台私信问的人实在太多,我也没办法一个一个回复,在这里给大家从政策宏观微观流动性基本面四个方面梳理一下近期上涨的逻辑。一人民币升值,是引直播小姐姐为它痴迷,性能怪兽一加6开启畅快游戏之旅作为一个忠实手游迷,刷游戏直播无疑是我现在最大的爱好之一,而也就最近在观看小姐姐玩游戏的时候,我的视角却放在了小姐姐用来玩吃鸡的手机上面,不为其他,只是因为这一款手机的出镜率确实高从颜值到价格华为P20和一加6年中旗舰谁更值得买?随着京东818手机节的举办,今年智能手机行业的白热化竞争就预示着已经进入了下半场,包括魅族16的发布等等,旗舰手机越来越多样化,而对于手机品牌来说,不仅仅是产品之间的较量,也是企业Java执行电脑cmd命令直接上代码writeyourcodehereStringcommandnewStringipconfig,allStringcommandnewStringping,www。bai全军出击开启新战术,用这款全千兆路由为游戏加速家里越来越多设备需要无线网络来支持,刚升级100M的光纤凭什么让我感觉在吃鸡路上网络明显的加大延时了呢?莫非是家里太多需要无线网络支撑的智能产品吃了我的网速?在互联网的发达和科技的Java运算符优先级运算符结合性。()(方法调用)从左向右!(一元运算)(一元运算)从右向左从左向右从左向右从左向右instanceof从左向右!从左向右从左向右从左向右从左向右从左向右从左向右未发售就成轻奢的新贵,OPPOFindX兰博基尼版一机难求OPPOFindX拥有了多项未来科技的美感,而且这些科技新元素都非常实用,好口碑不断,彰显了OPPO对创新科技的执着追求和成功之处。在OPPOFindX中有曲面全景屏双轨潜望结构3JavaRobot类使用指南翻看以前的笔记,发现awt包里有个Robot类,看看它能干啥JavaRobot类大概意思就是,此类用于生成本机系统输入事件,用于测试自动化自运行演示以及其他需要控制鼠标和键盘的应用手洗清洁度不够好,SVK洁面仪助你深度清洁脸部肌肤美眉们都知道卸妆后清洁面部皮肤时单纯用手揉洗的话会有很多死角被忽略,洁净度是很低的,所以美眉们的化妆盒里就有了一件叫洁面仪的清洁工具,使用它能够在清洁面部肌肤时达到深度的清洁效果。