CO2排放和🤗 Hub:引领变革

'CO2排放和🤗 Hub:引领变革' can be condensed to 'CO2排放和🤗 Hub' in English.

二氧化碳排放是什么,为什么重要?

气候变化是我们面临的最大挑战之一,减少温室气体排放,如二氧化碳(CO2),是解决这个问题的重要部分。

由于计算基础设施的能源使用,包括GPU、存储等,训练和部署机器学习模型会产生CO2排放。

图片:最近的Transformer模型及其碳足迹

CO2排放量取决于不同因素,如运行时间、使用的硬件和能源来源的碳强度。

使用下面描述的工具将帮助您跟踪和报告自己的排放量(这对于提高我们整个领域的透明度非常重要!),并根据它们的碳足迹选择模型。

如何使用Transformers自动计算自己的CO2排放量

在开始之前,如果您的系统没有安装最新版本的huggingface_hub库,请运行以下命令:

pip install huggingface_hub -U

如何使用Hugging Face 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.modelId}\n训练过程中排放的CO2:{model.cardData["co2_eq_emissions"]}')

>>> 模型名称:esiebomajeremiah/autonlp-email-classification-657119381
    训练过程中排放的CO2:3.516233232503715

类似地,我们可以搜索最小值以找到在训练过程中排放大量CO2的非常大的模型:

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

现在让我们看看其中一个模型排放了多少CO2:

model = models[0]
print(f'模型名称:{model.modelId}\n训练过程中排放的CO2:{model.cardData["co2_eq_emissions"]}')

>>> 模型名称:Maltehb/aelaectra-danish-electra-small-cased
    训练过程中排放的CO2:4009.5

那是很多的CO2!

正如您所看到的,在几行代码中,我们可以快速筛选模型,以确保我们在环保方面持有责任心!

如何使用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 的文件。这个文件将跟踪不同训练运行中的碳排放情况。然后,当你准备好时,你可以将用于训练最终模型的运行的排放数据包含在模型卡片中。📝

下面是在模型卡片顶部包含这些数据的示例:

有关 co2_eq_emissions 的元数据格式的更多参考,请参阅 Hub 文档。

进一步阅读

  • Rolnick et al. (2019) – 用机器学习解决气候变化
  • Strubell et al. (2019) – NLP 中的能源和政策考虑因素
  • Schwartz et al. (2020) – 绿色人工智能