This guide will help you get started with the AMDSMI library for monitoring and managing AMD GPUs and CPUs.
pip install amdsmiThe AMDSMI library follows a simple initialization → use → shutdown pattern:
import amdsmi
# 1. Initialize the library
amdsmi.amdsmi_init(amdsmi.AmdSmiInitFlags.INIT_AMD_GPUS)
try:
# 2. Use the library
devices = amdsmi.amdsmi_get_processor_handles()
for device in devices:
# Query device information
activity = amdsmi.amdsmi_get_gpu_activity(device)
print(f"GPU Activity: {activity}")
finally:
# 3. Always shut down
amdsmi.amdsmi_shut_down()Choose which device types to initialize:
# Initialize only GPUs (default)
amdsmi.amdsmi_init(amdsmi.AmdSmiInitFlags.INIT_AMD_GPUS)
# Initialize only CPUs (requires ESMI)
amdsmi.amdsmi_init(amdsmi.AmdSmiInitFlags.INIT_AMD_CPUS)
# Initialize all processor types
amdsmi.amdsmi_init(amdsmi.AmdSmiInitFlags.INIT_ALL_PROCESSORS)import amdsmi
amdsmi.amdsmi_init()
try:
# Get all processor handles
devices = amdsmi.amdsmi_get_processor_handles()
print(f"Found {len(devices)} devices")
# Get device type for each
for device in devices:
proc_type = amdsmi.amdsmi_get_processor_type(device)
print(f"Device type: {proc_type['processor_type']}")
finally:
amdsmi.amdsmi_shut_down()import amdsmi
amdsmi.amdsmi_init()
try:
devices = amdsmi.amdsmi_get_processor_handles()
for device in devices:
# Get GPU name
asic_info = amdsmi.amdsmi_get_gpu_asic_info(device)
print(f"\nGPU: {asic_info['market_name']}")
# Get utilization
activity = amdsmi.amdsmi_get_gpu_activity(device)
print(f" GFX Activity: {activity['gfx_activity']}%")
# Get temperature
temp = amdsmi.amdsmi_get_temp_metric(
device,
amdsmi.AmdSmiTemperatureType.EDGE,
amdsmi.AmdSmiTemperatureMetric.CURRENT
)
print(f" Temperature: {temp / 1000.0}°C")
# Get power
power = amdsmi.amdsmi_get_power_info(device)
print(f" Power: {power['current_socket_power'] / 1000000.0}W")
# Get VRAM usage
vram = amdsmi.amdsmi_get_gpu_vram_usage(device)
used_gb = vram['vram_used'] / (1024**3)
total_gb = vram['vram_total'] / (1024**3)
print(f" VRAM: {used_gb:.2f} GB / {total_gb:.2f} GB")
finally:
amdsmi.amdsmi_shut_down()The library uses specific exception types for different error conditions:
import amdsmi
from amdsmi import (
AmdSmiLibraryException,
AmdSmiParameterException,
AmdSmiException
)
try:
amdsmi.amdsmi_init()
devices = amdsmi.amdsmi_get_processor_handles()
if devices:
device = devices[0]
activity = amdsmi.amdsmi_get_gpu_activity(device)
except AmdSmiParameterException as e:
print(f"Invalid parameter: {e}")
except AmdSmiLibraryException as e:
print(f"Library error: {e.get_error_info()}")
except AmdSmiException as e:
print(f"AMDSMI error: {e}")
finally:
try:
amdsmi.amdsmi_shut_down()
except:
pass