Skip to main content

Measure the energy used by your MPI+Python applications.

Project description

https://raw.githubusercontent.com/Helmholtz-AI-Energy/perun/main/docs/images/full_logo.svg
fair-software openssf zenodo license docs
pypi-version python-version pypi-downloads black codecov

perun is a Python package that calculates the energy consumption of Python scripts by sampling usage statistics from your Intel, Nvidia or AMD hardware components. It can handle MPI applications, gather data from hundreds of nodes, and accumulate it efficiently. perun can be used as a command-line tool or as a function decorator in Python scripts.

Check out the docs or a working example!

Key Features

  • Measures energy consumption of Python scripts and binaries, supporting different hardware configurations

  • Capable of handling MPI applications, gathering data from hundreds of nodes efficiently

  • Monitor individual functions using decorators

  • Tracks energy usage of the application over multiple executions

  • Easy to benchmark applications and functions

  • Experimental!: Can monitor any non-distributed command line application


Quick Start

Installation

From PyPI:

$ pip install perun

Extra dependencies like nvidia-smi, rocm-smi and mpi4py can be installed using pip as well:

$ pip install perun[nvidia, rocm, mpi]

From Github:

$ pip install git+https://github.com/Helmholtz-AI-Energy/perun

Command Line

To use perun as a command-line tool:

$ perun monitor path/to/your/script.py [args]

perun will output two files, an HDF5 style containing all the raw data that was gathered, and a text file with a summary of the results.

PERUN REPORT

App name: finetune_qa_accelerate
First run: 2023-08-15T18:56:11.202060
Last run: 2023-08-17T13:29:29.969779

RUN ID: 2023-08-17T13:29:29.969779

+-----------+------------------------+-----------+-------------+--------------+-------------+-------------+-------------+---------------+-------------+
| Round #   | Host                   | RUNTIME   | ENERGY      | CPU_POWER    | CPU_UTIL    | GPU_POWER   | GPU_MEM     | DRAM_POWER    | MEM_UTIL    |
+===========+========================+===========+=============+==============+=============+=============+=============+===============+=============+
| 0         | hkn0432.localdomain    | 995.967 s | 960.506 kJ  | 231.819 W    | 3.240 %     | 702.327 W   | 55.258 GB   | 29.315 W      | 0.062 %     |
| 0         | hkn0436.localdomain    | 994.847 s | 960.469 kJ  | 235.162 W    | 3.239 %     | 701.588 W   | 56.934 GB   | 27.830 W      | 0.061 %     |
| 0         | All                    | 995.967 s | 1.921 MJ    | 466.981 W    | 3.240 %     | 1.404 kW    | 112.192 GB  | 57.145 W      | 0.061 %     |

The application has been run 7 times. In total, it has used 3.128 kWh, released a total of 1.307 kgCO2e into the atmosphere, and you paid 1.02 € in electricity for it.

Binary support (experimental)

perun is capable of monitoring simple applications written in other languages:

$ perun monitor --binary path/to/your/executable [args]

Function Monitoring

Using a function decorator

import time
from perun import monitor

@monitor()
def main(n: int):
    time.sleep(n)

After running with perun monitor, the report will contain:

Monitored Functions

+-----------+----------------------------+---------------------+------------------+--------------------+------------------+-----------------------+
| Round #   | Function                   | Avg Calls / Rank    | Avg Runtime      | Avg Power          | Avg CPU Util     | Avg GPU Mem Util      |
+===========+============================+=====================+==================+====================+==================+=======================+
| 0         | main                       | 1                   | 993.323±0.587 s  | 964.732±0.499 W    | 3.244±0.003 %    | 35.091±0.526 %        |
| 0         | prepare_train_features     | 88                  | 0.383±0.048 s    | 262.305±19.251 W   | 4.541±0.320 %    | 3.937±0.013 %         |
| 0         | prepare_validation_features| 11                  | 0.372±0.079 s    | 272.161±19.404 W   | 4.524±0.225 %    | 4.490±0.907 %         |

MPI

perun is compatible with MPI applications using mpi4py:

$ mpirun -n 8 perun monitor path/to/your/script.py

Docs

See the documentation or examples for more details.

Citing perun

If you found perun useful, please cite the conference paper:

Gutiérrez Hermosillo Muriedas, J.P., Flügel, K., Debus, C., Obermaier, H., Streit, A., Götz, M.:
perun: Benchmarking Energy Consumption of High-Performance Computing Applications.
In: Cano, J., Dikaiakos, M.D., Papadopoulos, G.A., Pericàs, M., and Sakellariou, R. (eds.)
Euro-Par 2023: Parallel Processing. pp. 17–31. Springer Nature Switzerland, Cham (2023).
https://doi.org/10.1007/978-3-031-39698-4_2
@InProceedings{10.1007/978-3-031-39698-4_2,
  author="Guti{\'e}rrez Hermosillo Muriedas, Juan Pedro
  and Fl{\"u}gel, Katharina
  and Debus, Charlotte
  and Obermaier, Holger
  and Streit, Achim
  and G{\"o}tz, Markus",
  editor="Cano, Jos{\'e}
  and Dikaiakos, Marios D.
  and Papadopoulos, George A.
  and Peric{\`a}s, Miquel
  and Sakellariou, Rizos",
  title="perun: Benchmarking Energy Consumption of High-Performance Computing Applications",
  booktitle="Euro-Par 2023: Parallel Processing",
  year="2023",
  publisher="Springer Nature Switzerland",
  address="Cham",
  pages="17--31",
  isbn="978-3-031-39698-4"
}

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

perun-0.9.1.tar.gz (202.0 kB view details)

Uploaded Source

Built Distribution

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

perun-0.9.1-py3-none-any.whl (63.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for perun-0.9.1.tar.gz
Algorithm Hash digest
SHA256 6a95b77e70e7b22829da755e58ec3e4d585ab7e9c364113d4a46b1cde1138280
MD5 dc3e79f83e2fe0299ca2a012c645ffb4
BLAKE2b-256 58742d3c55e26e28110e896210af1f372920b29aab233ceb2dc12bb2769c79ba

See more details on using hashes here.

Provenance

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

Publisher: release.yaml on Helmholtz-AI-Energy/perun

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

File details

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

File metadata

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

File hashes

Hashes for perun-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8835e89dab8fcd0cd5279bb1ada76d5c1a4cb92f7c96936d3382c6dc4879345c
MD5 89cc6d8b2dc694b44545dd865de23a72
BLAKE2b-256 5093ca785c01cc82f98424e8afa191de5b858df85f7a314fbafa6774e085b908

See more details on using hashes here.

Provenance

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

Publisher: release.yaml on Helmholtz-AI-Energy/perun

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