Salta al contenuto principale

Carbon footprint AI training: misurare e ridurre

Articolo della serie Sustainable AI / Green Software 2027. Pubblicazione prevista 09 September 2027.

Cosa ne pensi di questo articolo?

Carbon footprint AI training: misurare e ridurre
Sustainable AIFoto:Tara WinsteadPexels

In Breve

Articolo della serie Sustainable AI / Green Software 2027. Pubblicazione prevista 09 September 2027.

Carbon footprint AI training: misurare e ridurre

L'allenamento di modelli AI genera un impatto ambientale significativo: alcuni modelli di linguaggio richiedono tanta energia quanto migliaia di case in un anno. Questo articolo spiega come misurare la carbon footprint durante il training, quali metriche usare, e come implementare strategie concrete di riduzione nel tuo workflow di sviluppo — con esempi di codice reale e tool già disponibili.

Perché misurare la carbon footprint dell'AI

Il costo energetico del machine learning non è una curiosità accademica. Nel 2022, secondo uno studio del MIT e del Lawrence Berkeley National Laboratory, l'addestramento di un singolo modello di linguaggio generativo ha prodotto 626 tonnellate di CO₂ equivalente — quanto guidare un'auto per 1.3 milioni di chilometri. I data center che lo ospitano consumano il 1-2% dell'elettricità mondiale.

Come professionista del software, hai due responsabilità:

  • Efficienza immediata: ridurre il tempo e l'energia di ogni training, per abbassare costi e impatto.
  • Sostenibilità strategica: scegliere data center green, metodi di training efficienti, e modelli ottimizzati.

Questo articolo ti guida nella misurazione e nell'ottimizzazione.

Metriche fondamentali della carbon footprint

Prima di misurare, devi sapere quali metriche contano. Le principali sono:

  • PUE (Power Usage Effectiveness): Rapporto tra energia totale del data center e energia usata da IT. PUE = 1.0 è ideale (tutto usato dai server), 1.5+ significa inefficienza.
  • CUE (Carbon Usage Effectiveness): kg di CO₂ per kWh usato. Dipende dalla grid energetica (renewable vs. carbone). La media globale è ~0.4 kg CO₂/kWh; con energia verde, scende a 0.05.
  • FLOPS (Floating Point Operations Per Second): Operazioni computazionali al secondo. Più FLOPS per watt = più efficiente.
  • Training Time: Durata dell'allenamento in ore/giorni. Ridurre il tempo = ridurre l'energia totale.
  • Total CO₂ (kg o tonnellate equivalente): CO₂ = (Energia in kWh) × (CUE della grid).

Strumenti e librerie per misurare

Non devi calcolare manualmente. Ci sono tool open-source pronti all'uso:

1. Codecarbon (Python)

La libreria più popolare. Traccia energia e CO₂ in tempo reale durante il training.


# Installazione
pip install codecarbon

# Uso base
from codecarbon import OfflineEmissionsTracker

tracker = OfflineEmissionsTracker(country_iso_code="IT")
tracker.start()

# Qui il tuo training (PyTorch, TensorFlow, etc.)
for epoch in range(10):
    model.train()
    # training code...

emissions = tracker.stop()
print(f"Carbon emissions: {emissions} kg CO2")
    

Codecarbon stima energia monitorando la CPU/GPU e il consumo di memoria. Supporta stime cloud (AWS, Google Cloud, Azure).

2. Captura (PyTorch-native)

Plugin specifico per PyTorch che integra tracking senza overhead.


# Installazione
pip install captura

# Uso con PyTorch
from captura import capture_emissions
import torch
import torch.nn as nn

@capture_emissions
def train_model():
    model = nn.Sequential(
        nn.Linear(784, 256),
        nn.ReLU(),
        nn.Linear(256, 10)
    )
    optimizer = torch.optim.Adam(model.parameters())

    for epoch in range(5):
        for batch in train_loader:
            optimizer.zero_grad()
            loss = model(batch).sum()
            loss.backward()
            optimizer.step()

train_model()
# Output: Emissions = X kg CO2
    

3. Experiment Tracking (MLflow, Weights & Biases)

Integra carbon tracking nei tuoi esperimenti MLOps per comparare efficienza tra run.


# Integrazione con MLflow
import mlflow
from codecarbon import EmissionsTracker

with mlflow.start_run():
    tracker = EmissionsTracker()
    tracker.start()

    # Training
    model.fit(X_train, y_train, epochs=10)

    emissions = tracker.stop()
    mlflow.log_metric("carbon_emissions_kg", emissions)
    mlflow.log_metric("training_time_hours", training_hours)
    

Strategie di riduzione della carbon footprint

1. Scegliere hardware efficiente

Non tutte le GPU/TPU consumano allo stesso modo. Le TPU di Google sono generalmente 2-3x più efficienti per il training rispetto alle GPU, grazie all'architettura specializzata. Se usi GPU:

  • Prefersci NVIDIA A100 o H100 (più giovani = più efficienti per TFLOPS/watt).
  • Evita GPU vecchie (GTX 1080) per training seri — troppa energia per FLOPS.
  • Scegli CPU moderne (Intel Xeon Platinum, AMD EPYC) per CPU-bound tasks.

2. Optimizzare l'algoritmo di training

Algoritmi più brevi = meno energia consumata.


# BAD: Full training senza ottimizzazioni
model = BertModel()
for epoch in range(100):
    full_training_step(model)

# GOOD: Transfer learning + fine-tuning
model = BertModel.from_pretrained("bert-base-uncased")
# Congela i layer iniziali — meno gradienti da calcolare
for param in model.encoder.layers[:8].parameters():
    param.requires_grad = False

# Fine-tuning su pochi layer
for epoch in range(10):
    fine_tuning_step(model)
# Riduce FLOPS e tempo di ~80%
    

3. Usare learning rate scheduling e early stopping

Spesso il training non ha bisogno di tutte le epoche. Early stopping ferma il training quando la validazione non migliora, risparmiando energia.


# Integrazione Keras
from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau

early_stop = EarlyStopping(
    monitor='val_loss',
    patience=5,
    restore_best_weights=True
)

reduce_lr = ReduceLROnPlateau(
    monitor='val_loss',
    factor=0.5,
    patience=3,
    min_lr=1e-6
)

model.fit(
    X_train, y_train,
    validation_split=0.2,
    epochs=100,
    callbacks=[early_stop, reduce_lr]
)
# Si ferma prima se non c'è miglioramento
    

4. Scegliere un data center green

Il 50% dell'impatto dipende dalla carbon intensity della grid energetica. Se alleni su cloud:

  • Google Cloud: 40% energia rinnovabile media (best-in-class tra i major cloud).
  • AWS: ~30% rinnovabile (EU regions leggermente meglio di US).
  • Azure: ~45% rinnovabile in Europa.
  • Locale on-prem: Dipende dalla tua grid (es. Italia ~40% rinnovabile).

Usa il tool di Google Carbon Footprint API per scegliere il data center con la carbon intensity più bassa.

Distribuzione e quantizzazione dei modelli

Non tutto l'impatto è nel training. Anche la distribuzione conta. Modelli grandi consumano energia anche in inference. Riduci l'impatto di runtime:

Quantizzazione a 8-bit


# PyTorch: Quantizzazione dinamica
import torch

model = torch.load("my_model.pth")
quantized_model = torch.quantization.quantize_dynamic(
    model,
    {torch.nn.Linear},
    dtype=torch.qint8
)

# Modello 4x più piccolo, inference 3-5x più veloce
torch.save(quantized_model, "model_quantized.pth")
    

Knowledge Distillation

Allena un modello piccolo (student) per copiare un modello grande (teacher). Inference usa lo student, riducendo energia.


# Knowledge distillation semplificato
import torch.nn.functional as F

def distillation_loss(student_output, teacher_output, temperature=3):
    soft_target = F.softmax(teacher_output / temperature, dim=1)
    soft_pred = F.log_softmax(student_output / temperature, dim=1)
    return F.kl_div(soft_pred, soft_target, reduction='batchmean')

# Durante training
for data, target in train_loader:
    student_logits = student_model(data)
    teacher_logits = teacher_model(data)

    loss = distillation_loss(student_logits, teacher_logits)
    loss.backward()
    optimizer.step()
    

Monitoraggio e reporting

Una volta implementate le ottimizzazioni, traccia i progressi:


# Report completo di carbon footprint
from codecarbon import OfflineEmissionsTracker
import json

def run_and_report(model_name, country="IT", epochs=10):
    tracker = OfflineEmissionsTracker(
        country_iso_code=country,
        log_level="warning"
    )
    tracker.start()

    start_time = time.time()
    train_model(epochs=epochs)
    end_time = time.time()

    emissions_kg = tracker.stop()

    report = {
        "model": model_name,
        "epochs": epochs,
        "training_time_hours": (end_time - start_time) / 3600,
        "emissions_kg_co2": round(emissions_kg, 4),
        "emissions_metric_tons": round(emissions_kg / 1000, 4),
        "country": country,
        "trees_to_offset": round(emissions_kg / 21, 1),  # 1 albero assorbe ~21 kg CO2/anno
    }

    with open(f"{model_name}_carbon_report.json", "w") as f:
        json.dump(report, f, indent=2)

    print(f"Report salvato: {model_name}_carbon_report.json")
    return report

# Esecuzione
report = run_and_report("bert-fine-tuned-v1", epochs=20)
print(f"CO2 emissions: {report['emissions_kg_co2']} kg")
    

Best practice per Sustainable AI

  • Baseline first: Sempre comparare contro una baseline senza ML. A volte il problema si risolve con regole semplici.
  • Hyperparameter tuning consapevole: Usa grid search ristretto o Bayesian optimization, non random search senza limiti.
  • Versionamento dei modelli: Tieni traccia di quale versione è stata allenata su quale hardware e in quale regione. Facilita replay e benchmarking.
  • Batch size ottimale: Batch size troppo piccolo spreca GPU. Troppo grande = overflow di memoria. Sperimenta per trovare il sweet spot.
  • Comunicazione della carbon footprint: Includi l'impatto ambientale nel README del modello, come metrica accanto a accuratezza e latenza.

FAQ

D: Quanto costa energeticamente allenare un modello di linguaggio come GPT?

R: Un LLM da 175 miliardi di parametri ha consumato ~1.287 MWh durante l'addestramento, equivalente a ~552 kg CO₂. Stime non ufficiali per modelli di scala superiore suggeriscono 5-10x di più. Per benchmark: allenare un BERT small (110 milioni di parametri) costa circa 0.7-1.5 kg CO₂.

D: Se uso Ollama on-prem per inference locale, l'impatto è minore?

R: Sì, ma dipende da cosa "minore" significa. Inference su CPU/GPU locale consuma meno energia che un round-trip verso il cloud (latenza di rete). Però se la tua macchina usa energia fossile e un data center cloud usa 100% rinnovabile, il cloud potrebbe essere più green. Il punto chiave: misura sia il training che l'inference nel tuo contexto specifico.

D: È etico allenare modelli AI considerando l'impatto ambientale?

R: Sì, purché tu misuri, ottimizzi e comunichi l'impatto. Molti modelli utili hanno carbon footprint calcolata e pubblica. Il problema non è usare l'AI, ma usarla consapevolmente — proprio come usare un'auto è ok se ne conosci il consumo e non la sprechi.

D: Codecarbon fornisce stime accurate?

R: Codecarbon usa heuristiche (monitora TDP della GPU, CPU, memoria). Le stime sono spesso ±20% dalla realtà, a seconda dall'hardware. Per misure precise, usa i log di consumo energetico del data center o della tua UPS locale. Codecarbon è utile per comparazioni relative (questo run vs. quello) anche se le stime assolute non sono 100% precise.

D: Quale è il modello di training più carbon-efficient?

R: Transfer learning + fine-tuning. Allenare un modello piccolo da zero costa 10-100x di più. Se devi risolvere un problema di NLP, inizia sempre con un modello pre-trained (BERT, RoBERTa, Mistral) e adattalo ai tuoi dati. L'overhead del download pre-trained è trascurabile rispetto al training da zero.

Conclusione

La carbon footprint dell'AI training non è invisibile: è misurabile, riducibile, e soprattutto gestibile. Con le tool right (Codecarbon, Captura) e le strategie giuste (transfer learning, quantizzazione, early stopping), puoi ridurre l'impatto di un ordine di grandezza senza sacrificare performance.

Il messaggio finale: misura sempre. Non puoi ottimizzare quello che non misuri. Inizia oggi con un piccolo progetto, integra Codecarbon nel tuo workflow, e costruisci una cultura di Sustainable AI nel tuo team.

Commenti

Caricamento commenti...

Accedi per commentare

Discuti questo articolo nella community

Unisciti al gruppo Telegram per discutere con altri sviluppatori, fare domande e condividere le tue esperienze.

Ti è piaciuto questo articolo?

Esplora altri contenuti sul blog o scopri i miei progetti