先分清:哪些任务有资格“等”
碳感知的批处理调度,第一步不是看电网,而是看任务本身。一款在线运营的游戏,后台常见的批量工作有:对局日志汇总与反作弊离线分析、美术与音频资产的压缩转码、补丁与安装包构建、推荐和内容生成的批量推理、数据仓库的每日聚合、模型训练。它们大多不与某个玩家的实时操作绑定,因此可以延后或换时段;而对战服务器、匹配、登录、支付这类实时服务不在这个讨论范围内,延迟和SLA永远排在低碳之前。
即便都是批处理,可以“等”的程度也差得很远。晨会要用的日报最迟明早八点要出;测试用的资产包可能三天之内都行;上线前一晚的补丁构建,则几乎没有商量余地。所以调度器需要的不是“凌晨/白天”这样的标签,而是一组能被计算的字段。
给每个任务写一张画像
九游会AI目前的设计取向,是让每个批任务在提交时携带如下信息:最早可开始时间、最迟必须完成的时间、预计运行时长、平均IT功率(kW)、能否中断并从断点续跑、中断一次的额外开销、数据存放的位置与依赖的上游任务。其中最关键的派生量是松弛量:截止时间减去当前时间再减去运行时长。松弛量为零的任务没有碳窗口可言,只能立刻开跑;松弛量越大,可选的时段越多。
要区分功率和电量:任务画像里写的是功率 kW,任务跑完消耗的是电量 kWh,等于功率乘以运行时间,再乘以机房的PUE折算到设施总耗电。碳排则要再乘上执行那几个小时的电网碳强度。
一次完整的调度决定:三个任务、一天的预测
设定一个虚构地区,机房PUE 取 1.2。当晚 20:00,碳强度预测(模拟)如下:20:00-24:00 约 740 g/kWh;00:00-04:00 约 700;04:00-08:00 约 620;08:00-12:00 约 450;12:00-16:00 约 320;16:00-20:00 约 560。这条曲线的形状故意设计成“中午最低”,因为这个地区午间光伏出力高。同一晚有三个任务提交:
| 任务(模拟) | 时长与IT功率 | 截止时间 | 能否中断 | 调度结果 |
|---|---|---|---|---|
| A:对局日志汇总 | 3 小时,80 kW | 次日 08:00 | 否 | 04:00-07:00 执行 |
| B:资产转码 | 6 小时,120 kW | 次日 20:00 | 可,每次中断另加约 5% 开销 | 10:00-16:00 连续执行 |
| C:补丁构建 | 4 小时,100 kW | 当晚 24:00 | 否 | 无松弛,立即执行 |
任务A在 20:00 提交,晨会前必须出结果,所以窗口只到 08:00。凌晨 00:00 开跑的碳强度约 700,而 04:00 之后降到约 620;A 的总耗电是 80 × 3 × 1.2 = 288 kWh,两种排法相差 288 × 80 g = 约 23 千克。收益不大,但方向说明一件事:凌晨也不必是“最早的凌晨”。
任务B松弛量最大。它的总耗电是 120 × 6 × 1.2 = 864 kWh。最干净的 4 小时在 12:00-16:00(约 320),再补 2 小时放到 10:00-12:00(约 450)。这样约 576 kWh 按 320 g 计,约 288 kWh 按 450 g 计,合计约 314 千克;如果不加区分,凌晨顺手跑完,约 582 千克。这个排法恰好连成一段,无需中断;如果窗口被切成两段,就要另加约 5% 的重启开销,收益相应打折。B 仍是三个任务里最值得等的一个。任务C的松弛量为零,晚上 20:00 到 24:00 正好是模拟曲线里最高的一段,没有办法,只能接受。
预测不是承诺:窗口要留一点余量
上表里的曲线是预测。风光出力、天气、电网调度都可能让它偏移,预测距离越远,误差越大。所以九游会AI在设计上避免押注单个小时,而是给出“低于当日某个分位数的时段”,并给决策附上一个不确定带;当最优窗口和次优窗口差距小于预测误差时,宁可选更稳妥、离截止时间更远的那个,或者干脆不移动。
近期讨论也提醒同样的事。2021 年有一项针对德国、英国、法国和加州的模拟研究,讨论了可延迟任务的类型、调度策略和预测精度会怎样影响减排结果;后来的研究又指出,很多地区一天之内的碳强度波动本来就不大,区域之间高低排序相对稳定,可用于时间移动的空间因此有限。所以对波动平缓的电网,等待未必值得;对光伏、风电占比大的电网,窗口才明显。
中断、续跑和冷启动的账
可中断不等于免费中断。任务被暂停后要保存断点,恢复时可能要重新拉取数据、重建缓存、重新排队,这些开销以耗电和延时的形式出现。经验做法是给每个任务限制最多中断几次,并把中断开销折算进碳排预估。对于本来就需要几十小时的模型训练或大规模转码,做检查点通常是必须的;对只有几十分钟的小任务,不如整段挪到一个窗口。
另一种常见情形是,任务需要读取的数据在远端存储里。如果换时段还需要跨区域搬数据,传输本身要耗电和费用,收益可能被吃光,这种情况更适合看看同一局游戏放在两个地区运行,碳排放为什么可能完全不同?九游会AI开始理解电网碳强度里关于跨区放置的完整算法,而不是单纯改时间。
所有任务都涌向同一个窗口会发生什么
只按碳强度贪心,会让全部可延迟任务在午间同时启动。这带来新的问题:机房的电力和制冷出现新的峰值,CPU和GPU互相争抢,需量电费可能上升,更严重的是它可能挤占实时服务的余量。公开资料里有大型云厂商的做法可供参考:用“虚拟容量曲线”一类的办法,为可延迟任务按小时设置资源上限,同时保证一天的总容量不变,这样既把负载推向低碳时段,又避免瞬时过载。九游会的思路与此类似:给批处理层设置并发上限,并让它在玩家流量突增时先退让,让出算力,此外,一旦临近截止时间,就转为强制执行,不再等待更好的时段。
保底规则和事后复盘
一个好用的调度器必须写清失败的时候怎么办:预测接口失联时,退回“按截止时间倒推、尽早开始”的默认策略;任务临近截止仍未开始时,强制执行;连续多天窗口都推不到的任务,应发出提醒,说明它的松弛量其实很小。事后,再用实际测得的碳强度回算一遍,比较“预测窗口”和“实际最优窗口”的差距,把它记成估算而不是成果。为什么节能和减碳需要分别记账,可以参考九游会官网为什么不把“节能”和“低碳”画等号?同样少用1度电,减排效果可能完全不同:把任务移到中午,耗电一度没变,变化的只是碳。
什么情形下不值得等
小任务不值得:本身耗电很少,等待带来的调度复杂度大于收益。延迟成本高的任务不值得:反作弊分析拖到第二天,可能意味着违规账号多活一天。区域日内波动很小时不值得。数据量巨大且搬迁成本高时不值得。想了解这类负载能否迁移到其他地区,可以看游戏服务器能不能跟着可再生能源“迁移”?实时游戏和后台任务答案完全不同。
凌晨任务并不一定要在凌晨跑,但也不一定要搬到中午。九游会绿色运营目前的做法,是让每个任务先证明自己“有多少松弛”,再让碳强度预测在这个范围内出主意;在窗口找不到明确收益时,就让任务按原计划运行。