HPC-CRI / EA2P

A flexible tool for accurate and multi device energy measurement
MIT License
3 stars 1 forks source link

EA2P : Energy-Aware Application Profiler

PyPI Downloads

EA2P is an energy profiling tool designed to accurately measure the energy consumption of various computer devices, including RAM, CPU, and GPU. It supports multiple hardware vendors such as Nvidia, AMD, and Intel, allowing comprehensive energy measurements across different systems. The particularity of the tool is the flexibility over target device selection feature and the support for AMD devices energy measurement.

Please consult the documentation or support resources for your specific CPU and GPU models to find the appropriate configuration and instructions for monitoring energy consumption. Keep in mind that the availability of such features may vary depending on your hardware.

Features

Requirements

mpiexec -n 4 python my_instrumented_mpi_app.py   # You can change mpiexec with mpirun depending of your MPI installation.

Installation

To install EA2P, simply use pip:

pip install EA2P

Usage

Warning : For any usage, you should authorize the access. Commands bellow could be used especially for perf (for AMD CPU), powercap(for Intel) and dmidecode (for DRAM):

sudo sh -c 'echo -1 >/proc/sys/kernel/perf_event_paranoid'
sudo chmod -R a+r /sys/firmware/dmi/tables
sudo chmod -R a+r /sys/class/powercap/intel-rapl

Note : Some examples might require to install specific libraries like TensorFlow or Pytorch as part of the application devellopement.

Command-Line Interface (CLI)

Run the following command to start profiling: the file can be found in the "examples" folder of this repository. my_application can be any command line program that can run standalone like a compiled C/C++ program or python program with arguments.

python ea2p_cli.py my_application

Code Instrumentation

Add annotations to your code to measure energy consumption.

from ea2p import PowerMeter
config_path = “config.csv” #set the configuration file for flexibility
power_meter = PowerMeter(config_path)

# Annotate the code section you want to measure. "package" and "algorithm" params are required. 
@power_meter.measure_power(package="time", algorithm="sleep",)
def test_sleep(interval):
   time.sleep(interval)
# runing
test_sleep(180)         

Using context manager

from ea2p import PowerMeter

with PowerMeter() as meter:
   time.sleep(180)      

Using start/stop

from ea2p import PowerMeter
config_path = “config.csv” #set the configuration file for flexibility
power_meter = PowerMeter(config_path)

power_meter.start_measure()
time.sleep(180)
power_meter.stop_measure()      

Configuration file

EA2P allows configuration for specific settings such as devices list, sampling frequency, and more. Configuration can be done via a json configuration file.

{
    "devices_list": "cpu, gpu, ram",
    "sampling_freq": 1.0,
    "energy_unit": "J"
}

For more examples of how to use the profiler, clone the original repository from Github : https://github.com/HPC-CRI/EA2P and run examples under ea2p/examples directory or visit the API reference and developper guide : EA2P documentation.

Contributing

We welcome contributions to EA2P! Please check the [contribution guidelines]() for details on how to contribute to this project.

License

EA2P is licensed under the MIT License. See the LICENSE file for more details.

Acknowledgments

Contact

For any queries, support, or feedback, feel free to reach out via email or through our website.