二氧化碳排放與 🤗 Hub:引領潮流

釋出於 2022 年 4 月 22 日
在 GitHub 上更新

什麼是二氧化碳排放,為什麼它們很重要?

氣候變化是我們面臨的最大挑戰之一,減少二氧化碳(CO2)等溫室氣體的排放是解決這一問題的重要組成部分。

訓練和部署機器學習模型會因所使用的計算基礎設施(從 GPU 到儲存)的能耗而排放二氧化碳:所有這些都需要能量才能執行並在過程中排放二氧化碳。

Image of recent Transformer models and their carbon footprints

圖示:近期 Transformer 模型及其碳足跡

二氧化碳排放量取決於不同的因素,如執行時間、使用的硬體以及能源的碳強度。

使用下面描述的工具將幫助您跟蹤和報告自己的排放量(這對於提高我們整個領域的透明度很重要!),並根據模型的碳足跡選擇模型。

如何使用 Transformers 自動計算自己的二氧化碳排放量

在我們開始之前,如果您的系統上沒有最新版本的 huggingface_hub 庫,請執行以下命令

pip install huggingface_hub -U

如何使用 Hugging Face Hub 尋找低排放模型

模型現在已上傳到 Hub,那麼如何在 Hub 上搜索模型以實現環保呢?huggingface_hub 庫有一個新的特殊引數來執行此搜尋:emissions_threshold。您所需要做的就是指定一個最小或最大克數,然後所有符合該範圍的模型都將顯示出來。

例如,我們可以搜尋所有制作成本最高為 100 克的模型

from huggingface_hub import HfApi

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

有很多!這也有助於找到較小的模型,因為它們在訓練過程中通常不會排放那麼多碳。

我們可以仔細檢視一個,看看它是否符合我們的閾值

model = models[0]
print(f'Model Name: {model.modelId}\nCO2 Emitted during training: {model.cardData["co2_eq_emissions"]}')

>>> Model Name: esiebomajeremiah/autonlp-email-classification-657119381
    CO2 Emitted during training: 3.516233232503715

同樣,我們可以搜尋最小值以找到在訓練過程中排放大量二氧化碳的超大型模型

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

現在讓我們看看其中一個模型究竟排放了多少二氧化碳

model = models[0]
print(f'Model Name: {model.modelId}\nCO2 Emitted during training: {model.cardData["co2_eq_emissions"]}')

>>> Model Name: Maltehb/aelaectra-danish-electra-small-cased
    CO2 Emitted during training: 4009.5

那可真是大量的二氧化碳!

正如您所看到的,只需幾行程式碼,我們就可以快速審查我們可能想要使用的模型,以確保我們具有環保意識!

如何使用 transformers 報告您的碳排放量

如果您正在使用 transformers,藉助 codecarbon 整合,您可以自動跟蹤和報告碳排放量。如果您已在計算機上安裝 codecarbon,則 Trainer 物件將在訓練期間自動新增 CodeCarbonCallback,它將為您儲存碳排放資料。

因此,如果您執行類似這樣的程式碼...

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()

...您將在 codecarbon-text-classification 目錄中留下一個名為 emissions.csv 的檔案。該檔案將跟蹤不同訓練執行的碳排放量。然後,當您準備好時,您可以從用於訓練最終模型的執行中獲取排放量,並將其包含在模型的模型卡中。📝

此資料包含在模型卡頂部的示例如下所示

Visual of organizing the co2_eq_emissions in a Model Card file

有關 co2_eq_emissions 元資料格式的更多參考,請參閱Hub 文件

延伸閱讀

社群

註冊登入評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.