Source code for heimdallr.utilities.nvidia.packing
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = "Christian Heider Nielsen"
__doc__ = r"""
Created on 19/03/2020
"""
import time
from typing import List, Tuple
import psutil
from warg import NOD
from heimdallr.utilities.nvidia import bindings
try:
bindings.nvmlInit()
except Exception as e:
print(e)
[docs]def get_nv_info(include_graphics_processes: bool = True) -> Tuple[str, List]:
"""description"""
devices = []
try:
driver_version = bindings.nvmlSystemGetDriverVersion().decode()
device_count = bindings.nvmlDeviceGetCount()
for device_i in range(device_count):
handle = bindings.nvmlDeviceGetHandleByIndex(device_i)
device_name = bindings.nvmlDeviceGetName(handle).decode()
gpu_mem_info = bindings.nvmlDeviceGetMemoryInfo(handle)
gpu_processes = bindings.nvmlDeviceGetComputeRunningProcesses(handle)
if include_graphics_processes:
gpu_processes = (
gpu_processes
+ bindings.nvmlDeviceGetGraphicsRunningProcesses(handle)
)
processes_info = []
for p in gpu_processes:
pid = p.pid
used_gpu_mem = p.usedGpuMemory
p = psutil.Process(pid=pid)
_ = p.cpu_percent()
time.sleep(
0.1
) # Recommended to preprobe and sleep for atleast 0.1 seconds.
processes_info.append(
NOD(
used_gpu_mem=used_gpu_mem,
device_idx=device_i,
name=p.name(),
username=p.username(),
memory_percent=p.memory_percent(),
cpu_percent=p.cpu_percent(),
cmdline=" ".join(p.cmdline()),
device_name=device_name,
create_time=p.create_time(),
status=p.status(),
pid=pid,
).as_dict()
)
"""
try:
fan_speed = pynvml.nvmlDeviceGetFanSpeed(handle)
power_usage = pynvml.nvmlDeviceGetPowerUsage(handle) # milliwatts mW
except pynvml.NVMLError_NotSupported as e:
fan_speed = None
power_usage = None
power_state = pynvml.nvmlDeviceGetPowerState(handle)
temperature = pynvml.nvmlDeviceGetTemperature(handle, pynvml.NVML_TEMPERATURE_GPU)
"""
devices.append(
NOD(
id=device_i,
name=device_name,
free=gpu_mem_info.free,
used=gpu_mem_info.used,
total=gpu_mem_info.total,
processes=processes_info,
).as_dict()
)
except Exception as e:
print(e)
driver_version = "No nvidia driver"
return driver_version, devices