Python library for monitoring and managing AMD GPUs and CPUs with programmatic hardware metrics access
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