Eco2AI
A Python library which accumulates statistics about power consumption and CO2 emission during running code.
https://github.com/sb-ai-lab/eco2ai
Category: Consumption
Sub Category: Computation and Communication
Keywords
ai carbon-emissions carbon-footprint co2-emissions co2-monitoring deep-learning emission-tracker energy-consumption environment esg ghg machine-learning power-consumption-measurement python sustainability
Last synced: about 13 hours ago
JSON representation
Repository metadata
eco2AI is a python library which accumulates statistics about power consumption and CO2 emission during running code.
- Host: GitHub
- URL: https://github.com/sb-ai-lab/eco2ai
- Owner: sb-ai-lab
- License: apache-2.0
- Created: 2022-05-31T06:57:26.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2025-03-10T22:38:50.000Z (about 2 months ago)
- Last Synced: 2025-04-25T13:03:49.833Z (1 day ago)
- Topics: ai, carbon-emissions, carbon-footprint, co2-emissions, co2-monitoring, deep-learning, emission-tracker, energy-consumption, environment, esg, ghg, machine-learning, power-consumption-measurement, python, sustainability
- Language: Python
- Homepage:
- Size: 2.71 MB
- Stars: 251
- Watchers: 4
- Forks: 18
- Open Issues: 2
- Releases: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
README.md
Eco2AI
About Eco2AI 📋
The Eco2AI is a python library for CO2 emission tracking. It monitors energy consumption of CPU & GPU devices and estimates equivalent carbon emissions taking into account the regional emission coefficient.
The Eco2AI is applicable to all python scripts and all you need is to add the couple of strings to your code. All emissions data and information about your devices are recorded in a local file.
Every single run of Tracker() accompanies by a session description added to the log file, including the following elements:
- project_name
- experiment_description
- start_time
- duration(s)
- power_consumption(kWTh)
- CO2_emissions(kg)
- CPU_name
- GPU_name
- OS
- country
Installation
To install the eco2AI library, run the following command:
pip install eco2ai
Use examples
Example usage eco2AI
You can also find eco2AI tutorial on youtube
The eco2AI interface is quite simple. Here is the simplest usage example:
import eco2ai
tracker = eco2ai.Tracker(project_name="YourProjectName", experiment_description="training the <your model> model")
tracker.start()
<your gpu &(or) cpu calculations>
tracker.stop()
The eco2AI also supports decorators. As soon as the decorated function is executed, the information about the emissions will be written to the emission.csv file:
from eco2ai import track
@track
def train_func(model, dataset, optimizer, epochs):
...
train_func(your_model, your_dataset, your_optimizer, your_epochs)
For your convenience, every time you instantiate the Tracker object with your custom parameters, these settings will be saved until the library is deleted. Each new tracker will be created with your custom settings (if you create a tracker with new parameters, they will be saved instead of the old ones). For example:
import eco2ai
tracker = eco2ai.Tracker(
project_name="YourProjectName",
experiment_description="training <your model> model",
file_name="emission.csv"
)
tracker.start()
<your gpu &(or) cpu calculations>
tracker.stop()
...
# now, we want to create a new tracker for new calculations
tracker = eco2ai.Tracker()
# now, it's equivalent to:
# tracker = eco2ai.Tracker(
# project_name="YourProjectName",
# experiment_description="training the <your model> model",
# file_name="emission.csv"
# )
tracker.start()
<your gpu &(or) cpu calculations>
tracker.stop()
You can also set parameters using the set_params() function, as in the example below:
from eco2ai import set_params, Tracker
set_params(
project_name="My_default_project_name",
experiment_description="We trained...",
file_name="my_emission_file.csv"
)
tracker = Tracker()
# now, it's equivelent to:
# tracker = Tracker(
# project_name="My_default_project_name",
# experiment_description="We trained...",
# file_name="my_emission_file.csv"
# )
tracker.start()
<your code>
tracker.stop()
Important note
If for some reasons it is not possible to define country, then emission coefficient is set to 436.529kg/MWh, which is global average.
Global Electricity Review
For proper calculation of gpu and cpu power consumption, you should create a "Tracker" before any gpu or CPU usage.
Create a new “Tracker” for every new calculation.
Usage of Eco2AI
An example of using the library is given in the publication. It the paper we presented experiments of tracking equivalent CO2 emissions using eco2AI while training ruDALL-E models with with 1.3 billion (Malevich, ruDALL-E XL 1.3B) and 12 billion parameters (Kandinsky, ruDALL-E XL 12B). These are multimodal pre-trained transformers that learn the conditional distribution of images with by some string of text capable of generating arbitrary images from a russian text prompt that describes the desired result.
Properly accounted carbon emissions and power consumption Malevich and Kandinsky fine-tuning Malevich and Kandinsky on the Emojis dataset is given in the table below.
Model | Train time | Power, kWh | CO2, kg | GPU | CPU | Batch Size |
---|---|---|---|---|---|---|
Malevich | 4h 19m | 1.37 | 0.33 | A100 Graphics, 1 | AMD EPYC 7742 64-Core | 4 |
Kandinsky | 9h 45m | 24.50 | 5.89 | A100 Graphics, 8 | AMD EPYC 7742 64-Core | 12 |
Also we presented results for training of Malevich with optimized variation of GELU activation function. Training of the Malevich with the 8-bit version of GELU allows us to spent about 10% less energy and, consequently, produce less equivalent CO2 emissions.
Citing Eco2AI
The Eco2AI is licensed under a Apache licence 2.0.
Please consider citing the following paper in any research manuscript using the Eco2AI library:
@article{eco2AI,
title={eco2AI: Carbon Emissions Tracking of Machine Learning Models as the First Step Towards Sustainable AI},
url={https://doi.org/10.1134/S1064562422060230}, DOI={10.1134/S1064562422060230},
journal={Doklady Mathematics},
author={Budennyy, S. A. and Lazarev, V. D. and Zakharenko, N. N. and Korovin, A. N. and Plosskaya, O. A. and Dimitrov, D. V. and Akhripkin, V. S. and Pavlov, I. V. and Oseledets, I. V. and Barsola, I. S. and Egorov, I. V. and Kosterina, A. A. and Zhukov, L. E.}, year={2023}, month=jan, language={en}}
In collaboration with
Owner metadata
- Name: sb-ai-lab
- Login: sb-ai-lab
- Email:
- Kind: organization
- Description: We aim to share our AI-based solutions for both scientific and industrial purposes. Hope you will find them useful and we’d appreciate much any feedback.
- Website:
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/103759388?v=4
- Repositories: 6
- Last ynced at: 2023-03-04T04:54:10.592Z
- Profile URL: https://github.com/sb-ai-lab
GitHub Events
Total
- Create event: 2
- Issues event: 3
- Release event: 2
- Watch event: 21
- Issue comment event: 4
- Push event: 7
- Pull request event: 4
- Pull request review event: 1
- Fork event: 1
Last Year
- Create event: 2
- Issues event: 3
- Release event: 2
- Watch event: 21
- Issue comment event: 4
- Push event: 7
- Pull request event: 4
- Pull request review event: 1
- Fork event: 1
Committers metadata
Last synced: 7 days ago
Total Commits: 168
Total Committers: 6
Avg Commits per committer: 28.0
Development Distribution Score (DDS): 0.5
Commits in past year: 5
Committers in past year: 2
Avg Commits per committer in past year: 2.5
Development Distribution Score (DDS) in past year: 0.4
Name | Commits | |
---|---|---|
vladimir-laz | v****9@g****m | 84 |
Никита Николаевич | n****o@y****u | 62 |
Alex Korovin | a****n@g****m | 17 |
parohod | b****n@g****m | 2 |
Коровин Алексей | k****n@a****t | 2 |
fwcd | f****l@g****m | 1 |
Committer domains:
Issue and Pull Request metadata
Last synced: 1 day ago
Total issues: 6
Total pull requests: 7
Average time to close issues: 2 months
Average time to close pull requests: 4 months
Total issue authors: 6
Total pull request authors: 4
Average comments per issue: 1.5
Average comments per pull request: 0.29
Merged pull request: 5
Bot issues: 0
Bot pull requests: 0
Past year issues: 1
Past year pull requests: 3
Past year average time to close issues: 6 days
Past year average time to close pull requests: less than a minute
Past year issue authors: 1
Past year pull request authors: 1
Past year average comments per issue: 3.0
Past year average comments per pull request: 0.0
Past year merged pull request: 3
Past year bot issues: 0
Past year bot pull requests: 0
Top Issue Authors
- Mirual (1)
- Dimario49 (1)
- luciabouzaheguerte (1)
- PeterHartog (1)
- fatma-laribi (1)
- maltefranke (1)
Top Pull Request Authors
- alexnkorovin (3)
- ada0l (2)
- fwcd (1)
- ioannismavromatis (1)
Top Issue Labels
Top Pull Request Labels
Package metadata
- Total packages: 1
-
Total downloads:
- pypi: 1,270 last-month
- Total dependent packages: 3
- Total dependent repositories: 1
- Total versions: 22
- Total maintainers: 1
pypi.org: eco2ai
emission tracking library
- Homepage: https://github.com/sb-ai-lab/Eco2AI
- Documentation: https://eco2ai.readthedocs.io/
- Licenses: apache-2.0
- Latest release: 0.3.12 (published about 2 months ago)
- Last Synced: 2025-04-25T13:04:14.142Z (1 day ago)
- Versions: 22
- Dependent Packages: 3
- Dependent Repositories: 1
- Downloads: 1,270 Last month
-
Rankings:
- Stargazers count: 5.556%
- Dependent packages count: 7.306%
- Forks count: 9.607%
- Average: 12.997%
- Downloads: 20.439%
- Dependent repos count: 22.077%
- Maintainers (1)
Dependencies
- apscheduler 3.9.1
- backports.zoneinfo 0.2.1
- certifi 2022.6.15
- charset-normalizer 2.1.0
- funcsigs 1.0.2
- futures 3.3.0
- idna 3.3
- importlib-resources 5.4.0
- numpy 1.21.6
- numpy 1.23.1
- pandas 1.3.5
- pandas 1.4.3
- psutil 5.9.1
- py-cpuinfo 8.0.0
- pynvml 11.4.1
- python-dateutil 2.8.2
- pytz 2022.1
- pytz-deprecation-shim 0.1.0.post0
- requests 2.28.1
- six 1.16.0
- tornado 6.2
- tzdata 2022.1
- tzlocal 4.2
- urllib3 1.26.10
- zipp 3.6.0
- APScheduler --- - !ruby/hash:ActiveSupport::HashWithIndifferentAccess version: "*" python: ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
- pandas --- - !ruby/hash:ActiveSupport::HashWithIndifferentAccess version: ">=1.2.1,<=1.3.5" python: ">=3.7.1, <3.8" - !ruby/hash:ActiveSupport::HashWithIndifferentAccess version: ">=1.4.0,<=1.4.3" python: ">=3.8"
- psutil ^5.9.1
- py-cpuinfo --- - !ruby/hash:ActiveSupport::HashWithIndifferentAccess version: "*" python: ">=3.7"
- pynvml --- - !ruby/hash:ActiveSupport::HashWithIndifferentAccess version: "*" python: ">=3.6"
- python *
- requests --- - !ruby/hash:ActiveSupport::HashWithIndifferentAccess version: "*" python: ">=3.7, <4"
- tornado --- - !ruby/hash:ActiveSupport::HashWithIndifferentAccess version: "*" python: ">=3.7"
- tzlocal --- - !ruby/hash:ActiveSupport::HashWithIndifferentAccess version: "*" python: ">=3.6"
Score: 14.475850415548102