[docs]defsmi_query(var_name,units=False):cmd=f'nvidia-smi --query-gpu={var_name} --format=noheader,csv'ifnotunits:cmd+=',nounits'output=subprocess.check_output(cmd,shell=True)if"Failed to initialize NVML: Driver/library version mismatch"inoutput.decode('ascii'):raiseSmiError(output)returnoutput
[docs]defgpu_params(dest_file_path):# Uses 1 query instead of 3 because too time-consumingcmd='nvidia-smi --query-gpu=memory.used,memory.total,utilization.gpu --format=noheader,csv,nounits'cmd+=f' > {dest_file_path}'subprocess.Popen(cmd,shell=True)
[docs]defimmediate_shutdown(self):withself._shutdown_lock:self._shutdown_thread=True# statuses = [psutil.Process(_proc.pid).status() for _proc in self._processes.values()]terminated_procs=0forprocinself._processes.values():status=psutil.Process(proc.pid).status()ifstatus=='sleeping':proc.terminate()terminated_procs+=1ifnotterminated_procs:forprocinself._processes.values():proc.terminate()
[docs]defbackup_file(file_path):# REFACTOR: put in workspace or IObase_path,ext=os.path.splitext(file_path)new_path=base_path+'.bcp'+extshutil.copy(file_path,new_path)
[docs]defmake_abs(directory,file_name):"""Make file_name absolute if it is not"""ifos.path.isabs(file_name):f_path=file_nameelse:f_path=os.path.join(directory,file_name)returnf_path
[docs]defhandle_deprecated_args(deprecated_args_map):""" Decorator to handle deprecated arguments by renaming them. It takes a dictionary and renames old arguments to new ones. Parameters ---------- deprecated_args_map : dict Dictionary mapping old argument names to new ones. Returns ------- """defdecorator(func):@functools.wraps(func)defwrapper(*args,**kwargs):forold_arg,new_argindeprecated_args_map.items():ifold_arginkwargs:warnings.warn(f"The '{old_arg}' argument is deprecated, use '{new_arg}' instead.",DeprecationWarning)kwargs[new_arg]=kwargs.pop(old_arg)returnfunc(*args,**kwargs)returnwrapperreturndecorator
[docs]defsubstitute_deprecated_arg(old_arg,new_arg,old_arg_name,new_arg_name):ifnew_argisnotNone:raiseValueError(f'Cannot use both {old_arg_name} and {new_arg_name} arguments.')else:warnings.warn(f'The {old_arg_name} argument is deprecated. Use {new_arg_name} instead.',DeprecationWarning,stacklevel=2)returnold_arg
[docs]defvalidate_arg(arg_name,value,valid_values):""" Check if the value is in the list of valid values and raise a ValueError if not. Parameters ---------- arg_name value valid_values Returns ------- value if it is in the list of valid values, otherwise raises a ValueError """ifvaluenotinvalid_values:raiseValueError(f'Unknown {arg_name} "{value}". 'f'Supported values are "{valid_values}".')returnvalue