原文:
towardsdatascience.com/how-to-mesure-the-carbon-footprint-using-vertex-ai-pipelines-3d6bc9695e7b
·发表于 Towards Data Science ·9 分钟阅读·2023 年 1 月 31 日
--
图片由作者使用 Midjourney 生成。
机器学习已经成为我们日常生活的一部分,因此是时候考虑它对环境的潜在影响了。否则,大自然可能会以自然灾害的形式给我们一个‘我早就说过了’的教训,导致严重的人类痛苦。我们可以通过开始测量和减少机器学习模型的碳足迹来帮助应对气候变化。碳足迹衡量的是服务、产品、个人、组织或事件造成的温室气体排放总量。在机器学习的情况下,它包括训练和运行模型所需的能源,以及运行这些模型的硬件所用的能源。
在这篇文章中,我将对两个开源 Python 库 CodeCarbon 和 CarbonTracker 提供反馈,它们能够估算碳足迹。我还将包括一个在 Vertex AI 管道中使用它们的逐步指南。最后,我将列出减少碳足迹的实际考虑因素。所以,让我们在为时已晚之前开始为拯救地球贡献自己的力量吧!💚
用于测量 Python 中碳足迹的两个最流行的库是 CodeCarbon 和 CarbonTracker。事实是我们没有很多开源的替代方案。但我相信,一旦社区开始将碳足迹集成到机器学习系统中,我们将会有更多的选择。
让我们先说几句关于库的内容。
它是一个开源 Python 库,用于估算运行代码时产生的 CO2。该项目由 Yoshua Bengio 发起。我最欣赏的一点是它非常易于使用,文档良好,并且有一个很棒的仪表盘。估算通过测量总 GPU、CPU 和 RAM 的功耗来完成。然后,它应用您的云提供商或国家的区域碳强度,如果您使用本地计算机或本地集群。请参考下表以查看各种能源来源的碳强度。
@CodeCarbon 来源
二氧化碳排放估算(CO₂eq)计算如下:
CO₂eq=Power_consumption(kilowatt-hours)*Carbon_Intensity(kg of CO₂/kilowatt-hour)
请注意,当碳强度不可用时,CodeCarbon 使用世界平均值475 gCO2.eq/KWh。排放量被保存到名为emissions.csv.
的 CSV 文件中。
在支持的基础设施方面,它兼容支持NVIDIA 管理库(NVML)的 NVIDIA GPU 和支持Intel RAPL的 Intel CPU。如果您的 CPU 不在支持的 CPU 列表上,它将估算 CPU 的功耗为其热设计功耗(TDP)的 50%,默认 TDP 平均值为 85W。
使用 pip 安装:
pip install codecarbon
它支持两种模式:在线模式
或 离线模式
。
在线模式
需要互联网连接来获取您的地理位置。请参见下面使用它的示例,带有或不带装饰器:
离线模式
可以在您的设置无法访问互联网时使用。它需要指定国家的 3 个字母 ISO 代码。您可以在维基百科上找到国家ISO代码的列表。
CarbonTracker 是一个开源库,旨在通过测量训练所用硬件的功耗来估算训练深度学习模型的碳足迹。目前,它支持 GPU、CPU 和 DRAM 组件。它与支持NVIDIA 管理库 (NVML)的 NVIDIA GPU、支持Intel RAP的 Intel CPU、Slurm 和 Google Colab / Jupyter Notebook 兼容。使用起来很简单,但不幸的是,文档有限。
为了估算碳足迹,它使用以下公式:
Carbon Footprint = Energy Consumption × Carbon Intensity
Energy Consumption
是基于 PUE(功耗使用效率)计算的,这是一种用于衡量数据中心能源效率的指标。它通过将数据中心使用的总能量除以 IT 设备(如服务器、存储等)使用的能量来计算。
它使用与 codecarbon
相同的每个云或国家的 Carbon Intensity
。当碳强度不可用时,应用475 gCO2.eq/KWh的全球平均值。
可以通过 pip 安装:
pip install carbontracker
使用方法如下面的示例所示:
它还具备在指定目录中收集和存储日志的能力:
from carbontracker import parser
logs = parser.parse_all_logs(log_dir="./"+YOUR_DIR+"/")
现在我们对 CodeCarbon 和 CarbonTracker 有了一定了解,接下来我们将在 Vertex AI Pipeline 中使用它们。
在继续 Vertex AI Pipelines 之前,我邀请你阅读我的文章,该文章展示了如何使用 Vertex AI Pipelines。
接下来,我将演示如何在两种场景中跟踪碳足迹:
-
1. 仅使用 CodeCarbon 进行的监督学习(CarbonTracker 仅支持深度学习)。
-
2. 使用 CodeCarbon 和 CarbonTracker 进行深度学习。
我们将跟踪训练随机森林算法以**“预测葡萄酒质量”**时的碳排放。数据从UCI 机器学习库下载,@source [Cortez 等, 2009]。有关数据集的更多细节,请查看我的文章中的用例部分。笔记本可在GitHub上获取。
为了测量训练期间的碳排放,我们需要按如下方式修改笔记本中的 train_winequality
自定义 Kubeflow 组件:
-
将
codecarbon
添加到packages_to_install
列表中。 -
添加一个指标以跟踪 CO2 估算值
kpi_co2:Output[Metrics].
-
导入
OfflineEmissionsTracker
以使用离线模式(设置时没有互联网连接)。 -
实例化 codecarbon 跟踪器
tracker = OfflineEmissionsTracker(country_iso_code=”BEL”).
BEL 代表比利时。注意国家代码应与所选的 Google Cloud 区域匹配,在我们的例子中是europe-west1
。 -
使用
tracker.start().
开始跟踪。 -
使用 .fit() 方法开始训练模型。
-
使用
tracker.stop()
停止跟踪 -
记录排放
kpi_co2.log_metric(“emissions”, float(emissions)).
请参见下方我的示例。
一旦你更新 train_winequality
组件并重新运行笔记本,你应该会在管道图上看到 kpi_co2
指标工件。
作者提供的图片
然后,进入 NODE INFO 标签以检查 CO2 排放估算值(以 kg/kWh 为单位)。
❗️ 请注意,要创建一个 Vertex AI Pipeline 并在完成之前不进行监控,你可以使用 submit 而不是 run。
现在让我们使用深度学习算法进行练习。
在这个练习中,我们将使用 Keras(开源 Python 深度学习库)和 Tensorflow(开源机器学习框架)训练深度学习模型。目标是确定照片是否包含表 1 中列出的任何标签。为此,我们使用自定义的 卷积神经网络(CNN)架构进行图像分类。
我们使用 Keras 提供的由 Zalando SE 提供的 Fashion-MNIST 数据集,该数据集基于MIT 许可证。它包括 60,000 张用于训练的图片和 10,000 张用于测试的图片。每张图片都是一个 28x28 的灰度图像,属于 10 种不同的时尚类别,并标记为以下 10 个类别之一:
表 1:包含照片的标签。
-
Vertex AI Workbench
-
Python 3
-
Kubeflow 管道组件
-
使用 NVIDIA TESLA T4 GPU 预构建镜像
-
Tensorflow 2.11
-
Codecarbon
-
CarbonTracker
然后使用 pip 安装 Google Cloud Pipeline 组件和 TensorFlow。
pip3 install google-cloud-pipeline-components --upgrade --user
pip3 install kfp tensorflow
导入库。
定义全局变量。
我将使用tf-gpu.2–11:latest
作为基础镜像,该镜像包含 TensorFlow 和 GPU,存储在 Artifact Registry 中。请参见欧洲的预测和训练的预构建镜像。请注意,Google 还在Container Registry中发布了预构建镜像。
为了启用codecarbon
和carbontracker
,我们将按如下步骤进行:
-
将
codecarbon 和 carbontracker
添加到packages_to_install
列表中。 -
添加度量来跟踪估计值
kpi_co2:Output[Metrics]
。 -
导入 CarbonTracker 和日志解析器。
-
定义一个目录来重定向
carbontracker
的日志,例如DIR_LOG="log"
。 -
加载训练图像并进行缩放。
-
使用
keras.Sequential
API 来定义 CNN 的层。 -
编译模型。
-
启动
codecarbon
并指定荷兰地区的 ISO 代码 NLD。 -
指定 epochs 的数量和 carbontracker 的日志目录
carbontracker = CarbonTracker(epochs=epochs, log_dir=”./”+DIR_LOG+”/”)
。 -
启动 carbontracker
carbontracker.epoch_start()
。 -
在训练数据上拟合模型。
-
停止 carbontracker:
carbontracker.epoch_end()
& codecarboncodecarbon.stop()
。 -
记录排放值并保存模型。
评估组件依赖于预编译的 GPU Tensorflow 2.11 基础镜像。
输入经过训练的模型。然后加载fashion.mist
测试数据集。它调整和重塑测试图像,评估模型,并计算准确率、损失和混淆矩阵。
该管道促进了无服务器工作流的编排。我们的管道有两个步骤:训练(deep_learning_mist_task)和评估(model_evaluation_task)。它接受一些参数,如 learning_rate、epochs 的数量、batch_size、API 端点、项目 ID 和服务 URI。
要为管道步骤指定机器配置,请使用:
.add_node_selector_constraint("cloud.google.com/gke-accelerator", GPU_TYPE )
.set_gpu_limit(GPU_LIMIT)
GPU_TYPE 的可用值包括:
-
NVIDIA_TESLA_A100,
-
NVIDIA_TESLA_K80,
-
NVIDIA_TESLA_P4,
-
NVIDIA_TESLA_P100,
-
NVIDIA_TESLA_T4,
-
NVIDIA_TESLA_V10。
GPU_LIMIT 是一个表示 GPU 限制的正数。
执行管道后,你应该会看到以下图表:
作者提供的图片
转到总结选项卡以查看训练期间 CO2 排放的估算值。
作者提供的图片
我们可以注意到 CO2 估算值不同,因为两个库之间的能耗公式不同。说实话,我更喜欢 Codecarbon,因为它有更好的兼容性和文档。
我建议在设计 AI 算法时考虑一些实际问题。
考虑将碳足迹整合到机器学习模型的整个生命周期中,从数据收集到模型部署。
寻找配备适当处理器(CPU/GPU/TPU)的机器,以适应你的用例。
选择碳足迹较低的云区域。例如,Google Cloud Platform 会指示每个可用区域是否低 CO2。
在你的机器学习生态系统中集成碳足迹跟踪器。
选择高效的模型架构。查看可能减少能耗的sparse models。
鼓励团队使用云,因为研究表明它更具能源效率。
尽可能使用预构建模型,而不是从头开始训练。
在组织中共享数据集、特征库和预构建的专业模型。
总之,我推荐使用 Codecarbon,因为它在机器学习(CPU)和深度学习算法(GPU)上表现良好,并且具有更好的基础设施兼容性。关于 CarbonTraker,我在 Google Cloud CPU 上遇到了无法运行的错误,导致浪费时间。如果你打算使用 GPU,记得在使用前验证 GPU可用性。此外,我强烈建议检查GPU 定价以期望更低的成本。最后,重要的是要记住,减少机器学习中的碳足迹是一个持续的过程,新技术和技术不断发展以应对这一问题。确保跟踪有关碳足迹减少策略的更新。
笔记本可以在我的GitHub账户中找到。
希望你喜欢这篇文章。
如果你想在收件箱中收到我的未来故事,别忘了订阅。
如果你喜欢阅读我的故事并希望支持我成为作者,请考虑注册成为 Medium 会员,并获得数千篇数据工程和数据科学文章的访问权限。
[## 使用我的推荐链接加入 Medium — Bildea Ana
medium.com](https://medium.com/@anna.bildea/membership?source=post_page-----3d6bc9695e7b--------------------------------)
查看我的 MLops 文章集合
查看列表4 个故事