Source code for ewoksid02.utils.cupyutils
import logging
import cupy
import numpy
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
[docs]
def get_device_name():
device_id = cupy.cuda.Device().id
device_props = cupy.cuda.runtime.getDeviceProperties(device_id)
device_name = device_props["name"].decode()
return device_name
[docs]
def log_allocated_gpu_memory():
"""Log the status of GPU memory"""
available_mem_GB, total_mem_GB = numpy.array(cupy.cuda.runtime.memGetInfo()) / 1e9
mem_usage_GB = total_mem_GB - available_mem_GB
device_name = get_device_name()
if available_mem_GB / total_mem_GB < 0.1:
mem_message = "Low memory available"
color_prefix = "\033[91m"
log_level = "warning"
elif available_mem_GB / total_mem_GB < 0.3:
mem_message = "Medium memory available"
color_prefix = "\033[93m"
log_level = "warning"
else:
mem_message = "Sufficient memory available"
color_prefix = "\033[92m"
log_level = "info"
color_suffix = "\033[0m"
msg = f"{color_prefix}Memory on {device_name}: {mem_usage_GB:.2f}GB used; {available_mem_GB:.2f}GB available. {mem_message}{color_suffix}"
if log_level == "warning":
logger.warning(msg)
elif log_level == "info":
logger.info(msg)