Merge amd-dev into amd-master 20240731

Signed-off-by: Zhang Ava <niandong.zhang@amd.com>
Change-Id: Iad8ae44b4d92afc76ecb5afdd4ee57e9c981b6a8


[ROCm/amdsmi commit: ce0c45ebca]
This commit is contained in:
Zhang Ava
2024-08-02 13:07:51 +08:00
2 zmienionych plików z 48 dodań i 13 usunięć
@@ -26,6 +26,7 @@ import os
import platform
import sys
import time
import re
from subprocess import run
from subprocess import PIPE, STDOUT
@@ -305,7 +306,21 @@ class AMDSMIHelpers():
return (gpu_choices, gpu_choices_str)
def get_device_handles_from_gpu_selections(self, gpu_selections: List[str], gpu_choices=None):
@staticmethod
def is_UUID(uuid_question: str) -> bool:
"""Determine if given string is of valid UUID format
Args:
uuid_question (str): the given string to be evaluated.
Returns:
True or False: wether the UUID given matches the UUID format.
"""
UUID_pattern = re.compile("^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$", flags=re.IGNORECASE)
if re.match(UUID_pattern, uuid_question) is None:
return False
return True
def get_device_handles_from_gpu_selections(self, gpu_selections: List[str], gpu_choices=None) -> tuple:
"""Convert provided gpu_selections to device_handles
Args:
@@ -313,9 +328,9 @@ class AMDSMIHelpers():
ex: ID:0 | BDF:0000:23:00.0 | UUID:ffffffff-0000-1000-0000-000000000000
gpu_choices (dict{gpu_choices}): This is a dictionary of the possible gpu_choices
Returns:
(True, list[device_handles]): Returns a list of all the gpu_selections converted to
(True, True, list[device_handles]): Returns a list of all the gpu_selections converted to
amdsmi device_handles
(False, str): Return False, and the first input that failed to be converted
(False, valid_gpu_format, str): Return False, whether the format of the GPU input is valid, and the first input that failed to be converted
"""
if 'all' in gpu_selections:
return (True, amdsmi_interface.amdsmi_get_processor_handles())
@@ -324,6 +339,7 @@ class AMDSMIHelpers():
gpu_selections = [gpu_selections]
if gpu_choices is None:
# obtains dictionary of possible gpu choices
gpu_choices = self.get_gpu_choices()[0]
selected_device_handles = []
@@ -332,6 +348,7 @@ class AMDSMIHelpers():
for gpu_id, gpu_info in gpu_choices.items():
bdf = gpu_info['BDF']
is_bdf = True
uuid = gpu_info['UUID']
device_handle = gpu_info['Device Handle']
@@ -347,13 +364,16 @@ class AMDSMIHelpers():
valid_gpu_choice = True
break
except Exception:
# Ignore exception when checking if the gpu_choice is a BDF
is_bdf = False
pass
if not valid_gpu_choice:
logging.debug(f"AMDSMIHelpers.get_device_handles_from_gpu_selections - Unable to convert {gpu_selection}")
return False, gpu_selection
return True, selected_device_handles
valid_gpu_format = True
if not self.is_UUID(gpu_selection) and not gpu_selection.isdigit() and not is_bdf:
valid_gpu_format = False
return False, valid_gpu_format, gpu_selection
return True, True, selected_device_handles
def get_device_handles_from_cpu_selections(self, cpu_selections: List[str], cpu_choices=None):
@@ -390,8 +410,11 @@ class AMDSMIHelpers():
break
if not valid_cpu_choice:
logging.debug(f"AMDSMIHelpers.get_device_handles_from_cpu_selections - Unable to convert {cpu_selection}")
return False, cpu_selection
return True, selected_device_handles
valid_cpu_format = True
if not cpu_selection.isdigit():
valid_cpu_format = False
return False, valid_cpu_format, cpu_selection
return True, True, selected_device_handles
def get_device_handles_from_core_selections(self, core_selections: List[str], core_choices=None):
@@ -428,8 +451,11 @@ class AMDSMIHelpers():
break
if not valid_core_choice:
logging.debug(f"AMDSMIHelpers.get_device_handles_from_core_selections - Unable to convert {core_selection}")
return False, core_selection
return True, selected_device_handles
valid_core_format = True
if not core_selection.isdigit():
valid_core_format = False
return False, valid_core_format, core_selection
return True, True, selected_device_handles
def handle_gpus(self, args, logger, subcommand):
@@ -262,13 +262,16 @@ class AMDSMIParser(argparse.ArgumentParser):
def __call__(self, parser, args, values, option_string=None):
if "all" in gpu_choices:
del gpu_choices["all"]
status, selected_device_handles = amdsmi_helpers.get_device_handles_from_gpu_selections(gpu_selections=values,
status, gpu_format, selected_device_handles = amdsmi_helpers.get_device_handles_from_gpu_selections(gpu_selections=values,
gpu_choices=gpu_choices)
if status:
setattr(args, self.dest, selected_device_handles)
else:
if selected_device_handles == '':
raise amdsmi_cli_exceptions.AmdSmiMissingParameterValueException("--gpu", _GPUSelectAction.ouputformat)
elif not gpu_format:
raise amdsmi_cli_exceptions.AmdSmiInvalidParameterValueException(selected_device_handles,
_GPUSelectAction.ouputformat)
else:
raise amdsmi_cli_exceptions.AmdSmiDeviceNotFoundException(selected_device_handles,
_GPUSelectAction.ouputformat,
@@ -289,13 +292,16 @@ class AMDSMIParser(argparse.ArgumentParser):
def __call__(self, parser, args, values, option_string=None):
if "all" in cpu_choices:
del cpu_choices["all"]
status, selected_device_handles = amdsmi_helpers.get_device_handles_from_cpu_selections(cpu_selections=values,
status, cpu_format, selected_device_handles = amdsmi_helpers.get_device_handles_from_cpu_selections(cpu_selections=values,
cpu_choices=cpu_choices)
if status:
setattr(args, self.dest, selected_device_handles)
else:
if selected_device_handles == '':
raise amdsmi_cli_exceptions.AmdSmiMissingParameterValueException("--cpu", _CPUSelectAction.ouputformat)
elif not cpu_format:
raise amdsmi_cli_exceptions.AmdSmiInvalidParameterValueException(selected_device_handles,
_CPUSelectAction.ouputformat)
else:
raise amdsmi_cli_exceptions.AmdSmiDeviceNotFoundException(selected_device_handles,
_CPUSelectAction.ouputformat,
@@ -315,13 +321,16 @@ class AMDSMIParser(argparse.ArgumentParser):
def __call__(self, parser, args, values, option_string=None):
if "all" in core_choices:
del core_choices["all"]
status, selected_device_handles = amdsmi_helpers.get_device_handles_from_core_selections(core_selections=values,
status, core_format, selected_device_handles = amdsmi_helpers.get_device_handles_from_core_selections(core_selections=values,
core_choices=core_choices)
if status:
setattr(args, self.dest, selected_device_handles)
else:
if selected_device_handles == '':
raise amdsmi_cli_exceptions.AmdSmiMissingParameterValueException("--core", _CoreSelectAction.ouputformat)
elif not core_format:
raise amdsmi_cli_exceptions.AmdSmiInvalidParameterValueException(selected_device_handles,
_CoreSelectAction.ouputformat)
else:
raise amdsmi_cli_exceptions.AmdSmiDeviceNotFoundException(selected_device_handles,
_CoreSelectAction.ouputformat,