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.
See also
Refer to the Python library API reference.
Prerequisites#
Before get started, make sure your environment satisfies the following prerequisites. See the requirements section for more information.
Ensure
amdgpudrivers are installed properly for initialization.Export
LD_LIBRARY_PATHto theamdsmiinstallation directory.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rocm/lib:/opt/rocm/lib64:
Install Python 3.6.8+.
Get started#
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.
Note
The following environment variables can be set to control internal cache durations. They must be set before the AMDSMI library loads.
Variable |
Description |
Default |
|---|---|---|
|
GPU metrics cache duration (ms) |
1 ms (set to 0 to disable) |
|
GPU ASIC info cache duration (ms) |
10000 ms (set to 0 to disable) |
You can set these in one of two ways:
In Python (before the AMDSMI library loads):
import os os.environ["AMDSMI_GPU_METRICS_CACHE_MS"] = "200" from amdsmi import *
From the shell (when invoking Python):
AMDSMI_GPU_METRICS_CACHE_MS=200 python tools/amdsmi_quick_start.py
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#
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.
See also
Refer to the Python library API reference.
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.try: num_of_GPUs = len(amdsmi_get_processor_handles()) except amdsmi_exception.AmdSmiLibraryException as e: print("Unable to get processor handles, error: {} {}".format(str(e.get_error_code()), e.err_info))
AmdSmiParameterException: Derives baseAmdSmiExceptionclass and represents errors related to invalid 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.For example:
try: processor_handles = amdsmi_get_cpusocket_handles() if len(processor_handles) == 0: print("No CPU sockets on machine") else: for processor in processor_handles: temperature = amdsmi_get_cpu_socket_temperature(processor) print(temperature) except amdsmi_exception.AmdSmiParameterException as e: print("Invalid parameter error: {} {}".format(str(e.get_error_code()), e.err_msg)) except amdsmi_exception.AmdSmiLibraryException as e: print("Unable to get processor handles, error: {} {}".format(str(e.get_error_code()), e.err_info))