AI碳足迹追踪怎么落地:用Python脚本估算推理能耗与碳排放

AI碳足迹追踪的核心不是买一套监控系统,而是把每次模型调用产生的能耗和碳排放记录下来,形成可对比的数据。
对大多数使用API或本地推理的团队来说,用Python脚本在调用链路里埋点,记录token量、推理时长和硬件功耗,再乘以电网碳强度,就能得到估算值。
本文面向零基础用户,从准备条件到脚本落地讲清楚怎么做。

先确定追踪范围和记录字段

开始写脚本前,先想清楚追踪哪类调用。
常见场景包括:调用云端大模型API、本地运行开源模型、批量跑推理任务。
不同场景记录方式不同,但核心字段可以统一:

  • 调用时间、模型名称、请求ID
  • 输入token数、输出token数(API通常返回usage字段)
  • 推理耗时(秒),本地推理可用time.perf_counter()记录
  • 硬件类型和功耗系数(GPU型号或CPU TDP)
  • 电网碳强度(gCO2/kWh),可按地区取公开平均值

如果使用云端API,优先从响应体的usage字段拿token数据;
本地推理则需自己统计。不要一开始追求精确到每瓦时,先用可复现的估算方法跑通流程。

准备环境和依赖

在Linux或macOS上准备Python 3.8+环境,安装必要库:

python3 -m venv venv
source venv/bin/activate
pip install requests pandas

如果需要读取GPU功耗,可以安装pynvml(NVIDIA显卡):

pip install nvidia-ml-py

准备一个CSV文件作为记录载体,字段固定为:timestamp,model,input_tokens,output_tokens,duration_sec,device,power_watt,carbon_intensity。
后续可以用pandas做汇总。

编写追踪脚本:在调用前后埋点

以调用一个通用大模型API为例,脚本结构分三步:记录开始时间、发起请求、解析usage并写入CSV。
关键代码如下:

import time, csv, requests
from datetime import datetime

API_URL = "https://api.example.com/v1/chat/completions"
HEADERS = {"Authorization": "Bearer YOUR_KEY"}

def track_call(prompt, model="gpt-4o-mini"):
    start = time.perf_counter()
    resp = requests.post(API_URL, headers=HEADERS, json={
        "model": model,
        "messages": [{"role": "user", "content": prompt}]
    })
    duration = time.perf_counter() - start
    data = resp.json()
    usage = data.get("usage", {})
    row = {
        "timestamp": datetime.utcnow().isoformat(),
        "model": model,
        "input_tokens": usage.get("prompt_tokens", 0),
        "output_tokens": usage.get("completion_tokens", 0),
        "duration_sec": round(duration, 3),
        "device": "cloud_api",
        "power_watt": 0,
        "carbon_intensity": 475
    }
    with open("carbon_log.csv", "a", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=row.keys())
        writer.writerow(row)
    return data

注意:power_watt对云端API无法直接获取,
可以先填0,
后续用估算系数替代;carbon_intensity取当地电网平均碳排放因子,
中国区域可参考公开的电网平均排放因子,
单位gCO2/kWh,
不同年份有差异,
使用时注明来源和年份。

本地推理场景则需要在推理前后读取GPU功耗,例如使用pynvml采样:

from pynvml import nvmlInit, nvmlDeviceGetHandleByIndex, nvmlDeviceGetPowerUsage
nvmlInit()
handle = nvmlDeviceGetHandleByIndex(0)
power_mw = nvmlDeviceGetPowerUsage(handle)  # 毫瓦
power_watt = power_mw / 1000

把采样到的平均功耗填入power_watt,再结合推理时长计算能耗:能耗(kWh) = 功率(W) × 时长(h) / 1000,碳排放(gCO2) = 能耗 × 碳强度。

汇总与验证:从日志到碳足迹报告

记录一段时间后,用pandas汇总:

import pandas as pd
df = pd.read_csv("carbon_log.csv")
df["energy_kwh"] = df["power_watt"] * df["duration_sec"] / 3600 / 1000
df["carbon_g"] = df["energy_kwh"] * df["carbon_intensity"]
print(df.groupby("model")[["energy_kwh","carbon_g"]].sum())

验证方式:检查总调用次数是否与业务日志一致,单次碳排放量是否在合理范围(例如一次短文本API调用通常远小于1gCO2,本地GPU推理则可能达到数克)。
如果数值异常大,优先检查功率单位是否混淆(瓦与毫瓦)和碳强度单位是否用错。

容易踩的坑和注意事项

  • 单位混乱:功率用瓦、时间用秒、碳强度用gCO2/kWh,换算时统一到小时和千瓦,否则结果差几个数量级。
  • 云端API功耗无法直接测量:不要编造精确值,可以用服务商公开的能效数据或行业估算系数,并在报告中注明估算方法。
  • 碳强度不要写死:不同地区、不同时段电网碳强度会变化,建议做成配置项,按月份或地区更新。
  • 日志文件并发写入:多进程同时写CSV可能丢行,生产环境建议改用SQLite或日志队列。
  • 不要承诺精确碳足迹:脚本输出的是估算值,用于趋势对比和优化参考,不能替代第三方碳核算认证。

常见疑问

追踪AI碳足迹需要改模型代码吗? 不需要。
大多数情况下在调用层加埋点即可,云端API从响应中取usage,本地推理在前后计时和采样功耗,模型本身不用动。

没有GPU功耗读数怎么办? 可以用CPU TDP或GPU标称功耗乘以利用率作为近似,但要在报告中说明是估算,不能当作实测数据。

多久记录一次比较合适? 按调用次数记录即可,每次请求一行。
如果请求量很大,可以按小时聚合后再写入,避免日志膨胀。

完成以上步骤后,你就有了一个可运行的AI碳足迹追踪脚本,能输出按模型、按时间段的能耗和碳排放估算。
后续可以根据业务量调整采样频率,或把结果接入看板做持续对比。

分享到:
上一篇
AI垃圾分类配置:用Python脚本调用模型接口识别垃圾类型
下一篇
AI工具怎么选:150款软件平台按实际任务收敛到3类
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意