Skip to main content

Python package for monitoring and recording power usage, energy consumption, and performance metrics from hardware components such as GPUs and CPUs

Project description

CI

wattameter_logo

wattameter is a Python package for monitoring and recording power usage over time, among other metrics. It enables time series data collection on hardware components such as CPUs and GPUs.

Current Features

  • Track power usage for CPU (using RAPL) and GPU (using nvidia-ml-py)
  • Track GPU utilization and temperature
  • Periodically log time series data to file
  • Real-time MQTT publishing for integration with monitoring systems
  • Customizable logging and output options
  • Command-line interface for easy usage
  • Integration with SLURM for HPC environments

Installation

You can install wattameter via pip:

pip install wattameter

Optional extras

Some features are optional and not required for the core runtime. The current optional dependencies are post-processing (postprocessing) and benchmark (benchmark) utilities, and MQTT (mqtt) publishing. Here are a few examples of how to install with optional dependencies:

# Install with post-processing utilities
pip install wattameter[postprocessing]

# Install with benchmark utilities
pip install wattameter[benchmark]

# Install with postprocessing and mqtt
pip install wattameter[postprocessing,mqtt]

Usage

As a Python module

from wattameter import Tracker
from wattameter.readers import NVMLReader

tracker = Tracker(
    reader=NVMLReader((Power,)),
    dt_read=0.1,  # Time interval for reading power data (seconds)
    freq_write=600,  # Frequency (# reads) for writing power data to file
    output="power_log.txt",
)
tracker.start()
# ... your code ...
tracker.stop()

# ... or ...

with Tracker(
    reader=NVMLReader((Power,)),
    dt_read=0.1,
    freq_write=600,
    output="power_log.txt",
) as tracker:
    # ... your code ...

Command-line interface

wattameter --tracker 0.1,nvml-power,rapl --tracker 1.0,nvml-util --suffix test --id 0 --freq-write 600 --log-level info

For MQTT publishing, add MQTT broker configuration:

wattameter \
  --tracker 0.1,nvml-power,rapl \
  --mqtt-broker mqtt.example.com \
  --mqtt-port 1883 \
  --mqtt-username myuser \
  --mqtt-password mypassword \
  --mqtt-topic-prefix "hpc/wattameter"

See MQTT Usage Documentation for detailed information on MQTT publishing.

Option Short Default Description
--tracker 0.1,nvml-power,rapl Tracker specification: dt_read,metric1,metric2,... where dt_read is the time interval in seconds between readings. Available metrics: rapl (CPU energy), nvml-energy (GPU energy), nvml-power (GPU power), nvml-temp (GPU temperature), nvml-util (GPU utilization), nvml-nvlink (GPU NVLink throughput). Can be specified multiple times to create multiple trackers with different configurations.
--suffix -s None Suffix for output files
--id -i UUID Identifier for the experiment
--freq-write -f 3600 Frequency (# reads) for writing data to file
--log-level -l warning Logging level: debug, info, warning, error, critical
--mqtt-broker None MQTT broker hostname. If provided, enables real-time publishing to MQTT
--mqtt-port 1883 MQTT broker port
--mqtt-username None MQTT authentication username (optional)
--mqtt-password None MQTT authentication password (optional)
--mqtt-topic-prefix wattameter Prefix for MQTT topics
--mqtt-qos 1 MQTT Quality of Service level (0, 1, or 2)
--help -h Show the help message and exit

Command-line interface with SLURM

For usage within SLURM jobs, we recommend using our utility functions start_wattameter and stop_wattameter in slurm.sh. Follow the example examples/slurm.sh, i.e.,

# In a Python environment with wattameter installed,
# load wattameter slurm utilities
WATTAPATH=$(python -c 'import wattameter; import os; print(os.path.dirname(wattameter.__file__))')
source "${WATTAPATH}/utils/slurm.sh"

# Run wattameter on all nodes
start_wattameter

# Input your job commands here
# ...

# Stop wattameter on all nodes
stop_wattameter

All options are the same as the regular command-line interface. The script will automatically handle the output file naming based on the provided SLURM_JOB_ID and node information.

Contributing

Contributions are welcome! Please open issues or submit pull requests.

Documentation

The API documentation is available at https://NatLabRockies.github.io/WattAMeter/. For specific documentation of the NLR module, visit https://natlabrockies.github.io/HPC/Documentation/Development/Performance_Tools/WattAMeter/.

License

See the LICENSE file for details.


NLR Software Record number: SWR-25-101

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wattameter-0.9.1.tar.gz (56.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wattameter-0.9.1-py3-none-any.whl (41.6 kB view details)

Uploaded Python 3

File details

Details for the file wattameter-0.9.1.tar.gz.

File metadata

  • Download URL: wattameter-0.9.1.tar.gz
  • Upload date:
  • Size: 56.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for wattameter-0.9.1.tar.gz
Algorithm Hash digest
SHA256 5ea1964f049c9a5d7e9b5db70ec776576b2f3c157510198e70514fed03d18946
MD5 9492ab7e2752909525c140fc204af8ba
BLAKE2b-256 1d1a643b233d1ebdcb70b905096bcd4709a4a2af25f123dad9df03c525f9d6ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for wattameter-0.9.1.tar.gz:

Publisher: python-publish.yml on NatLabRockies/WattAMeter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wattameter-0.9.1-py3-none-any.whl.

File metadata

  • Download URL: wattameter-0.9.1-py3-none-any.whl
  • Upload date:
  • Size: 41.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for wattameter-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e430d070552d11b09eb00789c877786ceb7c4bff7fc6f689550c08d4757d7846
MD5 3321b1d2297bee723c3215d8b092a882
BLAKE2b-256 95df321238bfd1e5d9a2f158b131fcb2ade619c2a7100445e5af4bca6244c866

See more details on using hashes here.

Provenance

The following attestation bundles were made for wattameter-0.9.1-py3-none-any.whl:

Publisher: python-publish.yml on NatLabRockies/WattAMeter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page