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