碳足迹追踪工具:量化模型训练的碳排放
FreeGuideOnline
最新
2026-06-21
bash pip install codecarbon
### 步骤1:设置实验并启动追踪
CodeCarbon提供两种使用模式:手动显式追踪,或通过装饰器自动追踪。这里采用更灵活的显式模式。
```python
import torch
import torch.nn as nn
import torch.optim as optim
from codecarbon import EmissionsTracker
# 初始化追踪器,可指定输出文件、项目名称等
tracker = EmissionsTracker(
output_dir="./emissions",
project_name="mnist_classifier",
log_level="info"
)
tracker.start() # 开始记录硬件能耗和排放
# ---- 这里是你的模型定义和训练代码 ----
# 模拟一个简单的训练循环
model = nn.Sequential(nn.Flatten(), nn.Linear(28*28, 128), nn.ReLU(), nn.Linear(128, 10))
optimizer = optim.Adam(model.parameters(), lr=0.001)
loss_fn = nn.CrossEntropyLoss()
# 虚构数据
X = torch.randn(64, 1, 28, 28)
y = torch.randint(0, 10, (64,))
for epoch in range(5):
optimizer.zero_grad()
output = model(X)
loss = loss_fn(output, y)
loss.backward()
optimizer.step()
# ---- 训练结束 ----
emissions = tracker.stop() # 停止追踪并获取总排放数据
print(f"Total emissions: {emissions} kg CO2eq")
步骤2:解读输出结果
停止追踪后,CodeCarbon会在指定目录生成一个CSV文件,包含以下关键字段:
timestamp:实验时间。project_name:项目名称。duration:监控时长(秒)。emissions:总排放量(千克CO2当量)。energy_consumed:总能耗(kWh)。country_name/region:检测到的电网区域及碳强度。on_cloud/cloud_provider:是否在云上及供应商。
同时,你也可以访问CodeCarbon的本地或在线仪表板,通过图形化界面对比多次实验。
步骤3:优化碳排放的技巧
拿到排放数据只是第一步,下一步是根据数据优化。以下是几条行之有效的策略:
- 选择低碳区域:在云上训练时,选取碳强度低的区域(例如,Azure的某个区域可能使用大量可再生能源)。
- 优化硬件的功率效率:更新更高效的GPU(如从K80迁移到A100)可能显著降低单位计算量的功耗。
- 控制训练时长:采用早停(early stopping)、学习率衰减等策略避免无效迭代。
- 动态频率调节:GPU的动态电压和频率调节(DVFS)可降低空闲/轻载时的功耗,CodeCarbon默认会考虑。
- 使用更高效的模型架构:轻量级网络、模型蒸馏、剪枝等均可降低整体计算量。
使用CarbonTracker自动记录实验
如果你希望更自动地记录每次训练,CarbonTracker的装饰器模式非常方便。安装后,只需在训练函数上添加一个装饰器:
pip install carbontracker
from carbontracker.tracker import CarbonTracker
@CarbonTracker(epochs=5, monitor_epochs=-1, interpretable=True)
def train_model():
# 你的模型训练代码,无需额外调用start/stop
pass
train_model()
它会在工作目录生成详细的日志文件和绘图,包括每轮排放的变化趋势图。
使用ML CO2 Impact进行预训练估算
有时你并不想真实跑一遍代码,而是想快速对比云实例的碳排放。使用ML CO2 Impact的计算器:
from mlco2 import impact
# 估算在p3.2xlarge(含一张V100 GPU)上运行10小时的碳排放
emission = impact.compute(
hardware_type="v100",
hours_used=10,
provider="aws",
region="us-east-1"
)
print(f"Estimated emissions: {emission} kg CO2eq")
所有支持的硬件、提供商及区域列表可在官方文档中查到。该方法误差通常在10%~20%以内,非常适合实验规划阶段。
将碳追踪集成到MLOps流程中
为了让绿色AI成为团队习惯,可以将碳排放指标作为ML实验的元数据,与模型精度、损失一同记录。例如,在MLflow中记录:
import mlflow
with mlflow.start_run():
tracker = EmissionsTracker()
tracker.start()
# ... 训练 ...
emissions = tracker.stop()
mlflow.log_metric("co2_emissions_kg", emissions)