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) – 绿色人工智能