最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

py3nvml實現(xiàn)GPU相關(guān)信息讀取的案例分析

 更新時間:2022年01月16日 12:08:04   作者:DECHIN  
這篇文章主要介紹了py3nvml實現(xiàn)GPU相關(guān)信息讀取,此時就可以考慮使用py3nvml這樣的工具,針對于GPU任務(wù)執(zhí)行的過程進行細化的分析,有助于提升GPU的利用率和程序執(zhí)行的性能,需要的朋友可以參考下

在深度學(xué)習(xí)或者其他類型的GPU運算過程中,對于GPU信息的監(jiān)測也是一個非常常用的功能。如果僅僅是使用系統(tǒng)級的GPU監(jiān)測工具,就沒辦法非常細致的去跟蹤每一步的顯存和使用率的變化。如果是用profiler,又顯得過于細致,而且環(huán)境配置、信息輸出和篩選并不是很方便。此時就可以考慮使用py3nvml這樣的工具,針對于GPU任務(wù)執(zhí)行的過程進行細化的分析,有助于提升GPU的利用率和程序執(zhí)行的性能。

技術(shù)背景

隨著模型運算量的增長和硬件技術(shù)的發(fā)展,使用GPU來完成各種任務(wù)的計算已經(jīng)漸漸成為算法實現(xiàn)的主流手段。而對于運行期間的一些GPU的占用,比如每一步的顯存使用率等諸如此類的信息,就需要一些比較細致的GPU信息讀取的工具,這里我們重點推薦使用py3nvml來對python代碼運行的一個過程進行監(jiān)控。

常規(guī)信息讀取

一般大家比較常用的就是nvidia-smi這個指令,來讀取GPU的使用率和顯存占用、驅(qū)動版本等信息:

$ 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 

返回結(jié)果如下所示:

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返回的結(jié)果,包含了GPU的型號、使用率和顯存使用大小和GPU當前的溫度等常規(guī)信息。

py3nvml的安裝與使用

接下來正式看下py3nvml的安裝和使用方法,這是一個可以在python中實時查看和監(jiān)測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.7

py3nvml綁定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在初始化之后,自動占據(jù)了本地的2張GPU卡。根據(jù)Jax官方提供的方法,我們可以使用如下的操作配置環(huán)境變量,使得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 |
+-----------------------------------------------------------------------------+

可以看到結(jié)果中已經(jīng)是只使用了1張GPU卡,達到了我們的目的,但是這種通過配置環(huán)境變量來實現(xiàn)的功能還是著實不夠pythonic,因此py3nvml中也提供了這樣的功能,可以指定某一系列的GPU卡用于執(zhí)行任務(wù):

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 |
+-----------------------------------------------------------------------------+

可以看到結(jié)果中也是只使用了1張GPU卡,達到了跟上一步的操作一樣的效果。

查看空閑GPU

對于環(huán)境中可用的GPU,py3nvml的判斷標準就是在這個GPU上已經(jīng)沒有任何的進程,那么這個就是一張可用的GPU卡:

In [1]: import py3nvml

In [2]: free_gpus = py3nvml.get_free_gpus()

In [3]: free_gpus
Out[3]: [True, True]

當然這里需要說明的是,系統(tǒng)應(yīng)用在這里不會被識別,應(yīng)該是會判斷守護進程。

命令行信息獲取

nvidia-smi非常類似的,py3nvml也可以在命令行中通過調(diào)用py3smi來使用。值得一提的是,如果需要用nvidia-smi來實時的監(jiān)測GPU的使用信息,往往是需要配合watch -n來使用的,但是如果是py3smi則不需要,直接用py3smi -l就可以實現(xiàn)類似的功能。

$ 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 |
+=============================================================================+
+-----------------------------------------------------------------------------+

可以看到略有區(qū)別的是,這里并不像nvidia-smi列出來的進程那么多,應(yīng)該是自動忽略了系統(tǒng)進程。

單獨查看驅(qū)動版本和顯卡型號

在py3nvml中把查看驅(qū)動和型號的功能單獨列了出來:

In [1]: from py3nvml.py3nvml import *
In [2]: nvmlInit()
Out[2]: <CDLL 'libnvidia-ml.so.1', handle 560ad4d07a60 at 0x7fd13aa52340>
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]: <CDLL 'libnvidia-ml.so.1', handle 55ae42aadd90 at 0x7f39c700e040>
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

如果把這些代碼插入到程序中,就可以獲悉每一步所占用的顯存的變化。

總結(jié)概要

在深度學(xué)習(xí)或者其他類型的GPU運算過程中,對于GPU信息的監(jiān)測也是一個非常常用的功能。如果僅僅是使用系統(tǒng)級的GPU監(jiān)測工具,就沒辦法非常細致的去跟蹤每一步的顯存和使用率的變化。如果是用profiler,又顯得過于細致,而且環(huán)境配置、信息輸出和篩選并不是很方便。此時就可以考慮使用py3nvml這樣的工具,針對于GPU任務(wù)執(zhí)行的過程進行細化的分析,有助于提升GPU的利用率和程序執(zhí)行的性能。

版權(quán)聲明

本文首發(fā)鏈接為: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 “留一手”加劇內(nèi)卷,“講不清”浪費時間。

到此這篇關(guān)于py3nvml實現(xiàn)GPU相關(guān)信息讀取的文章就介紹到這了,更多相關(guān)py3nvml GPU信息讀取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Python中的函數(shù)參數(shù)傳遞方法*args與**kwargs

    詳解Python中的函數(shù)參數(shù)傳遞方法*args與**kwargs

    本文將討論Python的函數(shù)參數(shù)。我們將了解args和kwargs,/和的都是什么,雖然這個問題是一個基本的python問題,但是在我們寫代碼時會經(jīng)常遇到,比如timm中就大量使用了這樣的參數(shù)傳遞方式
    2023-03-03
  • Python Web框架Django的模型和數(shù)據(jù)庫遷移詳解

    Python Web框架Django的模型和數(shù)據(jù)庫遷移詳解

    Django 是一個極其強大的 Python Web 框架,它提供了許多工具和特性,能夠幫助我們更快速、更便捷地構(gòu)建 Web 應(yīng)用,在本文中,我們將會關(guān)注 Django 中的模型(Models)和數(shù)據(jù)庫遷移(Database Migrations)這兩個核心概念,需要的朋友可以參考下
    2023-08-08
  • ZABBIX3.2使用python腳本實現(xiàn)監(jiān)控報表的方法

    ZABBIX3.2使用python腳本實現(xiàn)監(jiān)控報表的方法

    今天小編就為大家分享一篇ZABBIX3.2使用python腳本實現(xiàn)監(jiān)控報表的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python3.x+迅雷x 自動下載高分電影的實現(xiàn)方法

    Python3.x+迅雷x 自動下載高分電影的實現(xiàn)方法

    這篇文章主要介紹了Python3.x+迅雷x 自動下載高分電影的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 解決項目pycharm能運行,在終端卻無法運行的問題

    解決項目pycharm能運行,在終端卻無法運行的問題

    今天小編就為大家分享一篇解決項目pycharm能運行,在終端卻無法運行的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python實現(xiàn)低通濾波器代碼

    python實現(xiàn)低通濾波器代碼

    今天小編就為大家分享一篇python實現(xiàn)低通濾波器代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 簡單談?wù)刾ython中的多進程

    簡單談?wù)刾ython中的多進程

    multiprocessing模塊是python庫中最高級和功能最強大的模塊之一。本文就來給大家簡單講講multiprocessing一般性技巧
    2016-11-11
  • Python heapq使用詳解及實例代碼

    Python heapq使用詳解及實例代碼

    這篇文章主要介紹了Python heapq使用詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Python與數(shù)據(jù)庫的交互問題小結(jié)

    Python與數(shù)據(jù)庫的交互問題小結(jié)

    這篇文章主要介紹了Python與數(shù)據(jù)庫的交互,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • python進階教程之函數(shù)參數(shù)的多種傳遞方法

    python進階教程之函數(shù)參數(shù)的多種傳遞方法

    這篇文章主要介紹了python進階教程之函數(shù)參數(shù)的多種傳遞方法,包括關(guān)鍵字傳遞、默認值傳遞、包裹位置傳遞、包裹關(guān)鍵字混合傳遞等,需要的朋友可以參考下
    2014-08-08

最新評論

新兴县| 东兰县| 鄂伦春自治旗| 新巴尔虎左旗| 肇源县| 津南区| 仙桃市| 秀山| 巴南区| 丹阳市| 南江县| 灵丘县| 临沭县| 邵阳县| 荥经县| 申扎县| 麦盖提县| 儋州市| 禹州市| 珠海市| 宜城市| 赤壁市| 新余市| 集贤县| 平湖市| 武宁县| 鄂伦春自治旗| 忻州市| 乌拉特中旗| 宁强县| 兴文县| 南康市| 香河县| 伊宁县| 团风县| 额敏县| 方城县| 台东市| 铜鼓县| 酒泉市| 张家港市|