搭建容易维护难!谷歌机器学习系统血泪教训(2)
令人惊讶的是,学术界意识到在大多数机器学习系统当中,只有很小一部分代码在实际进行“机器学习”。事实上,一套成熟的系统最终可能最多只有 5% 的代码负责机器学习,而其余 95% 甚至更多代码只是起到粘合作用,从而通过重新实现(而非重新使用)改善原本笨拙的 API…… 这里需要解决的问题在于,很多机器学习库都被封装成了独立的工件,这无疑会引入大量胶水代码(例如从 Java 转换至 R 或者 matlab)。如果大家无法在更为广泛的系统架构内找到适合自己的资源选项,那么重新实现算法(5% 部分的代码)可能更有意义,且能够有效减少胶水代码的数量。 一大相关问题在于管道丛林——即过于复杂的数据准备管道。
一旦系统因胶水代码与管道丛林问题而变得僵化,很多朋友会忍不住调整生产代码中的实验代码路径以执行额外实验。这样做当然比较方便,但一旦频率过高,其只会引发更大的混乱。
在本节的最后,“配置往往是现实世界的混乱对美丽算法造成干扰的载体:” 请考虑以下例子。特征 A 在 9 月 14 日到 9 月 17 日之间发生了记录错误。特征 B 直到 10 月 7 日才正式上线。由于记录格式发生了变化,用于计算特征 C 的代码必须对 11 月 1 日之前及之后的数据进行更改。特征 D 并未用于生产,因此在现场调协中进行模型查询时,必须使用替代性的 D’与 D”。如果特征 Z 被使用,那么所有训练相关任务必须获得额外的内存配额,否则其训练效率将显著降低。最后,由于延迟限制,特征 Q 排除掉了特征 R。所有这些混乱的条件使得配置难以正确修改且难以推理。此外,配置错误还可能引发高昂的代价——包括严重的时间浪费、计算资源损耗或者生产问题。 配置变更应该与代码变更一样得到谨慎处理,并交由同行进行评审。 世界还将带来怎样的变化?
请不要手动设置决策阈值(例如显示或不显示广告),而应考虑通过评估现有验证数据以发现阈值此外,因果不明的相关特征也可能引发问题:
最后,实时监控系统至关重要。论文建议大家测量预测偏差,并在系统采取的行动数量超过某个阈值时发布警报。
(编辑:ASP站长网) |