A Python library to track device usage, such as Mobilint NPU, NVIDIA GPU, Intel CPU, ...
Project description
Mobilint Device Tracker
A lightweight Python library and CLI for tracking dynamic hardware metrics and collecting static system metadata across CPU, DRAM, GPU, and NPU.
Overview
mblt-tracker is designed to help developers and researchers measure hardware performance with fair and consistent criteria. It provides a unified interface to poll metrics in the background while your code runs, producing both summarized statistics and detailed time-series traces.
✨ Key Features
- Multi-Backend Support: Unified interface for Intel CPU/DRAM, NVIDIA GPU, and Mobilint NPU.
- Background Tracking: Uses a background scheduler to poll metrics without blocking your main execution.
- Comprehensive Metrics: Capture Power (Watts), Utilization (%), Memory Usage (MB/%), and Temperature (C).
- Statistical Summaries: Automatically calculates averages, peaks (max), and p99 values.
- Time-Series Traces: Export raw data for custom plotting and analysis.
- Static Metadata: Collect best-effort host, OS, CPU, DRAM capacity/type/speed, motherboard, PCIe, driver, firmware, and device information for reproducible benchmarks.
- CLI Collection Tool: Use
mblt-tracker collectto export static host and PCIe information as JSON. - PCIe Discovery: Detect GPU/NPU-related PCIe devices on Linux and Windows, including current and maximum link speed/width where available.
- Lightweight: Minimal overhead, designed for production and research environments.
🚀 Installation
pip install mblt-tracker
For the latest features, install directly from source:
git clone https://github.com/mobilint/mblt-tracker.git
cd mblt-tracker
pip install -e .
📖 Quick Start Guide
The typical workflow involves initializing a tracker, starting it before your target workload, and stopping it after.
from mblt_tracker import CPUDeviceTracker # or DRAMDeviceTracker, GPUDeviceTracker, NPUDeviceTracker
# 1. Initialize with a polling interval (seconds)
tracker = CPUDeviceTracker(interval=0.1)
# 2. Start tracking (best to run after warm-up)
tracker.start()
# --- Your workload starts here ---
# e.g., model.inference(data)
# --- Your workload ends here ---
# 3. Stop tracking
tracker.stop()
# 4. Access results
metrics = tracker.get_metric()
def format_metric(value, unit):
return f"{value:.2f} {unit}" if value is not None else f"N/A {unit}"
print(f"Average Power: {format_metric(metrics['avg_power_w'], 'W')}")
print(f"Max Utilization: {format_metric(metrics['max_utilization_pct'], '%')}")
print(f"Max Temperature: {format_metric(metrics['max_temperature_c'], 'C')}")
# 5. Export time-series traces
power_trace = tracker.get_trace() # list of (timestamp, power_w)
util_trace = tracker.get_util_trace() # list of (timestamp, utilization_pct)
temp_trace = tracker.get_temp_trace() # list of (timestamp, temperature_c)
# 6. Collect static metadata for reproducibility
static_info = tracker.get_static_info()
Command Line Interface
mblt-tracker provides a CLI for collecting static host and PCIe metadata without writing Python code.
# Print collected information to stdout
mblt-tracker collect
# Save collected information as JSON
mblt-tracker collect -o static-info.json
# Include all PCIe devices instead of only GPU/NPU-related devices
mblt-tracker collect --all-pcie-devices
# Filter NPU PCIe discovery by vendor/device/class
mblt-tracker collect --pcie-vendor-id 0x1ed5
mblt-tracker collect --pcie-vendor-id 1ed5 --pcie-device-id 0100
mblt-tracker collect --pcie-class-filter 0x12
The CLI output is a JSON document containing best-effort host CPU, DRAM, motherboard, OS, GPU, NPU, driver, and PCIe information. For NVIDIA GPU entries, NVML is the source of truth for GPU identity and PCIe link metadata; OS PCIe discovery is used only to attach non-link PCIe identifiers and descriptive fields where available. On Linux, non-NVIDIA PCIe information is read from sysfs. On Windows, non-NVIDIA PCI devices are collected through PowerShell/CIM/PnP queries.
Example Output
The following examples show representative mblt-tracker collect outputs across
Windows and Linux systems. Public static output intentionally omits
privacy-sensitive host and device instance identifiers: DRAM DIMM part/serial
numbers, motherboard serial/asset tags, and PCIe bus_address / Windows
pnp_device_id are not exposed, including when --all-pcie-devices is used.
DRAM byte counts are accompanied by MB/GB display units; DRAM speed, type,
module capacity, and estimated theoretical bandwidth are kept to make benchmark results easier to
interpret.
Windows host with Intel UHD Graphics, NVIDIA RTX 3090, and Mobilint NPU
$ mblt-tracker collect
WARNING:root:imports error
You need to install pymongo>=3.9.0 in order to use MongoOutput
WARNING:root:imports error
You need to install pandas>=0.25.1 in order to use DataFrameOutput
{
"hardware": {
"cpu": {
"architecture": "AMD64",
"model_name": "13th Gen Intel(R) Core(TM) i5-13500",
"vendor": "GenuineIntel"
},
"dram": {
"available_bytes": 15580520448,
"available_gb": 14.51,
"available_mb": 14858.74,
"configured_speed_mhz": 5600,
"module_count": 2,
"modules": [
{
"capacity_bytes": 17179869184,
"capacity_gb": 16.0,
"capacity_mb": 16384.0,
"configured_speed_mhz": 5600,
"data_width_bits": 64,
"ram_type": "DDR5",
"speed_mhz": 5600,
"theoretical_bandwidth_gbps": 44.8,
"total_width_bits": 64
},
{
"capacity_bytes": 17179869184,
"capacity_gb": 16.0,
"capacity_mb": 16384.0,
"configured_speed_mhz": 5600,
"data_width_bits": 64,
"ram_type": "DDR5",
"speed_mhz": 5600,
"theoretical_bandwidth_gbps": 44.8,
"total_width_bits": 64
}
],
"ram_type": "DDR5",
"speed_mhz": 5600,
"theoretical_bandwidth_gbps": 89.6,
"total_bytes": 34113015808,
"total_gb": 31.77,
"total_mb": 32532.71
},
"gpus": [
{
"class": "0x038000",
"dev_no": 0,
"device_id": "0x4680",
"driver_date": "/Date(1764547200000)/",
"driver_description": "Intel(R) UHD Graphics 770",
"driver_provider": "Intel Corporation",
"driver_version": "32.0.101.7082",
"manufacturer": "Intel Corporation",
"name": "Intel(R) UHD Graphics 770",
"revision": "0x0c",
"status": "OK",
"subsystem_device_id": "0x7d96",
"subsystem_vendor_id": "0x1462",
"vendor_id": "0x8086"
},
{
"architecture": "Ampere",
"class": "0x030000",
"dev_no": 0,
"device_id": "0x2204",
"driver_date": "/Date(1773705600000)/",
"driver_description": "NVIDIA GeForce RTX 3090",
"driver_provider": "NVIDIA",
"driver_version": "595.97",
"lane_width": "x4",
"link_generation": "Gen2",
"manufacturer": "NVIDIA",
"max_lane_width": "x16",
"max_link_generation": "Gen4",
"memory_total_bytes": 25769803776,
"name": "NVIDIA GeForce RTX 3090",
"revision": "0xa1",
"status": "OK",
"subsystem_device_id": "0x1454",
"subsystem_vendor_id": "0x10de",
"vendor_id": "0x10de"
}
],
"motherboard": {
"chipset": "INTEL Intel(R) SMBus - 7A23",
"manufacturer": "Micro-Star International Co., Ltd.",
"model_name": "MAG B760 TOMAHAWK WIFI (MS-7D96)",
"pcie": {
"max_lane_width": "x16",
"max_link_generation": "Gen4",
"max_link_speed": "16.0 GT/s PCIe"
},
"version": "2.0"
},
"npus": [
{
"class": "0x078000",
"current_link_speed": "16.0 GT/s PCIe",
"current_link_width": "8",
"dev_no": 0,
"device_id": "0x0000",
"driver_date": "/Date(1774828800000)/",
"driver_description": "MOBILINT NPU Accelerator",
"driver_provider": "MOBILINT, Inc.",
"lane_width": "x8",
"link_generation": "Gen4",
"manufacturer": "MOBILINT, Inc.",
"max_lane_width": "x8",
"max_link_generation": "Gen4",
"max_link_speed": "16.0 GT/s PCIe",
"max_link_width": "8",
"name": "MOBILINT NPU Accelerator",
"revision": "0x02",
"status": "OK",
"subsystem_device_id": "0x1093",
"subsystem_vendor_id": "0x0402",
"vendor_id": "0x209f"
}
]
},
"inference": {
"cpu": {
"governor": null,
"max_processor_state_pct": 100,
"min_processor_state_pct": 100,
"power_plan": "High performance"
},
"cuda": {
"version": "not_found"
},
"gpu": {
"cuda_driver": {
"version": "13.2"
},
"driver": {
"version": "595.97"
}
},
"npu_driver_version": "1.8.1.1348",
"os": {
"kernel_version": "11",
"name": "Windows",
"version": "10.0.26200"
},
"qbcompiler": {
"version": "not_installed"
},
"qbruntime": {
"version": "v1.2.0"
}
}
}
Linux host with NVIDIA RTX PRO 6000 Blackwell GPUs and MLA100
$ mblt-tracker collect
WARNING:root:imports error
You need to install pymongo>=3.9.0 in order to use MongoOutput
WARNING:root:imports error
You need to install pandas>=0.25.1 in order to use DataFrameOutput
{
"hardware": {
"cpu": {
"architecture": "x86_64",
"model_name": "INTEL(R) XEON(R) GOLD 6542Y",
"vendor": "GenuineIntel"
},
"dram": {
"available_bytes": 322689507328,
"available_gb": 300.53,
"available_mb": 307740.7,
"total_bytes": 405389791232,
"total_gb": 377.55,
"total_mb": 386609.83
},
"gpus": [
{
"class": "0x030000",
"dev_no": 0,
"device_id": "0x2000",
"manufacturer": "ASPEED Technology, Inc.",
"name": "ASPEED Graphics Family",
"revision": "0x52",
"subsystem_device_id": "0x1c6b",
"subsystem_vendor_id": "0x15d9",
"vendor_id": "0x1a03"
},
{
"architecture": "Blackwell",
"class": "0x030000",
"dev_no": 0,
"device_id": "0x2bb1",
"driver_version": "580.95.05",
"lane_width": "x16",
"link_generation": "Gen1",
"manufacturer": "NVIDIA Corporation",
"max_lane_width": "x16",
"max_link_generation": "Gen5",
"memory_total_bytes": 102641958912,
"name": "NVIDIA RTX PRO 6000 Blackwell Workstation Edition",
"revision": "0xa1",
"subsystem_device_id": "0x204b",
"subsystem_vendor_id": "0x10de",
"vendor_id": "0x10de"
},
{
"architecture": "Blackwell",
"class": "0x030000",
"dev_no": 1,
"device_id": "0x2bb1",
"driver_version": "580.95.05",
"lane_width": "x16",
"link_generation": "Gen1",
"manufacturer": "NVIDIA Corporation",
"max_lane_width": "x16",
"max_link_generation": "Gen5",
"memory_total_bytes": 102641958912,
"name": "NVIDIA RTX PRO 6000 Blackwell Workstation Edition",
"revision": "0xa1",
"subsystem_device_id": "0x204b",
"subsystem_vendor_id": "0x10de",
"vendor_id": "0x10de"
}
],
"motherboard": {
"chipset": "ASPEED Technology, Inc. AST1150 PCI-to-PCI Bridge",
"manufacturer": "Supermicro",
"model_name": "X13DEG-QT",
"pcie": {
"max_lane_width": "x16",
"max_link_generation": "Gen5",
"max_link_speed": "32.0 GT/s PCIe"
},
"version": "1.10"
},
"npus": [
{
"board_name": "aries0",
"card_id": 0,
"card_model": "MLA100",
"class": "0x7800002",
"current_link_speed": "16.0 GT/s PCIe",
"current_link_width": "8",
"dev_no": 0,
"device_id": "0x0",
"firmware": {
"revision": "0",
"version": "1.1"
},
"lane_width": "8",
"link_generation": "4",
"manufacturer": "Mobilint, Inc.",
"max_lane_width": "x8",
"max_link_generation": "Gen4",
"max_link_speed": "16.0 GT/s PCIe",
"max_link_width": "8",
"memory_total_bytes": 17179869184,
"name": "Aries",
"product": "Aries",
"revision": "0x2",
"subsystem_device_id": "0x1093",
"subsystem_vendor_id": "0x401",
"vendor_id": "0x209F"
}
]
},
"inference": {
"cpu": {
"governor": "schedutil",
"max_processor_state_pct": null,
"min_processor_state_pct": null,
"power_plan": null
},
"cuda": {
"version": "12.8"
},
"driver": {
"aries_version": "1.12.0",
"regulus_version": "N/A"
},
"gpu": {
"cuda_driver": {
"version": "13.0"
},
"driver": {
"version": "580.95.05"
}
},
"npu_driver_version": "1.12.0",
"os": {
"kernel_version": "6.8.0-110-generic",
"name": "Linux",
"version": "Ubuntu 24.04 LTS"
},
"qbcompiler": {
"version": "not_installed"
},
"qbruntime": {
"version": "v1.2.0"
}
}
}
Linux host with MLA400 NPUs and NVML unavailable
$ mblt-tracker collect
WARNING:root:imports error
You need to install pymongo>=3.9.0 in order to use MongoOutput
WARNING:root:imports error
You need to install pandas>=0.25.1 in order to use DataFrameOutput
Warning: NVML not available. GPU information will not be collected.
{
"hardware": {
"cpu": {
"architecture": "x86_64",
"model_name": "13th Gen Intel(R) Core(TM) i5-13600K",
"vendor": "GenuineIntel"
},
"dram": {
"available_bytes": 27281420288,
"available_gb": 25.41,
"available_mb": 26017.59,
"total_bytes": 33379606528,
"total_gb": 31.09,
"total_mb": 31833.27
},
"motherboard": {
"chipset": "Intel Corporation Raptor Lake PCI Express Root Port #25",
"manufacturer": "ASUSTeK COMPUTER INC.",
"model_name": "ROG STRIX B760-I GAMING WIFI",
"pcie": {
"max_lane_width": "x16",
"max_link_generation": "Gen5",
"max_link_speed": "32.0 GT/s PCIe"
},
"version": "Rev 1.xx"
},
"npus": [
{
"board_name": "aries0",
"card_id": 0,
"card_model": "MLA400",
"class": "0x7800002",
"current_link_speed": "16.0 GT/s PCIe",
"current_link_width": "8",
"dev_no": 0,
"device_id": "0x0",
"firmware": {
"revision": "0",
"version": "1.2.5"
},
"lane_width": "8",
"link_generation": "4",
"manufacturer": "MOBILINT, Inc.",
"max_lane_width": "x8",
"max_link_generation": "Gen4",
"max_link_speed": "16.0 GT/s PCIe",
"max_link_width": "8",
"memory_total_bytes": 17179869184,
"name": "MOBILINT NPU Accelerator",
"product": "Aries",
"revision": "0x2",
"subsystem_device_id": "0x108B",
"subsystem_vendor_id": "0x402",
"vendor_id": "0x209F"
},
{
"board_name": "aries1",
"card_id": 0,
"card_model": "MLA400",
"class": "0x7800002",
"current_link_speed": "16.0 GT/s PCIe",
"current_link_width": "8",
"dev_no": 1,
"device_id": "0x0",
"firmware": {
"revision": "0",
"version": "1.2.5"
},
"lane_width": "8",
"link_generation": "4",
"manufacturer": "MOBILINT, Inc.",
"max_lane_width": "x8",
"max_link_generation": "Gen4",
"max_link_speed": "16.0 GT/s PCIe",
"max_link_width": "8",
"memory_total_bytes": 17179869184,
"name": "MOBILINT NPU Accelerator",
"product": "Aries",
"revision": "0x2",
"subsystem_device_id": "0x108B",
"subsystem_vendor_id": "0x402",
"vendor_id": "0x209F"
},
{
"board_name": "aries2",
"card_id": 0,
"card_model": "MLA400",
"class": "0x7800002",
"current_link_speed": "16.0 GT/s PCIe",
"current_link_width": "8",
"dev_no": 2,
"device_id": "0x0",
"firmware": {
"revision": "0",
"version": "1.2.5"
},
"lane_width": "8",
"link_generation": "4",
"manufacturer": "MOBILINT, Inc.",
"max_lane_width": "x8",
"max_link_generation": "Gen4",
"max_link_speed": "16.0 GT/s PCIe",
"max_link_width": "8",
"memory_total_bytes": 17179869184,
"name": "MOBILINT NPU Accelerator",
"product": "Aries",
"revision": "0x2",
"subsystem_device_id": "0x108B",
"subsystem_vendor_id": "0x402",
"vendor_id": "0x209F"
},
{
"board_name": "aries3",
"card_id": 0,
"card_model": "MLA400",
"class": "0x7800002",
"current_link_speed": "16.0 GT/s PCIe",
"current_link_width": "8",
"dev_no": 3,
"device_id": "0x0",
"firmware": {
"revision": "0",
"version": "1.2.5"
},
"lane_width": "8",
"link_generation": "4",
"manufacturer": "MOBILINT, Inc.",
"max_lane_width": "x8",
"max_link_generation": "Gen4",
"max_link_speed": "16.0 GT/s PCIe",
"max_link_width": "8",
"memory_total_bytes": 17179869184,
"name": "MOBILINT NPU Accelerator",
"product": "Aries",
"revision": "0x2",
"subsystem_device_id": "0x108B",
"subsystem_vendor_id": "0x402",
"vendor_id": "0x209F"
}
]
},
"inference": {
"cpu": {
"governor": "powersave",
"max_processor_state_pct": null,
"min_processor_state_pct": null,
"power_plan": null
},
"cuda": {
"version": "12.8"
},
"driver": {
"aries_version": "1.12.0",
"regulus_version": "N/A"
},
"npu_driver_version": "1.12.0",
"os": {
"kernel_version": "6.17.0-23-generic",
"name": "Linux",
"version": "Ubuntu 24.04.4 LTS"
},
"qbcompiler": {
"version": "not_installed"
},
"qbruntime": {
"version": "v1.2.0"
}
}
}
Metrics Coverage
| Metric | Intel CPU | Host DRAM | NVIDIA GPU | Mobilint NPU |
|---|---|---|---|---|
| Power (W) | ✅ (RAPL) | ✅ (RAPL DRAM) | ✅ (NVML) | ✅ (mobilint-cli) |
| Utilization (%) | ✅ (psutil) |
N/A | ✅ (NVML) | ✅ (mobilint-cli) |
| Memory (MB/%) | ✅ (psutil) |
N/A | ✅ (NVML) | ✅ (mobilint-cli) |
| Temperature (C) | ✅ (psutil) |
N/A | ✅ (NVML) | ✅ (mobilint-cli) |
| Static Info | ✅ Host/OS/DRAM/Motherboard | ✅ Host/OS/DRAM/Motherboard | ✅ NVML + PCIe | ✅ PCIe + mobilint-cli |
| Per-Device Stats | ✅ (Sockets) | ✅ (Sockets) | ✅ (GPU Indices) | ✅ (Logical NPU Cards) |
🛠️ Hardware Specifics
Intel CPU
Uses pyRAPL for power measurements and psutil for utilization/memory.
-
Permission: Requires read access to Intel RAPL sysfs.
sudo chmod -R a+r /sys/class/powercap/intel-rapl/
-
Docker: Run containers with
--privilegedor mount the powercap directory. -
Features: Tracks total system CPU usage or specific indices (e.g.,
CPUDeviceTracker(cpu_id=[0, 1])). -
Temperature: Uses
psutil.sensors_temperatures()when the platform exposes CPU thermal sensors. -
Static Info: Reports CPU architecture, model, vendor, DRAM capacity/type/speed, motherboard metadata, OS details, and CPU power policy when available.
NVIDIA GPU
Uses NVML (via nvidia-ml-py) for high-fidelity hardware monitoring.
- Features: Tracks total system GPU usage or specific indices (e.g.,
GPUDeviceTracker(gpu_id=[0, 1])). - Dependencies: Requires NVIDIA Drivers and NVML library installed.
- Temperature: Reads on-die GPU temperature through NVML.
- Static Info:
GPUDeviceTracker.get_static_info()reports the detected GPU count, tracked device names, NVIDIA driver version, and the raw NVML CUDA driver version. Themblt-tracker collectCLI provides richer NVML-discovered GPU metadata; for NVIDIA GPUs, PCIe link generation/width fields come from NVML, while OS PCIe discovery may add non-link identifiers and descriptive metadata.
Host DRAM
Uses the Intel RAPL DRAM domain through pyRAPL for host DRAM power measurements.
- Platform/Hardware: Requires a host that exposes RAPL DRAM energy counters.
- Permission: Requires read access to Intel RAPL sysfs, similar to CPU power tracking.
- Features: Tracks all detected CPU socket DRAM domains by default, or specific socket IDs with
DRAMDeviceTracker(socket_id=0)/DRAMDeviceTracker(socket_id=[0, 1]). - Metrics: Reports total host DRAM power through standard keys (
avg_power_w,p99_power_w,max_power_w) and DRAM-specific aliases (avg_dram_power_w,p99_dram_power_w,max_dram_power_w). Per-socket statistics are returned undermetrics["dram"]. - Trace:
DRAMDeviceTracker.get_trace()returns total host DRAM power aslist[(timestamp, power_w)]. - Static Info:
DRAMDeviceTracker.get_static_info()returns the same privacy-first host CPU, aggregate DRAM capacity with MB/GB display units, optional DIMM capacity/type/speed summaries, motherboard metadata, and OS metadata as host static collection. Individual DIMM identifiers are not exposed.
Mobilint NPU
Polls the mobilint-cli status -q command, with a legacy JSON fallback for older environments.
- Platform: Currently supports Linux only.
- Requirement: Ensure Mobilint Utility Tool is installed and
mobilint-cliis in your PATH. - Device Selection: Tracks all logical NPU cards by default, or selected logical card IDs with
NPUDeviceTracker(npu_id=0)/NPUDeviceTracker(npu_id=[0, 1]). - MLA100 vs MLA400:
status -qoutput is classified best-effort. Devices with aPower.GOLDFINGERrail are treated as MLA400 and grouped as one logical card. MLA100 devices remain one logical card per PCIe card. PCIe subsystem IDs are also used as a fallback (0x401/0x1093for MLA100,0x402/0x108Bfor MLA400 observed outputs). - NPU Power: Distinguishes between NPU core power and total card/system power. For MLA400,
Power.Totalis reported by the first chip, while NPU core, memory, and utilization are aggregated across the grouped Aries chips. - DDR/PMIC/GOLDFINGER Power: Parses optional NPU board DDR, PMIC, and MLA400 GOLDFINGER power rails when present.
- Temperature: Parses NPU temperature from
mobilint-cli statusoutput when available. - Static Info: Reports Mobilint PCIe device information and parses driver, firmware, product, board,
card_model, andcard_idmetadata frommobilint-cli statuswhen available.
📝 Metric Output Format
Calling get_metric() returns a dictionary with standardized cross-device keys where applicable. Missing or unavailable measurements are returned as None.
{
"avg_power_w": 25.4,
"p99_power_w": 40.1,
"max_power_w": 45.2,
"avg_utilization_pct": 78.5,
"p99_utilization_pct": 90.0,
"max_utilization_pct": 95.0,
"avg_memory_used_mb": 2048.0,
"p99_memory_used_mb": 3072.0,
"max_memory_used_mb": 4096.0,
"total_memory_mb": 8192.0,
"avg_memory_used_pct": 25.0,
"p99_memory_used_pct": 37.5,
"max_memory_used_pct": 50.0,
"avg_temperature_c": 72.3,
"p99_temperature_c": 79.0,
"max_temperature_c": 80.0,
"samples": 100,
"util_samples": 101
}
Tracker-specific fields may also be present:
- CPU:
cpucontains per-socket statistics keyed by socket ID. - GPU:
gpucontains per-GPU statistics keyed by GPU index. GPU-specific summary keys includeavg_gpu_util_pct,p99_gpu_util_pct,max_gpu_util_pct,avg_mem_util_pct, andp99_mem_util_pct. - DRAM: DRAM-specific power keys include
avg_dram_power_w,p99_dram_power_w, andmax_dram_power_w.dramcontains per-socket statistics keyed by socket ID. - NPU: NPU-specific power keys include
avg_npu_power_w,p99_npu_power_w,max_npu_power_w,avg_ddr_power_w,p99_ddr_power_w,max_ddr_power_w,avg_pmic_power_w,p99_pmic_power_w,max_pmic_power_w,avg_goldfinger_power_w,p99_goldfinger_power_w,max_goldfinger_power_w,avg_total_power_w,p99_total_power_w, andmax_total_power_w.avg_power_wis mapped to total power for cross-device consistency.npucontains per logical card statistics keyed by card ID.
Time-Series Trace APIs
All trackers expose trace APIs for post-processing and plotting:
tracker.get_trace() # Power trace: list[(timestamp, power_w)]
tracker.get_util_trace() # Utilization trace: list[(timestamp, utilization_pct)]
tracker.get_temp_trace() # Temperature trace: list[(timestamp, temperature_c)]
NPU trackers additionally expose rail-specific power traces:
tracker.get_npu_power_trace() # NPU core power
tracker.get_ddr_power_trace() # On-board NPU DDR power, when available
tracker.get_pmic_power_trace() # NPU PMIC power, when available
tracker.get_goldfinger_power_trace() # MLA400 GOLDFINGER input power, when available
🔍 Static Information
For benchmark reproducibility, each tracker exposes get_static_info():
from mblt_tracker import CPUDeviceTracker, GPUDeviceTracker, NPUDeviceTracker
tracker = CPUDeviceTracker()
info = tracker.get_static_info()
Static information is collected on a best-effort, privacy-first basis and may vary by platform and permissions.
Typical fields include:
hardware.cpu: CPU architecture, model name, and vendorhardware.dram: total and available memory in bytes plustotal_mb,total_gb,available_mb, andavailable_gb; optional privacy-safe aggregate fields includeram_type,speed_mhz,configured_speed_mhz,module_count,modules, andtheoretical_bandwidth_gbpswhen available. Per-module entries may includecapacity_bytes,capacity_mb,capacity_gb, DDR type, speed, width, and estimated bandwidth. Individual DIMM serial numbers, part numbers, and PCIe/device instance identifiers are not exposed.hardware.motherboard: optional baseboardmanufacturer,model_name,version, best-effortchipset, andpciesupport/capability summary. Motherboard serial numbers, asset tags, PCI bus addresses, and Windows instance IDs are not exposed.hardware.motherboard.pcie: optional maximum PCIe generation/speed/lane-width summary.inference.os: OS name, version, and kernel versioninference.cpu: OS-independent CPU power policy object. Linux fillsgovernor; Windows fillspower_plan,min_processor_state_pct, andmax_processor_state_pct. Unavailable OS-specific attributes are kept asnull.hardware.gpu:GPUDeviceTracker.get_static_info()output withdevice_countand adeviceslist containing tracked GPU indices and nameshardware.gpus:mblt-tracker collectoutput containing NVML-discovered NVIDIA GPU devices. For NVIDIA GPUs, current and maximum PCIe link generation/width fields are sourced from NVML; OS PCIe discovery may add non-link fields such as vendor/device IDs and descriptive metadata where available. Private PCIe instance identifiers such asbus_addressandpnp_device_idare omitted from public output.hardware.npus: Mobilint PCIe devices, including vendor/device IDs, current/maximum link information, and firmware metadata where available. Private PCIe instance identifiers such asbus_addressandpnp_device_idare omitted from public output.hardware.npus[].card_model: best-effort Mobilint card model classification such asMLA100orMLA400whenmobilint-cli status -qexposes enough informationhardware.npus[].card_id: logical NPU card ID used byNPUDeviceTracker(npu_id=...); MLA400 Aries chips share the same card IDinference.gpu: NVIDIA driver and CUDA driver versions. The CLI normalizes the CUDA driver version as a string such as"13.0";GPUDeviceTracker.get_static_info()returns the raw NVML CUDA driver integer.hardware.npus[].firmware: per-NPU firmware metadata where available. Linux currently mapsmobilint-cli statusfirmware rows by device order.inference.npu_driver_version: host Mobilint NPU driver version when available. Linux may also includeinference.driverwith Aries/Regulus driver metadata parsed frommobilint-cli status.
PCIe discovery supports:
- Linux:
/sys/bus/pci/devices - Windows: PowerShell/CIM/PnP PCI device queries
For tests or custom environments, MBLT_TRACKER_PCI_SYSFS can override the Linux PCI sysfs root. NPUDeviceTracker.get_static_info() can customize NPU PCIe matching with MBLT_TRACKER_NPU_PCI_VENDOR_ID, MBLT_TRACKER_NPU_PCI_DEVICE_ID, and MBLT_TRACKER_NPU_PCI_CLASS_FILTER. The mblt-tracker collect CLI uses the corresponding --pcie-vendor-id, --pcie-device-id, and --pcie-class-filter flags.
🤝 Contributing
We welcome contributions! To set up for development:
- Install dev dependencies:
pip install -e ".[dev]" - Run tests:
pytest tests/
📄 License
This project is licensed under the BSD-3-Clause License. See the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mblt_tracker-0.2.3.tar.gz.
File metadata
- Download URL: mblt_tracker-0.2.3.tar.gz
- Upload date:
- Size: 79.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bff7dd16730ebfa90a3124d726480f48a5d7ba63241b7579165f7812bb54b4e
|
|
| MD5 |
dc1ab0547ef91932265458e6b179c264
|
|
| BLAKE2b-256 |
fbe8d2245c9525323739c0dfe6c60cd615739b12fb410b9ee2e85d823ddc1dfd
|
Provenance
The following attestation bundles were made for mblt_tracker-0.2.3.tar.gz:
Publisher:
publish.yml on mobilint/mblt-tracker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mblt_tracker-0.2.3.tar.gz -
Subject digest:
5bff7dd16730ebfa90a3124d726480f48a5d7ba63241b7579165f7812bb54b4e - Sigstore transparency entry: 1546563959
- Sigstore integration time:
-
Permalink:
mobilint/mblt-tracker@b5025858ea072ef02ba07c5a1912487fba9c355d -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/mobilint
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b5025858ea072ef02ba07c5a1912487fba9c355d -
Trigger Event:
release
-
Statement type:
File details
Details for the file mblt_tracker-0.2.3-py3-none-any.whl.
File metadata
- Download URL: mblt_tracker-0.2.3-py3-none-any.whl
- Upload date:
- Size: 52.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdb2905581c6e4d9ee8f5ed166207c7ff67ae6510e40d3310ea29b93a6a5302a
|
|
| MD5 |
ebf56391e87f8bd1494641cbf5efb77f
|
|
| BLAKE2b-256 |
f9df01660724952575422f4c38c7afb857bb9152672671850553a834479093e2
|
Provenance
The following attestation bundles were made for mblt_tracker-0.2.3-py3-none-any.whl:
Publisher:
publish.yml on mobilint/mblt-tracker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mblt_tracker-0.2.3-py3-none-any.whl -
Subject digest:
bdb2905581c6e4d9ee8f5ed166207c7ff67ae6510e40d3310ea29b93a6a5302a - Sigstore transparency entry: 1546564073
- Sigstore integration time:
-
Permalink:
mobilint/mblt-tracker@b5025858ea072ef02ba07c5a1912487fba9c355d -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/mobilint
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b5025858ea072ef02ba07c5a1912487fba9c355d -
Trigger Event:
release
-
Statement type: