免费下载!由 O’Reilly 出版的《NGINX 完全指南》中文版已正式上线 了解详情
写点什么

Dropbox 如何通过机器学习每年节省 170 万基础设施费用的?

  • 2021-02-21
  • 本文字数:3724 字

    阅读完需:约 12 分钟

Dropbox 如何通过机器学习每年节省 170 万基础设施费用的?

近年来,Dropbox 通过优化生成和缓存文档预览的方式,将机器学习的预测能力转变为每年节省 170 万美元的基础设施费用。基于机器学习的 Dropbox 已经提供了常用的功能,比如搜索文件和文件夹建议,以及用于文档扫描的OCR。尽管我们的机器学习应用程序并不都是用户直接看到的,但它们仍在其他方面影响着业务。

预览是什么?


用户可以通过Dropbox 预览功能查看文件而无需下载内容。Dropbox 除了预览缩略图外,还提供了一个交互式预览界面,可以共享和协作,包括评论和标记其他用户。


内部系统 Riviera 能够安全地生成文件预览,并能处理几百个受支持文件类型的预览。其方法是将各种内容转换操作串联在一起,从而创建适合文件类型的预览。举例来说,Riviera 可以将多页 PDF 文档中的一个页面进行光栅化,从而在 Dropbox 网页表面上显示高分辨率预览。完整的内容预览功能,支持评论、分享等互动功能。然后,大型图像资产可以被转换成图片缩略图,并在不同的场合显示给用户,包括搜索结果或者文件浏览器。


在 Dropbox 这样的规模下,Riviera 每天要处理几十 PB 的数据。为提高特定类别大文件的预览速度, Riviera 预先生成并缓存预览资产(我们称之为预热过程)。预热的 CPU 和存储器开销对我们所支持的文件量来说相当大。



浏览文件时,可以预览缩略图。可以将预览放大,作为应用文件的代理进行交互。


通过机器学习,我们看到有机会降低成本,因为有些预先生成的内容是不会被浏览的。假如我们能有效地预测预览是否会被使用,我们只预热那些确信会被看到的文件,从而节省计算和存储空间。该项目以法国里维埃拉的著名城市 Canners 的名字命名。

机器学习中的权衡

通过权衡,我们得出了预览优化的指导原则。用更少的文件预热可以省钱,但如果文件被错误地拒绝,用户体验就会受到影响。Riviera 需要实时生成预览,以便用户在缓存未命中时等待结果出现。我们和预览团队一起开发了防护栏,以避免降低用户体验,并利用防护栏来调整模型,合理进行费用节省。


另一个思考是复杂性和模型性能、可解释性及部署成本之间的平衡。一般来说,机器学习中存在着复杂性与可解释性之间的平衡:更复杂的模型通常具有更准确的预测,但其代价是,作出某些预测的可解释性较低,并且可能增加部署的复杂性。对于第一次迭代,我们的目标是尽可能快地提供可解释的机器学习解决方案。


因为 Cannes 是在已有系统中构建的一种新的机器学习应用程序,因此我们倾向于采用更简单、更易解释的模型,以便我们能够专注于模型服务、指标和报表部分,而不会增加复杂性。当 Riviera 发生故障时,或当 Riviera 发生意外行为时,机器学习团队也能更轻松地进行调试,并了解原因是 Canners 的问题还是其他问题。该解决方案要求每天处理将近五亿个请求,相对简单且成本低廉。当前的系统仅对所有可预览的文件进行预热,因此任何基于该系统的改进都将节省资源,并且将变得更快更好!它同样是机器学习团队的目标。

Cannes v1 版本

考虑到这些问题,我们把目标锁定在简单、快速训练和可解释的 Cannes 模型上。v1 模型是一种梯度提升技术,它基于输入特性进行训练,包括文件扩展名、 Dropbox 账户类型和 Dropbox 账户最近 30 天的活动。对于离线保持,我们发现该模型能够预测预热 60 天后的预览,准确率高于 70%。这个模型拒绝了约 40% 的预热请求,并且性能处于我们为自己设定的警戒线范围之内。还有一小部分假阴性文件 (我们预计这些文件不会被看到,但最终会在接下来的 60 天里被看到),让我们付出了动态生成预览资产的成本。通过“拒绝百分比”指标减去假负值,我们可以每年大约可以有 170 万美元的节省。


甚至在研究预览优化空间之前,我们都希望确保潜在的节省可能比构建机器学习解决方案更多。对于希望通过 Cannes 实现的预期节余,我们有一个大概的估计。设计和部署大规模分布式系统中的机器学习系统意味着接收系统的某些变化会随着时间而影响你的评估。通过保持初始模型的简单性,我们希望即使相邻系统随时间变化幅度不大,成本影响的数量级仍然是值得的。在 v1 版本中,通过分析训练好的模型,我们可以更清楚地了解实际节省了多少,并且还可以确认投资是值得的。


利用内部特征门控服务Stormcrow,我们对随机抽取的 1% Dropbox 流量样本进行了 A/B 测试。通过离线分析,验证了模型的正确性,以及“省钱”的效果。由于 Cannes v1 版本不再对所有符合条件的文件进行预热,因此预期缓存命中率将下降。在实验期间,我们发现与 A/B 测试中的保持人群相比,缓存命中率降低了几个百分点。虽然出现下滑,但总体预览延迟时间基本不变。


由于缓存未命中会导致尾部延迟(超过 90 个百分位的请求的延迟),这将更加严重地影响预览功能的用户,因此我们对尾部延迟特别感兴趣。令人欣慰的是,我们没有看到预览的尾部延迟或整体延迟的减少。在 Dropbox 上进行现场测试使我们对 V1 版本的模型能够部署到更多的流量有了信心。

大规模实时预测

为了给 Riviera 提供实时预测服务,我们需要一个方法,即当一个文件经过预热路径时,是否预热给定的文件。针对这一问题,我们构造了 Cannes 作为预测的管道,获取与文件相关的信号,并将其反馈给预测未来预览被使用概率的模型。


Canners 架构


接收 Riviera 预热路径中的文件 id。Riviera 将收集所有满足预热要求的文件 id。(Riviera 可预览存储在 Dropbox 上的文件的 98% 左右。少数文件不属于受支持的文件类型,或无法预览)。Riviera 将发送一个预热请求,其中包含需要预热的文件 id 和文件类型。


检索实时信号。我们使用了一种内部服务,即 Suggest Backend,以便在预测文件时收集最新的活动信号。此服务将验证预测请求,然后查询适当的与文件相关的信号。信号被存储在 Edgestore (Dropbox 的主要元数据存储系统)或用户配置文件服务中(RocksDB 数据存储,可以聚合 Dropbox 活动信号)。


将信号编码为特征向量。收集到的信号被发送到预测服务中,预测服务将原始信号编码为特征向量,代表文件所有相关信息,然后将此向量发送到模型中进行评估。


生成一个预测。该模型通过特征向量来返回文件预览所用到的预测概率。然后,这个预测会被发回给 Riviera,Riviera 会对未来 60 天内可能被预览的文件进行预热。


记录有关请求的信息。建议后端记录特征向量、预测结果和请求统计,这些信息对于解决性能下降和延迟问题非常关键。

附加注意事项

由于上述管道位于 Riviera 预热功能的关键路径上,因此减少预测延迟非常重要。举例来说,当流量增加到 25% 时,我们会观察到将 SuggestBackend 的可用性降低到内部 SLA 以下的边缘情况。通过对特征分析发现,步骤 3 中的这些情况都存在超时现象。我们对特征编码进行了改进,并对预测路径进行了优化,以减少此类边缘情况下的尾部延迟。

操作化机器学习

在推出过程中以及之后,我们强调了稳定性,并确保预览界面的客户体验不会受到负面影响。在多个层面上进行密切监控和警报是机器学习部署过程中的一个关键组成部分。

Cannes v1 指标

预测服务基础指标:共享系统在正常运行时间和可用性方面有自己的内部 SLA。利用现有的工具,如 Grafana,我们可以进行实时监控和报警。指标包括:


  • 建议后端和预测服务的可用性。

  • 用户配置服务的数据新鲜度(我们的活动数据存储)。


预览指标:我们有预览性能的关键指标,即预览延迟分布。为了防止模型漂移或不可预测的系统变化,我们使用 3% 的暂留量来比较预览指标中有没有 Cannes,这会降低模型性能。Grafana 也是一个应用级指标的常见解决方案。指标包括:


  • 预览延迟分布(Cannes 与非 Cannes 保持),并特别注意 p90 以上的延迟。

  • 缓存命中率(Cannes 与非 Cannes 保持):缓存命中总数 / 预览内容请求总数。


模型性能指标。对于 Cannes v1 版本,我们提供了机器学习团队使用的模型指标。为了计算这些指标,我们建立了自己的管道。有关的指标包括:


  • 混淆矩阵,额外关注假阴性率的变化。

  • ROC 曲线下的面积。除了直接监控混杂矩阵统计数据外,我们还对 AUROC 进行计算,并利用它对未来模型的性能进行比较。


以上模型性能指标按小时计算,并存储在 Hive 中。利用 Superset 可视化重要指标,并创建实时 Cannes 性能仪表板。基于指标表创建的 Superset 警报,当基础模型行为发生变化时,会主动通知我们,希望在面向客户端的任何影响发生之前就能知道。


但是,仅仅监测和预警并不足以确保系统健康;还需要建立明确的所有权和升级流程。举例来说,我们记录了可能影响模型结果的机器学习系统的特定上游依赖关系。同时,我们也为随叫随到的工程师们制作了一本操作手册,详细介绍了解决问题的步骤,不管问题是 Cannes 还是系统的其他部分,如果根本原因是机器学习模型,那么就可以进行升级。所以,机器学习团队和非机器学习团队之间的紧密合作帮助确保了 Cannes 能够持续地工作。

现状与展望

现在几乎所有的 Dropbox 都部署了 Cannes,我们用一年 9000 美元的机器学习基础设施(主要是从后台建议和预测服务中增加的流量)来代替了每年 170 万美元的预热成本。


在 Dropbox 的其他基础设施工作中,我们希望把为 Cannes 开发的经验和工具推广开来。机器学习在基础设施优化中的应用是一项激动人心的投资。


原文链接:


https://dropbox.tech/machine-learning/cannes--how-ml-saves-us--1-7m-a-year-on-document-previews

2021-02-21 10:201341

评论

发布
暂无评论
发现更多内容

极客时间运维进阶训练营第四周作业

Starry

react源码中的生命周期和事件系统

flyzz177

React

支持向量机-线性SVM用于分类的原理

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

浅谈Go语言反射

海风极客

Go 反射 11月月更

融云推送服务:独享推送通道,更高并发能力,应用运营必备

融云 RongCloud

互联网 消息

从 Redux 的困扰到如何技术选型

光毅

JavaScript React Redux

从React源码分析看useEffect

goClient1992

React

react源码分析:babel如何解析jsx

flyzz177

React

融云 IM 和 RTC 服务,「助攻」智能物流等客户打通链路、完善生态

融云 RongCloud

IM RTC

Alien Skin Exposure2023独立编辑器和PS/LR插件

茶色酒

Alien Skin Exposure

API关键技术——身份认证

阿泽🧸

11月月更 API安全

聊聊mybatis的反射之Invoker模块

周杰伦本人

11月月更

知乎好物推荐文能不能赚钱:如何撰写好物推荐文

石头IT视角

从React源码角度看useCallback,useMemo,useContext

goClient1992

React

C++学习---类型萃取---std::integral_constant

桑榆

C++ STL 11月月更

并发编程(一)并发编程的实现原理

想要飞的猪

synchronized volatile原理

Java反射(完)类加载和反射获取信息

浅辄

Java 反射 11月月更

【web 开发基础】PHP 自定义常规函数的声明及应用 (30)

迷彩

函数 PHP基础 11月月更 自定义函数 常规参数函数

什么是容器编排及编排的优点

穿过生命散发芬芳

容器编排 11月月更

2022-11-22:小美将要期中考试,有n道题,对于第i道题, 小美有pi的几率做对,获得ai的分值,还有(1-pi)的概率做错,得0分。 小美总分是每道题获得的分数。 小美不甘于此,决定突击复习,

福大大架构师每日一题

算法 rust 福大大

react源码分析:实现react时间分片

flyzz177

React

你可见过如此细致的延时任务详解

骑牛上青山

Java redis kafka 延时队列

一文搞懂Go1.18泛型新特性

海风极客

Go 11月月更

聊聊mybatis的反射之对象工厂

周杰伦本人

11月月更

从React源码来学hooks是不是更香呢

goClient1992

React

ERP 实施,甲方公司前期应该准备什么?

SAP虾客

【愚公系列】2022年11月 微信小程序-页面生命周期

愚公搬代码

11月月更

聊聊Mybatis的反射之ObjectWrapper

周杰伦本人

11月月更

性能测试知识科普(五):能力分层

老张

性能测试 岗位模型

CleanMyMac X2023苹果电脑系统清理维护软件

茶色酒

CleanMyMac X2023

聊聊如何让办公网络直连Kubernetes集群PodIP/ClusterIP/Service DNS等

大卡尔

#Kubernetes# 工程效能 11月月更

Dropbox 如何通过机器学习每年节省 170 万基础设施费用的?_文化 & 方法_Win Suen_InfoQ精选文章