1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
import os
import pynvml
nvmlInit = None
def init_once():
global nvmlInit
if nvmlInit is not None:
return
from pynvml import nvmlInit as _nvmlInit
nvmlInit = _nvmlInit
nvmlInit()
def _pynvml_handles():
count = pynvml.nvmlDeviceGetCount()
try:
cuda_visible_devices = [
int(idx) for idx in os.environ.get("CUDA_VISIBLE_DEVICES", "").split(",")
]
except ValueError:
# CUDA_VISIBLE_DEVICES is not set
cuda_visible_devices = False
if not cuda_visible_devices:
cuda_visible_devices = list(range(count))
gpu_idx = cuda_visible_devices[0]
return pynvml.nvmlDeviceGetHandleByIndex(gpu_idx)
def real_time():
init_once()
h = _pynvml_handles()
return {
"utilization": pynvml.nvmlDeviceGetUtilizationRates(h).gpu,
"memory-used": pynvml.nvmlDeviceGetMemoryInfo(h).used,
}
def one_time():
init_once()
h = _pynvml_handles()
return {
"memory-total": pynvml.nvmlDeviceGetMemoryInfo(h).total,
"name": pynvml.nvmlDeviceGetName(h).decode(),
}
|