AMD SMI Python interface overview#
The AMD SMI Python interface provides a convenient way to interact with AMD hardware through a simple and accessible API. Compatible with Python 3.6 and higher, this library requires the AMD driver to be loaded for initialization – review the prerequisites.
Get started#
To get started, the amdsmi folder should be copied and placed next to
the importing script. Import it as follows:
from amdsmi import *
try:
amdsmi_init()
# amdsmi calls ...
except AmdSmiException as e:
print(e)
finally:
try:
amdsmi_shut_down()
except AmdSmiException as e:
print(e)
Folder structure#
File name |
Description |
|---|---|
|
Python package initialization file |
|
Amdsmi library Python interface |
|
Python wrapper around amdsmi binary |
|
Amdsmi exceptions Python file |
Usage#
Note
hipcc and other compilers will not automatically link in the libamd_smi
dynamic library. To compile code that uses the AMD SMI library API, ensure the
libamd_smi.so can be located by setting the LD_LIBRARY_PATH environment
variable to the directory containing librocm_smi64.so (usually
/opt/rocm/lib) or by passing the -lamd_smi flag to the compiler.
See also
Refer to the Python library API reference.
An application using AMD SMI must call amdsmi_init() to initialize the AMI SMI
library before all other calls. This call initializes the internal data
structures required for subsequent AMD SMI operations. In the call, a flag can
be passed to indicate if the application is interested in a specific device
type.
amdsmi_shut_down() must be the last call to properly close connection to
driver and make sure that any resources held by AMD SMI are released.
Exceptions#
All exceptions are in amdsmi_exception.py file.
Exceptions that can be thrown by AMD SMI are:
AmdSmiException: base amdsmi exception classAmdSmiLibraryException: derives baseAmdSmiExceptionclass and represents errors that can occur in amdsmi-lib. When this exception is thrown,err_codeanderr_infoare set.err_codeis an integer that corresponds to errors that can occur in amdsmi-lib anderr_infois a string that explains the error that occurred.For example:
try: num_of_GPUs = len(amdsmi_get_processor_handles()) if num_of_GPUs == 0: print("No GPUs on machine") except AmdSmiException as e: print("Error code: {}".format(e.err_code)) if e.err_code == amdsmi_wrapper.AMDSMI_STATUS_RETRY: print("Error info: {}".format(e.err_info))
AmdSmiRetryException: DerivesAmdSmiLibraryExceptionclass and signals device is busy and call should be retried.AmdSmiTimeoutException: DerivesAmdSmiLibraryExceptionclass and represents that call had timed out.AmdSmiParameterException: Derives baseAmdSmiExceptionclass and represents errors related to invaild parameters passed to functions. When this exception is thrown,err_msgis set and it explains what is the actual and expected type of the parameters.AmdSmiBdfFormatException: Derives baseAmdSmiExceptionclass and represents invalid bdf format.