Emissioni di CO2 e l’🤗 Hub Guidare l’Avanzata

Emissioni CO2 e Hub Guidare Avanzata.

Cosa sono le emissioni di CO2 e perché sono importanti?

Il cambiamento climatico è una delle sfide più grandi che stiamo affrontando e la riduzione delle emissioni di gas serra come la diossido di carbonio (CO2) è una parte importante per affrontare questo problema.

L’addestramento e l’utilizzo di modelli di apprendimento automatico emetteranno CO2 a causa dell’uso di energia delle infrastrutture informatiche utilizzate: dalle GPU alla memorizzazione, tutto ha bisogno di energia per funzionare ed emette CO2 nel processo.

Nella foto: Modelli Transformer recenti e le loro impronte di carbonio

La quantità di CO2 emessa dipende da diversi fattori come il tempo di esecuzione, l’hardware utilizzato e l’intensità di carbonio della fonte di energia.

Utilizzando gli strumenti descritti di seguito, potrai sia monitorare che segnalare le tue emissioni (che è importante per migliorare la trasparenza del nostro settore nel suo complesso!) e scegliere modelli in base alla loro impronta di carbonio.

Come calcolare automaticamente le proprie emissioni di CO2 con i Transformers

Prima di iniziare, se non hai l’ultima versione della libreria huggingface_hub sul tuo sistema, esegui il seguente comando:

pip install huggingface_hub -U

Come trovare modelli a basse emissioni utilizzando l’Hugging Face Hub

Ora che il modello è stato caricato su Hub, come puoi cercare modelli su Hub cercando di essere ecologico? Beh, la libreria huggingface_hub ha un nuovo parametro speciale per eseguire questa ricerca: emissions_threshold. Tutto ciò che devi fare è specificare un numero minimo o massimo di grammi e tutti i modelli che rientrano in quell’intervallo.

Ad esempio, possiamo cercare tutti i modelli che hanno richiesto al massimo 100 grammi per essere realizzati:

from huggingface_hub import HfApi

api = HfApi()
models = api.list_models(emissions_thresholds=(None, 100), cardData=True)
len(models)
>>> 191

Ci sono stati parecchi! Questo aiuta anche a trovare modelli più piccoli, dato che di solito non rilasciano molta carbonio durante l’addestramento.

Possiamo guardare da vicino uno di questi per vedere se rispetta il nostro criterio:

model = models[0]
print(f'Nome del modello: {model.modelId}\nCO2 emesso durante l'addestramento: {model.cardData["co2_eq_emissions"]}')

>>> Nome del modello: esiebomajeremiah/autonlp-email-classification-657119381
    CO2 emesso durante l'addestramento: 3.516233232503715

Allo stesso modo, possiamo cercare un valore minimo per trovare modelli molto grandi che hanno emesso molta CO2 durante l’addestramento:

models = api.list_models(emissions_thresholds=(500, None), cardData=True)
len(models)
>>> 10

Ora vediamo esattamente quanto CO2 ha emesso uno di questi:

model = models[0]
print(f'Nome del modello: {model.modelId}\nCO2 emesso durante l'addestramento: {model.cardData["co2_eq_emissions"]}')

>>> Nome del modello: Maltehb/aelaectra-danish-electra-small-cased
    CO2 emesso durante l'addestramento: 4009.5

Quella è molta CO2!

Come puoi vedere, con poche righe di codice possiamo rapidamente valutare i modelli che potremmo voler utilizzare per assicurarci di essere consapevoli dell’ambiente!

Come segnalare le proprie emissioni di carbonio con transformers

Se stai utilizzando transformers, puoi tenere traccia e segnalare automaticamente le emissioni di carbonio grazie all’integrazione di codecarbon. Se hai installato codecarbon sul tuo computer, l’oggetto Trainer aggiungerà automaticamente il CodeCarbonCallback durante l’addestramento, che memorizzerà i dati sulle emissioni di carbonio man mano che addestri.

Quindi, se esegui qualcosa di simile a questo…

from datasets import load_dataset
from transformers import AutoModelForSequenceClassification, AutoTokenizer, Trainer, TrainingArguments
​
ds = load_dataset("imdb")
model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased", num_labels=2)
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
​
def tokenize_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True)
​
​
small_train_dataset = ds["train"].shuffle(seed=42).select(range(1000)).map(tokenize_function, batched=True)
small_eval_dataset = ds["test"].shuffle(seed=42).select(range(1000)).map(tokenize_function, batched=True)
​
​
training_args = TrainingArguments(
    "codecarbon-text-classification",
    num_train_epochs=4,
    push_to_hub=True
)
​
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=small_train_dataset,
    eval_dataset=small_eval_dataset,
)
​
trainer.train()

…ti troverai con un file all’interno della directory codecarbon-text-classification chiamato emissions.csv. Questo file terrà traccia delle emissioni di carbonio durante diverse esecuzioni di addestramento. Quindi, quando sarai pronto, potrai prendere le emissioni dall’esecuzione che hai utilizzato per addestrare il tuo modello finale e includerle nella sua scheda del modello. 📝

Un esempio di inclusione di questi dati nella parte superiore della scheda del modello è mostrato di seguito:

Per ulteriori riferimenti sul formato dei metadati per co2_eq_emissions, consulta la documentazione del hub.

Ulteriori letture

  • Rolnick et al. (2019) – Affrontare il cambiamento climatico con l’apprendimento automatico
  • Strubell et al. (2019) – Considerazioni sull’energia e sulla politica per l’apprendimento profondo in NLP
  • Schwartz et al. (2020) – Green AI