Methodology

Carbon dioxide (CO₂) emissions, expressed as kilograms of CO₂-equivalents [CO₂eq], are the product of two main factors :

C = Carbon Intensity of the electricity consumed for computation: quantified as g of CO₂ emitted per kilowatt-hour of electricity.

E = Energy Consumed by the computational infrastructure: quantified as kilowatt-hours.

Carbon dioxide emissions (CO₂eq) can then be calculated as C * E

Carbon Intensity

Carbon Intensity of the consumed electricity is calculated as a weighted average of the emissions from the different energy sources that are used to generate electricity, including fossil fuels and renewables. In this toolkit, the fossil fuels coal, petroleum, and natural gas are associated with specific carbon intensities: a known amount of carbon dioxide is emitted for each kilowatt-hour of electricity generated. Renewable or low-carbon fuels include solar power, hydroelectricity, biomass, geothermal, and more. The nearby energy grid contains a mixture of fossil fuels and low-carbon energy sources, called the Energy Mix. Based on the mix of energy sources in the local grid, the Carbon Intensity of the electricity consumed can be computed.

Grid Energy Mix

When available, CodeCarbon uses global carbon intensity of electricity per cloud provider ( here ) or per country ( here ).

If we don’t have the global carbon intensity or electricity of a country, but we have its electricity mix, we used to compute the carbon intensity of electricity using this table:

Carbon Intensity Across Energy Sources

Energy Source

Carbon Intensity (kg/MWh)

Coal

995

Petroleum

816

Natural Gas

743

Geothermal

38

Hydroelectricity

26

Nuclear

29

Solar

48

Wind

26

Sources:

Then, for example, if the Energy Mix of the Grid Electricity is 25% Coal, 35% Petroleum, 26% Natural Gas and 14% Nuclear:

Net Carbon Intensity = 0.25 * 995 + 0.35 * 816 + 0.26 * 743 + 0.14 * 29 = 731.59 kgCO₂/kWh

But it doesn’t append anymore because Our World in Data now provides the global carbon intensity of electricity per country ( source ). Some countries is missing data for last year, so we use the previous year data available.

If ever we have neither the global carbon intensity of a country nor it’s electricity mix, we apply a world average of 475 gCO2.eq/KWh ( source ).

As you can see, we try to be as accurate as possible in estimating carbon intensity of electricity. Still there is room for improvement and all contributions are welcome.

Power Usage

Power supply to the underlying hardware is tracked at frequent time intervals. This is a configurable parameter measure_power_secs, with default value 15 seconds, that can be passed when instantiating the emissions’ tracker.

Currently, the package supports the following hardware infrastructure.

GPU

Tracks Nvidia GPUs energy consumption using pynvml library (installed with the package).

RAM

CodeCarbon uses a 3 Watts for 8 GB ratio source . This measure is not satisfying and if ever you have an idea how to enhance it please do not hesitate to contribute.

CPU

  • On Windows or Mac (Intel)

Tracks Intel processors energy consumption using the Intel Power Gadget. You need to install it yourself from this source .

  • Apple Silicon Chips (M1, M2)

Apple Silicon Chips contain both the CPU and the GPU.

Codecarbon tracks Apple Silicon Chip energy consumption using powermetrics. It should be available natively on any mac. However, this tool is only usable with sudo rights and to our current knowledge, there are no other options to track the energy consumption of the Apple Silicon Chip without administrative rights (if you know of any solution for this do not hesitate and open an issue with your proposed solution).

To give sudo rights without having to enter a password each time, you can modify the sudoers file with the following command:

sudo visudo

Then add the following line at the end of the file:

username ALL = (root) NOPASSWD: /usr/bin/powermetrics

If you do not want to give sudo rights to your user, then CodeCarbon will fall back to constant mode to measure CPU energy consumption.

  • On Linux

Tracks Intel and AMD processor energy consumption from Intel RAPL files at \sys\class\powercap\intel-rapl ( reference ). All CPUs listed in this directory will be tracked. Help us improve this and make it configurable.

Note: The Power Consumption will be tracked only if the RAPL files exist at the above-mentioned path

If none of the tracking tools are available on a computing resource, CodeCarbon will be switched to a fallback mode:
  • It will first detect which CPU hardware is currently in use, and then map it to a data source listing 2000+ Intel and AMD CPUs and their corresponding thermal design powers (TDPs).

  • If the CPU is not found in the data source, a global constant will be applied. CodeCarbon assumes that 50% of the TDP will be the average power consumption to make this approximation.

  • We could not find any good resource showing statistical relationships between TDP and average power, so we empirically tested that 50% is a decent approximation.

The net Energy Used is the net power supply consumed during the compute time, measured as kWh.

Energy = Power * Time

References

Energy Usage Reports: Environmental awareness as part of algorithmic accountability

How CodeCarbon Works

CodeCarbon uses a scheduler that, by default, calls for a measure every 15 seconds, so it has no significant overhead.

The measure itself is fast and CodeCarbon is designed to be as light as possible with a small memory footprint.

The scheduler is started when the first start method is called and stopped when stop method is called.