周三上午九点,3号会议室。
陈博士比林晨先到,正坐在会议桌旁翻看打印出来的实验数据。几页A4纸上用红色笔标注了密密麻麻的批注,看得出他昨晚花了时间。
陈博士抬起头,表情看不太出喜怒,数据我看了,先说结论。
林晨坐下来,笔记本摊开。
离线结果不错,效果和可解释性同时提升,这个方向站得住。陈博士放下笔,但是——
他顿了一下,看着林晨。
离线结果不等于线上结果。你知道CTR在离线和线上之间的差异通常有多大吗?
林晨想了想:离线和线上的CTR差异,受特征偏移、数据分布变化、以及用户实时行为反馈的影响,通常会有10%到30%的衰减。
陈博士点头,你的离线CTR提升1.5个百分点,线上可能在这个范围上下浮动。即使考虑衰减,最终线上效果也应该在1到1.5个百分点之间。这个数字在推荐系统里已经很不错了,但前提是——线上表现真的跟离线一致。
他站起来,走到白板前,写下三个词:灰度、监控、回滚。
上线之前,你要回答我三个问题。他放下笔,看着林晨,第一,你的灰度方案是什么?从多少流量开始,怎么放量?第二,你的监控指标有哪些?出了问题怎么第一时间发现?第三,你的回滚预案是什么?如果线上指标崩溃,怎么在最短时间内切回旧模型?
三个问题,像三记闷锤,砸得林晨的脑子嗡了一下。
他昨晚一直在想实验数据,想消融实验的结果,想超参数搜索的策略——但他还没有认真想过上线的事。在他的潜意识里,模型训练完了、效果验证了,上线不就是部署一下的事吗?
但他马上意识到自己错了。上线,才是最关键的一步。
在量化系统里,他也走过同样的路——回测结果再漂亮,实盘第一天就可能出现滑点、延迟、市场风格切换等回测无法预见的问题。推荐系统也是一样,离线指标再好看,线上环境有无数的变量是实验室里模拟不了的。
第一,灰度方案。林晨迅速冷静下来,翻开笔记本开始记录,我的想法是——5%流量灰度三天,观察核心指标;如果指标正常,10%流量再跑三天;然后30%、50%、100%,每次间隔两到三天。整个灰度周期大约两周。
陈博士没有表态,继续问:灰度用户的选取策略呢?随机分流还是按用户特征分层?
我倾向随机分流,但需要排除新用户和高活跃用户两类特殊群体。林晨说,新用户的推荐策略跟老用户差异很大,灰度期间不应该把新用户纳入实验组。高活跃用户对推荐结果更敏感,如果灰度组里高活跃用户占比异常,可能会放大效果。
陈博士微微点头,示意他继续。
第二,监控指标。林晨在笔记本上画了一个分层图,核心指标三层:第一层是业务指标——CTR、CVR、人均消费时长、用户留存率;第二层是模型指标——AUC、NDCG、归因一致性和稳定性;第三层是系统指标——推理延迟、QPS、GPU利用率、错误率。
归因一致性和稳定性怎么在线上监控?陈博士追问。
这个问题让林晨停了几秒。归因指标在离线评估中很容易计算,但线上环境要求实时性,Shapley值计算代价太高——虽然他们用了注意力权重归因的近似方案,但在线上每个请求都做一次归因计算,还是会有额外延迟。
线上不做实时归因计算,林晨想了想,我们在灰度期间对采样日志做离线归因评估。每天凌晨跑一批采样数据,计算归因一致性和稳定性,作为监控的补充维度。实时监控只看业务指标和系统指标。
可以。陈博士终于说了一个肯定的字,采样比例呢?
千分之一。
够了。
第三,回滚预案。林晨翻到下一页笔记,两种回滚方案。方案A:模型热切换,新模型挂载失败时自动切回旧模型,切换时间不超过30秒。方案B:流量回切,灰度期间任何一轮指标异常,立刻将灰度流量切回旧模型,回切时间不超过5分钟。两种方案都需要跟工程侧配合,提前把旧模型的部署包和配置保留在线上。
陈博士没有立刻回应。他走到窗边,看了一眼窗外的南山科技园,然后转过身。
回滚方案A,你考虑了新模型挂载失败的情况,但没考虑新模型挂载成功但效果缓慢恶化的情况。有些问题不是崩溃式的,而是渐进式的——CTR缓慢下降,用户时长逐渐萎缩,等你发现的时候可能已经影响了一大批用户。
林晨愣了一下。他说得对。热切换只能处理灾难性的失败,对于渐进式恶化,需要更灵敏的监控机制。
所以,陈博士走回桌旁,你还需要加一个监控机制——业务指标的同比环比。每天的CTR、CVR、时长,跟灰度前的同一天、同一时段做对比。如果任何指标出现连续两天的同比环比下降超过0.5个百分点,自动触
>>>点击查看《AI时代:码农的涅盘重生》最新章节