Removed gpuv-smi and rocm-smi compatibility options
	Updated py-interface README

Signed-off-by: Maisam Arif <maisarif@amd.com>
Change-Id: I1cad3e65e0928e7041727c6d5e7e7bdc39d667d0
Signed-off-by: Maisam Arif <maisarif@amd.com>


[ROCm/amdsmi commit: 5c52f82328]
Этот коммит содержится в:
Maisam Arif
2023-09-24 02:03:51 -05:00
коммит произвёл Maisam Arif
родитель b6630e0200
Коммит 260fd7faae
6 изменённых файлов: 23 добавлений и 150 удалений
+1 -6
Просмотреть файл
@@ -72,17 +72,12 @@ add_custom_target(
link_amdsmi_cli ALL
DEPENDS amdsmi_cli
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/bin/amd-smi
${CMAKE_CURRENT_BINARY_DIR}/bin/gpuv-smi
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E create_symlink
../${PY_CLI_INSTALL_DIR}/${PY_PACKAGE_DIR}/amdsmi_cli.py
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/amd-smi
COMMAND ${CMAKE_COMMAND} -E create_symlink
amd-smi
${CMAKE_CURRENT_BINARY_DIR}/bin/gpuv-smi)
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/amd-smi)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/bin/amd-smi
${CMAKE_CURRENT_BINARY_DIR}/bin/gpuv-smi
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT dev)
+1 -9
Просмотреть файл
@@ -42,15 +42,7 @@ def _print_error(e, destination):
if __name__ == "__main__":
# Set compatability mode based on which cli mapping user selects
if 'gpuv-smi' in sys.argv[0]:
compatibility = AMDSMILogger.LoggerCompatibility.gpuvsmi.value
elif 'rocm-smi' in sys.argv[0]:
compatibility = AMDSMILogger.LoggerCompatibility.rocmsmi.value
else:
compatibility = AMDSMILogger.LoggerCompatibility.amdsmi.value
amd_smi_commands = AMDSMICommands(compatibility=compatibility)
amd_smi_commands = AMDSMICommands()
amd_smi_parser = AMDSMIParser(amd_smi_commands.version,
amd_smi_commands.list,
amd_smi_commands.static,
+6 -43
Просмотреть файл
@@ -34,16 +34,11 @@ from amdsmi import amdsmi_exception
class AMDSMICommands():
"""This class contains all the commands corresponding to AMDSMIParser
Each command function will interact with AMDSMILogger to handle
displaying the output to the specified compatibility, format, and
destination.
displaying the output to the specified format and destination.
"""
def __init__(self, compatibility='amdsmi',
format='human_readable',
destination='stdout') -> None:
def __init__(self, format='human_readable', destination='stdout') -> None:
self.helpers = AMDSMIHelpers()
self.logger = AMDSMILogger(compatibility=compatibility,
format=format,
destination=destination)
self.logger = AMDSMILogger(format=format, destination=destination)
try:
self.device_handles = amdsmi_interface.amdsmi_get_processor_handles()
except amdsmi_exception.AmdSmiLibraryException as e:
@@ -125,12 +120,7 @@ class AMDSMICommands():
self.logger.store_multiple_device_output()
return # Skip printing when there are multiple devices
# compatibility with gpuvsmi needs a list for single gpu
if self.logger.is_gpuvsmi_compatibility() and not multiple_devices:
self.logger.store_multiple_device_output()
self.logger.print_output(multiple_device_enabled=True)
else:
self.logger.print_output()
self.logger.print_output()
def static(self, args, multiple_devices=False, gpu=None, asic=None,
@@ -262,11 +252,6 @@ class AMDSMICommands():
if args.vbios:
try:
vbios_info = amdsmi_interface.amdsmi_get_gpu_vbios_info(args.gpu)
if self.logger.is_gpuvsmi_compatibility():
vbios_info['version'] = vbios_info.pop('version')
vbios_info['build_date'] = vbios_info.pop('build_date')
vbios_info['part_number'] = vbios_info.pop('part_number')
static_dict['vbios'] = vbios_info
except amdsmi_exception.AmdSmiLibraryException as e:
static_dict['vbios'] = "N/A"
@@ -500,7 +485,7 @@ class AMDSMICommands():
"""
if gpu:
args.gpu = gpu
if fw_list: # Currently a compatiblity option of gpuv-smi
if fw_list:
args.fw_list = fw_list
# Handle No GPU passed
@@ -525,20 +510,12 @@ class AMDSMICommands():
fw_entry['fw_version'] = fw_entry.pop('fw_version')
firmware_identifier = 'FW'
if self.logger.is_gpuvsmi_compatibility():
firmware_identifier = 'UCODE'
fw_entry['name'] = fw_entry.pop('fw_id')
fw_entry['version'] = fw_entry.pop('fw_version')
# Add custom human readable formatting
if self.logger.is_human_readable_format():
fw_info['fw_list'][fw_index] = {f'{firmware_identifier} {fw_index}': fw_entry}
else:
fw_info['fw_list'][fw_index] = fw_entry
if self.logger.is_gpuvsmi_compatibility():
fw_info['ucode_list'] = fw_info.pop('fw_list')
fw_list.update(fw_info)
except amdsmi_exception.AmdSmiLibraryException as e:
fw_list['fw_list'] = "N/A"
@@ -547,11 +524,7 @@ class AMDSMICommands():
multiple_devices_csv_override = False
# Convert and store output by pid for csv format
if self.logger.is_csv_format():
if self.logger.is_gpuvsmi_compatibility():
fw_key = 'ucode_list'
else:
fw_key = 'fw_list'
fw_key = 'fw_list'
for fw_info_dict in fw_list[fw_key]:
for key, value in fw_info_dict.items():
multiple_devices_csv_override = True
@@ -961,15 +934,8 @@ class AMDSMICommands():
'hotspot': temperature_hotspot_current,
'mem': temperature_vram_current}
if self.logger.is_gpuvsmi_compatibility():
temperatures = {'edge_temperature': temperature_edge_current,
'hotspot_temperature': temperature_hotspot_current,
'mem_temperature': temperature_vram_current}
if self.logger.is_human_readable_format():
unit = '\N{DEGREE SIGN}C'
if self.logger.is_gpuvsmi_compatibility():
unit = 'C'
for temperature_key, temperature_value in temperatures.items():
if 'AMD_SMI_STATUS' not in str(temperature_value):
temperatures[temperature_key] = f"{temperature_value} {unit}"
@@ -1001,8 +967,6 @@ class AMDSMICommands():
except amdsmi_exception.AmdSmiLibraryException as e:
ecc_count = "N/A"
logging.debug("Failed to get ecc count for gpu %s at block %s | %s", args.gpu, gpu_block, e.get_error_info())
if self.logger.is_gpuvsmi_compatibility():
ecc_count = "N/A"
ecc_dict[state['block']] = {'correctable' : ecc_count,
'uncorrectable': ecc_count}
@@ -1434,7 +1398,6 @@ class AMDSMICommands():
def topology(self, args, multiple_devices=False, gpu=None, access=None,
weight=None, hops=None, link_type=None, numa_bw=None):
""" Get topology information for target gpus
The compatibility mode for this will only be in amdsmi & rocm-smi
params:
args - argparser args to pass to subcommand
multiple_devices (bool) - True if checking for multiple devices
+3 -78
Просмотреть файл
@@ -31,12 +31,10 @@ from amdsmi_helpers import AMDSMIHelpers
import amdsmi_cli_exceptions
class AMDSMILogger():
def __init__(self, compatibility='amdsmi', format='human_readable',
destination='stdout') -> None:
def __init__(self, format='human_readable', destination='stdout') -> None:
self.output = {}
self.multiple_device_output = []
self.watch_output = []
self.compatibility = compatibility # amd-smi, gpuv-smi, or rocm-smi
self.format = format # csv, json, or human_readable
self.destination = destination # stdout, path to a file (append)
self.helpers = AMDSMIHelpers()
@@ -49,13 +47,6 @@ class AMDSMILogger():
human_readable = 'human_readable'
class LoggerCompatibility(Enum):
"""Enum for logger compatibility"""
amdsmi = 'amdsmi'
rocmsmi = 'rocmsmi'
gpuvsmi = 'gpuvsmi'
class CsvStdoutBuilder(object):
def __init__(self):
self.csv_string = []
@@ -79,18 +70,6 @@ class AMDSMILogger():
return self.format == self.LoggerFormat.human_readable.value
def is_amdsmi_compatibility(self):
return self.compatibility == self.LoggerCompatibility.amdsmi.value
def is_rocmsmi_compatibility(self):
return self.compatibility == self.LoggerCompatibility.rocmsmi.value
def is_gpuvsmi_compatibility(self):
return self.compatibility == self.LoggerCompatibility.gpuvsmi.value
def _capitalize_keys(self, input_dict):
output_dict = {}
for key in input_dict.keys():
@@ -123,10 +102,6 @@ class AMDSMILogger():
yaml_data = yaml.safe_load(json_string)
yaml_output = yaml.dump(yaml_data, sort_keys=False, allow_unicode=True)
if self.is_gpuvsmi_compatibility():
# Convert from GPU: 0 to GPU 0:
yaml_output = re.sub('GPU: ([0-9]+)', 'GPU \\1:', yaml_output)
# Remove a key line if it is a spacer
yaml_output = yaml_output.replace("AMDSMI_SPACING_REMOVAL:\n", "")
yaml_output = yaml_output.replace("'", "") # Remove ''
@@ -196,13 +171,6 @@ class AMDSMILogger():
value_with_parent_key[parent_key] = child_dict
value = value_with_parent_key
if self.is_gpuvsmi_compatibility():
if key in ('asic', 'bus', 'pcie', 'vbios','board', 'limit'):
value_with_parent_key = {}
for child_key, child_value in value.items():
value_with_parent_key[key + '_' + child_key] = child_value
value = value_with_parent_key
output_dict.update(self.flatten_dict(value).items())
else:
output_dict[key] = value
@@ -210,9 +178,7 @@ class AMDSMILogger():
def store_output(self, device_handle, argument, data):
""" Store the argument and device handle according to the compatibility.
Each compatibility function will handle the output format and
populate the output
""" Convert device handle to gpu id and store output
params:
device_handle - device handle object to the target device output
argument (str) - key to store data
@@ -221,12 +187,7 @@ class AMDSMILogger():
Nothing
"""
gpu_id = self.helpers.get_gpu_id_from_device_handle(device_handle)
if self.is_amdsmi_compatibility():
self._store_output_amdsmi(gpu_id=gpu_id, argument=argument, data=data)
elif self.is_rocmsmi_compatibility():
self._store_output_rocmsmi(gpu_id=gpu_id, argument=argument, data=data)
elif self.is_gpuvsmi_compatibility():
self._store_output_gpuvsmi(gpu_id=gpu_id, argument=argument, data=data)
self._store_output_amdsmi(gpu_id=gpu_id, argument=argument, data=data)
def _store_output_amdsmi(self, gpu_id, argument, data):
@@ -265,42 +226,6 @@ class AMDSMILogger():
raise amdsmi_cli_exceptions(self, "Invalid output format given, only json, csv, and human_readable supported")
def _store_output_gpuvsmi(self, gpu_id, argument, data):
if argument == 'timestamp': # Make sure timestamp is the first element in the output
self.output['timestamp'] = int(time.time())
if self.is_json_format() or self.is_human_readable_format():
self.output['gpu'] = int(gpu_id)
self.output[argument] = data
elif self.is_csv_format():
self.output['gpu'] = int(gpu_id)
if argument == 'values' or isinstance(data, dict):
flat_dict = self.flatten_dict(data)
self.output.update(flat_dict)
else:
self.output[argument] = data
gpuv_flat_dict = {}
for key, value in self.output.items():
gpuv_flat_dict[key] = value
# Change AMDSMI_STATUS strings to N/A for gpuv compatability
if isinstance(value, str):
if 'AMDSMI_STATUS' in value:
gpuv_flat_dict[key] = 'N/A'
# Change bdf and uuid keys for gpuv compatability
if isinstance(key, str):
if key in ('bdf','uuid'):
gpuv_flat_dict['gpu_' + key] = gpuv_flat_dict.pop(key)
self.output = gpuv_flat_dict
else:
raise amdsmi_cli_exceptions(self, "Invalid output format given, only json, csv, and human_readable supported")
def store_multiple_device_output(self):
""" Store the current output into the multiple_device_output
then clear the current output
+1 -3
Просмотреть файл
@@ -53,8 +53,6 @@ class AMDSMIParser(argparse.ArgumentParser):
platform_string = f"Platform: {self.helpers.os_info()}"
program_name = 'amd-smi'
if 'gpuv-smi' in sys.argv[0]:
program_name = 'gpuv-smi'
# Adjust argument parser options
super().__init__(
@@ -207,7 +205,7 @@ class AMDSMIParser(argparse.ArgumentParser):
return _GPUSelectAction
def _add_command_modifiers(self, subcommand_parser, rocm_smi=True, gpuv_smi=True):
def _add_command_modifiers(self, subcommand_parser):
json_help = "Displays output in JSON format (human readable by default)."
csv_help = "Displays output in CSV format (human readable by default)."
file_help = "Saves output into a file on the provided path (stdout by default)."
+11 -11
Просмотреть файл
@@ -1208,7 +1208,7 @@ Example:
```python
try:
devices = gpuvsmi_get_devices()
devices = amdsmi_get_processor_handles()
if len(devices) == 0:
print("No GPUs on machine")
else:
@@ -1253,7 +1253,7 @@ Example:
```python
try:
devices = gpuvsmi_get_devices()
devices = amdsmi_get_processor_handles()
if len(devices) == 0:
print("No GPUs on machine")
else:
@@ -1290,7 +1290,7 @@ Example:
```python
try:
devices = gpuvsmi_get_devices()
devices = amdsmi_get_processor_handles()
if len(devices) == 0:
print("No GPUs on machine")
else:
@@ -1322,7 +1322,7 @@ Example:
```python
try:
devices = gpuvsmi_get_devices()
devices = amdsmi_get_processor_handles()
if len(devices) == 0:
print("No GPUs on machine")
else:
@@ -1353,7 +1353,7 @@ Example:
```python
try:
devices = gpuvsmi_get_devices()
devices = amdsmi_get_processor_handles()
if len(devices) == 0:
print("No GPUs on machine")
else:
@@ -1391,7 +1391,7 @@ Example:
```python
try:
devices = gpuvsmi_get_devices()
devices = amdsmi_get_processor_handles()
if len(devices) == 0:
print("No GPUs on machine")
else:
@@ -1423,7 +1423,7 @@ Example:
```python
try:
devices = gpuvsmi_get_devices()
devices = amdsmi_get_processor_handles()
if len(devices) == 0:
print("No GPUs on machine")
else:
@@ -1495,7 +1495,7 @@ Example:
```python
try:
devices = gpuvsmi_get_devices()
devices = amdsmi_get_processor_handles()
if len(devices) == 0:
print("No GPUs on machine")
else:
@@ -1658,11 +1658,11 @@ Exceptions that can be thrown by `amdsmi_is_gpu_power_management_enabled` functi
Example:
```python
try:
processors = amdsmi_get_processor_handles()
if len(processors) == 0:
devices = amdsmi_get_processor_handles()
if len(devices) == 0:
print("No GPUs on machine")
else:
for processor in processors:
for processor in devices:
is_power_management_enabled = amdsmi_is_gpu_power_management_enabled(processor)
print(is_power_management_enabled)
except AmdSmiException as e: