给算力算账:一笔 AI 成本要拆到七个科目才谈得上优化

一、账只记到两层,优化就只剩砍规模
据公开报道,有财经媒体报道了算力基础设施高度集中的地区,提到当地签约的数据中心项目数量与多家企业布局。地名、项目数量与企业名按公开报道处理,不作为本篇判据;本篇不推断电价、能耗指标与投资额,也不评论任何宏观政策与选址问题。
这类报道传递的有效信息其实很朴素:算力的钱开始被认真地算。但把镜头拉回企业内部,多数团队的算力账只记到两层:第一层是每月付出去的账单,第二层是账单里能直接看出的电力与机房租金。再往下就没有了。没有并不意味着不存在,只是被摊进了折旧、许可、人力与闲置,变成一句谁也反驳不了的”算力就是贵”。
贵的原因通常不是单价,而是归因粒度。归不到业务、任务与具体动作上的成本,无法被优化,只能被摊派;摊派久了,各方学会的不是省,而是把用量藏进别人的账。所以我们主张先解决记账,再谈降本。这里要划清与既有讨论的边界:先归因再降本这个原则本身值得单独讨论,本篇不重复那套论证,只把账本拆成能落地的科目、粒度与仪表字段,回答”每一栏谁填、周度会上拿它做什么决定”。
二、七个科目,各自的可优化空间完全不同
第一个科目是设备折旧。它由采购价格与摊销年限决定,可优化空间在于延长有效服役期和提高单位设备的产出,而不在于把折旧本身谈没。第二个科目是电力与制冷,它是唯一随负载连续变化的科目,也是唯一一个降下来不可逆的科目。第三个科目是机房与带宽,包括机柜、配电冗余、网络出口与互联。第四个科目是软件许可与支持,含虚拟化与容器平台、监控、存储协议栈、调度器与商业模型的调用许可,特点是账单分散、续约时点各异。第五个科目是运维人力,包括值守、故障处理、变更与容量沟通。第六个科目是闲置与预留,为峰值与容灾准备却长期不出工的那部分。第七个科目是失败与返工,失败任务重跑、无效实验、上线后回退的沉没投入。
第七个科目最常被漏记,因为它不出现在任何账单上,只出现在工时和交付延期里,而它的可优化空间往往大于前面几项之和。第一个与第三个科目的决策周期以年计,一旦定下就动不了;第二、四、六、七的决策周期以周计,才是周度例会能扳动的部分。把不可动的科目和可动的科目混在同一页,讨论必然失焦。
三、三档归因粒度,只到第一档时降本会伤到业务
第一档是按集群记账。这一档最容易实现,也几乎不产生价值,因为它只能回答哪个集群贵,无法回答贵得是否值得。第二档是按任务记账,成本落到一次训练、一次批量推理、一次评测上,能排优先级,但无法回答该不该做这件事。第三档是按业务动作记账,把任务继续摊到它服务的功能与业务动作上,这一档才能支撑一个判断:这件事值不值得花这么多。
只记到第一档的组织,降本动作会自然变成砍规模,因为那是唯一看得见的旋钮,而砍规模伤到的一定是当时还没被算进账的那部分业务。第三档不必一步到位,但要有明确推进顺序:先把任务标识强制带上发起方与用途,否则事后无法补标;再把网关与调度器的记录字段补齐,使每个任务有唯一归属;最后才谈成本分摊模型。任何在归属之前建立的分摊模型都会被当成惩罚机制。
| 科目 | 原始数据来源 | 归因键 | 计量频率 | 主要失真来源 | 周度决策 |
|---|---|---|---|---|---|
| 设备折旧 | 资产台账 | 集群、机型 | 月度分摊到周 | 摊销年限与实际服役不符 | 是否延长服役 |
| 电力与制冷 | 机房侧分项计量 | 机柜、任务 | 小时 | 公共负荷全摊到算力 | 高峰是否转移 |
| 机房与带宽 | 服务账单 | 集群、出口 | 月度 | 冗余按峰值长期计费 | 冗余是否过度 |
| 软件许可与支持 | 合同 | 使用它的功能 | 按续约周期 | 一项许可多项目共用 | 合并或退订 |
| 运维人力 | 工时与工单 | 事件、变更 | 周 | 值守与优化混记 | 是否自动化 |
| 闲置与预留 | 调度器分配记录 | 池、预留方 | 实时 | 持有不申报 | 是否收回 |
| 失败与返工 | 任务终态与重跑链 | 任务、发起方 | 每任务 | 返工不立项 | 失败率红线 |
表里最后一列是这张账本的价值所在:任何科目若对应不出一个具体决策,就不必进周会。
四、利用率口径的错误,比数字不准更麻烦
第一种错误是用均值掩盖峰值预留。池子平均利用率看着很高,但这份高是由少数高峰时段贡献的,容量却要按最坏时刻准备,均值口径下永远看不出预留的浪费。可用的口径是按时间累计的不可用秒数,或按高峰窗口的分位数。
第二种错误是把显存占满当算力用满。模型加载完,显存即接近饱和,但计算单元可能长期空转,真实产出与占用无关。至少要看两组:调度器视角的占用,与设备视角的有效计算时间占比。
第三种错误是忽略等待与启动时间。任务排队、镜像拉取、数据预热、权重加载都记在墙上时间却不产生输出,这部分在按任务统计时会被误记为计算消耗。要按状态切分墙上时间:排队、启动、计算、等待外部依赖、重试,五段分开计数。
第四种错误容易被忽略:重试与回退产生的消耗被记在最终成功的那次任务上,让成功任务的单位成本看起来正常,而真实成本被藏进历史。重跑链要按根因关联到同一个任务族,否则返工这个科目永远是零。
五、降本杠杆的执行顺序,顺序错了会互相抵消
推理侧四个杠杆要按顺序推。第一个是砍无效调用与重复内容,包括同一请求被链路上多个环节重复发起、上下文里反复携带相同内容、没人认领的定时任务;这一层不需要任何技术替换,收益直接且风险最低。第二个是调批量与缓存,把等待窗口和命中率拿满,同样不改变模型。第三个是换模型档位与采样参数,在质量可接受范围内下移,必须先建好质量对照基线。第四个才是换硬件或换供应商,周期最长、退出成本最高。顺序颠倒的典型后果是:先换了硬件,才发现省下来的开销被无效调用吃掉;或者先下了模型档位,之后又花钱把硬件升回去。
训练侧两个杠杆。一是数据与环境的等待时间,重点不在算力而在供给,先确认计算单元空转是被数据喂不上还是被外部依赖卡住,两者的处置完全不同。二是失败重跑比例,它藏在返工科目里,只有把失败按根因分类才能看见;长任务失败若多由可恢复检查点缺失造成,补检查点的收益往往高于任何硬件优化。
预留与抢占也要算账。保障型与弹性型的混配比例应由业务能接受的降级形态倒推,被打断任务的重放成本必须计入弹性侧,否则混配只体现省下的部分。抢占语义与作业权限是另一套治理问题,本篇只处理它的成本记账,不重复讨论谁能停谁的作业。
六、把账本做成周度例会的输入
仪表的最小字段集我们不追求完整,只追求能支撑决策:科目、归因键、当期数值、上期数值、口径变更说明、负责人、下期动作。口径变更说明最容易被省,但缺了它,两次会议之间任何数字变动都会先被怀疑成业务变化。
三条使用规则值得写进会议章程。第一,先跑两周只读版本,让各方核对自家数字再进决策,跳过这一步的账本会在第一次分摊会上被推翻。第二,任何降本动作必须回写预期值与验证时点,未达预期要归因,否则杠杆会一直停留在计划里。第三,返工科目允许被高估,不允许缺失。
洹拓在给做模型服务的客户搭这套账时,通常从两张表开始:科目表与墙上时间状态表。这两张齐了就能开始讨论;七科目归因表里的归因键,要等调度器与网关的字段补齐才填得满。要诚实说明一点:这套账不会让成本立刻下降,它只是把该由谁负责、该砍哪一笔这两个问题从争论变成读取。账记不清的时候,所有的降本会议最后都会开成规模听证会。