GuillermoLlopis/ai-inference-emission-factors
SOMA AI-Inference Emission and Resource Factors Ready-to-use carbon and water emission factors for estimating the footprint of AI inference (LLM API calls) in corporate sustainability inventories — built for CSRD / GHG Protocol Scope 3 Category 1 reporting. Every factor is derived from primary, cited sources (GPU energy benchmarks, grid carbon intensity registries, datacenter water-use studies); derivations are documented column-by-column below and in full in Supplementary S1 of… See the full description on the dataset page: https://huggingface.co/datasets/GuillermoLlopis/ai-inference-emission-factors.
SOMA AI-Inference Emission and Resource Factors
Ready-to-use carbon and water emission factors for estimating the footprint of AI inference (LLM API calls) in corporate sustainability inventories — built for CSRD / GHG Protocol Scope 3 Category 1 reporting. Every factor is derived from primary, cited sources (GPU energy benchmarks, grid carbon intensity registries, datacenter water-use studies); derivations are documented column-by-column below and in full in Supplementary S1 of the associated paper.
- Concept DOI (always resolves to latest version): 10.5281/zenodo.20443585
- Version DOI, v2.0.0 (2026-09-15): 10.5281/zenodo.22767475
- Paper (arXiv): 2606.10660 — under peer review at Sustainable Production and Consumption (Elsevier)
- License: CC BY 4.0
- Contact: guillermollopis@somaai.earth
Built and maintained by SOMA AI, Barcelona. The same factors power the SOMA product's AI factor pages, methodology page, and developer API.
Files
Four model classes are used throughout: class_a_small (~8B, e.g. GPT-4o mini / Claude Haiku), class_b_mid (~70B dense, e.g. GPT-4o / Claude Sonnet), class_c_large_moe (frontier MoE, e.g. GPT-4 / Claude Opus), and class_c_large_dense (frontier dense, ~405B).
How to use
Quick load with `pandas` + `huggingface_hub`:
import pandas as pd
from huggingface_hub import hf_hub_download
repo_id = "somaai/ai-inference-emission-factors" # update to the actual repo id after publishing
carbon = pd.read_csv(hf_hub_download(repo_id, "carbon_factors.csv", repo_type="dataset"))
water = pd.read_csv(hf_hub_download(repo_id, "water_factors.csv", repo_type="dataset"))
# kg CO2e per 1M output tokens, GPT-4o-class model, US East, H100 industry-average infra
row = carbon[
(carbon.model_class == "class_b_mid") &
(carbon.infra_scenario == "H100-central") &
(carbon.region_id.str.startswith("us-east-1"))
]
print(row["kg_co2e_per_1m_tokens"].iloc[0]) # 0.04378Or with the `datasets` library, using one of the named configs (one per CSV):
from datasets import load_dataset
carbon = load_dataset("somaai/ai-inference-emission-factors", "carbon_factors", split="train")Formula for a corporate GHG inventory (Tier 2a):
CO2e (kg) = Total_output_tokens_millions × kg_co2e_per_1m_tokensThree-term factor (v2, recommended):
kg CO2e per M tokens = carbon_factors.kg_co2e_per_1m_tokens (electricity, region-dependent)
+ lifecycle_factors[embodied_hardware] (region-independent)
+ lifecycle_factors[training_amortised] (region-independent)Report the electricity term as the central estimate with its region; disclose the two lifecycle add-ons separately with their own uncertainty bands — they matter most on clean grids.
Water footprint:
Water (mL) = Total_output_tokens_thousands × total_ml_per_1k_tokensUse the global-average region row when the serving region is unknown.
Key finding: region matters more than model
Holding the model class fixed, moving the same workload across cloud regions swings the carbon factor by an order of magnitude more than moving between model classes in the same region. For class_b_mid (the "GPT-4o / Claude Sonnet" tier) at H100-central infrastructure, the carbon factor is about twelve times higher in Singapore than in Sweden (0.07615 vs. 0.00621 kg CO₂e per 1M tokens) — a bigger swing than upgrading from the small model class to the frontier MoE class in the same region. Grid carbon intensity, not model size, is usually the dominant lever for an inference-heavy GHG inventory.
Boundaries and limitations
- Location-based only. Grid intensities are location-based annual averages (EPA eGRID 2023 for US regions, Ember for EU/AP). Market-based factors (RECs/PPAs) are not modelled — a company with a renewable power contract may report a lower figure.
- GPU energy as a proxy for full server power.
facility_whscales GPU energy by PUE only; non-GPU components (CPU, DRAM, networking) aren't separately modelled. TokenPowerBench (Niu et al., AAAI 2026) estimates these add ~40% to server energy, which is reflected in the ±40–50% uncertainty bands rather than in the central estimate. - H100-central rows for classes B/C/dense are DERIVED, not directly measured: they scale a confirmed B200 measurement by a 2.57× ratio calibrated on the 8B class. Only
class_a_smalland the B200-optimistic scenario are directly measured end to end. - Water data is patchy. Scope-1 WUE is confirmed (Li et al. 2025, Microsoft data) only for Sweden, Ireland, Netherlands, US East, Texas, and the US average; all other regions (Germany, Japan, Singapore, UK, Belgium, Iowa, Oregon, US South, France, Finland) are
ESTIMATED— treat those as approximate. Scope-2 embedded water dominates the total in most regions (>90%). - Lifecycle add-ons are constants, not region-adjusted. Embodied-hardware and training-amortisation terms in
lifecycle_factors.csvare the same regardless of cloud region or hardware generation; the embodied term also excludes data-centre construction (a disclosed sensitivity, +0.00171 kg per 1M tokens for class B, scaling by facility energy for other classes). - `class_c_large_dense` has no lifecycle rows in v2 — apply the
class_c_large_moeadd-ons as a lower-bound approximation for the 405B dense row. - Training-amortisation assumes a single 500T lifetime-tokens-served figure, divided into location-based training emissions from public model cards; treat the training term's very wide band (±1 order of magnitude) accordingly.
- The paper is under peer review, not yet published; cite it as a preprint (see Citation below).
Changelog
- v1 — 2026-06-09. Initial release, arXiv 2606.10660. Version DOI
10.5281/zenodo.20443586. - v2 — 2026-09-15. Regions completed (France and Finland added;
us-west-2,us-south-central,us-southfilled in for classes B/C); two v1 rows corrected by the new checker (us-east-1class B carbon 0.04380→0.04378; Sweden class C water total 1.254→1.253); added lifecycle add-on terms (lifecycle_factors.csv: embodied hardware + amortised training), the model-class mapping table (model_class_mapping.csv), and the reconciliation checker (tools/check_factors.py, run before every deposit). Version DOI10.5281/zenodo.22767475.
Citation
If you use this dataset, please cite both the dataset (concept DOI, so citations always point at the latest version) and the associated paper.
Dataset:
@misc{llopis2026somafactors,
author = {Llopis, Guillermo},
title = {SOMA AI-Inference Emission and Resource Factors},
year = {2026},
publisher = {Zenodo},
version = {v2.0.0},
doi = {10.5281/zenodo.20443585},
url = {https://doi.org/10.5281/zenodo.20443585}
}Paper:
@misc{llopis2026accounting,
author = {Llopis, Guillermo},
title = {Accounting for AI Inference in Corporate GHG Inventories: A Four-Tier Methodology for Scope 3 Category 1 Reporting},
year = {2026},
eprint = {2606.10660},
archivePrefix= {arXiv},
note = {Under peer review at Sustainable Production and Consumption (Elsevier)}
}Links
- Methodology: https://app.somaai.earth/methodology
- Developer docs / API: https://app.somaai.earth/docs/ai-factors
- Factor pages: https://app.somaai.earth/ai-factors
- Paper: https://arxiv.org/abs/2606.10660
- Zenodo (concept DOI, all versions): https://doi.org/10.5281/zenodo.20443585
Contact
guillermollopis@somaai.earth
