每年节省170万美元的文档预览费用,借助机器学习的DropBox有多强?
【CSDN 编者按】Dropbox 借助机器学习的预测功能,每年能为公司节省了一百多七十多万美元的基础架构成本。非常了不起的成就。本文,一起来看一看 Dropbox 采用机器学习的经过,以及分析一下其中的利弊。
译者 | 弯月 责编 | 张文
出品 | CSDN(ID:CSDNnews)
最近,Dropbox 优化了生成和缓存文档预览的方式,并借助机器学习的预测能力,每年为公司节省了 170 万美元的基础架构成本。Dropbox 的一些常用功能都采用了机器学习,例如搜索、文件与文件夹提示以及文档扫描 OCR。虽然用户看不到 Dropbox 采用的机器学习,但这些应用程序仍以其他方式推动了业务的发展。
在本文中,我们就来看一看 Dropbox 采用机器学习的经过,以及其中的利弊。
预览功能
用户可以利用 Dropbox 的预览功能直接查看文件,而无需下载内容。除了常见的缩略图预览之外,Dropbox 还提供交互式预览界面,可供用户共享文件和共同编辑文件,包括添加批注和标记其他用户。
我们的内部系统 Riviera 负责安全地生成文件预览,它可以处理数百种支持的文件类型的预览。它可以将各种内容转换操作链接在一起,创建适合特定文件类型的预览。例如,Riviera 可以将 PDF 文档的某一页栅格化,在 Dropbox 的 Web 界面中显示高分辨率的预览。完整内容的预览功能支持批注和共享之类的交互。大型图片可以转换成缩略图,以供在各种情况中显示给用户,包括搜索结果或文件浏览器。
在 Dropbox 的规模下,Riviera 每天需要处理数十 PB 的数据。为了加快某些类别的大型文件的预览,Riviera 会提前生成预览,并缓存预览结果(此过程称为预热)。由于我们支持的文件量非常巨大,因此预热消耗的 CPU 与存储也非常可观。
图:浏览文件时的缩略图预览。预览可以被放大,
并作为应用程序文件的代理与用户交互。
我们看到采用机器学习可以降低这些成本,因为有些预生成的内容从不会有人查看。如果我们可以有效地预测某个预览是否会被使用,则只需预热我们确信一定会被查看的文件,从而节省计算和存储空间。我们的这个项目名叫 Cannes(戛纳),这个名字的灵感来自法国戛纳电影节。
机器学习的利弊权衡
在预览的优化过程中,机器学习的两项折衷决定了我们的指导原则。
第一个挑战是权衡机器学习为基础设施带来的成本效益。减少预热的文件可以节省成本,无人不喜欢,但也有可能漏掉一些文件,造成不良的用户体验。如果缓存中没有相应的文件预览,则 Riviera 需要动态地生成预览,而在这期间用户只能等待。我们与预览团队合作开发出了一种预防措施,防止用户体验降级,并通过这种预防措施来调整模型,以合理的方式节省费用。
另一个需要权衡的是复杂性和模型的性能 vs. 可解释性和部署的成本。通常,你需要权衡机器学习的复杂性与可解释性:通常模型越复杂,预测就越准确,但代价是可解释性会降低,你很难解释为何得出了这样的预测,而且部署的复杂性可能也会增加。在第一次迭代中,我们的目标是尽快提供可解释的机器学习解决方案。
由于 Cannes 是在现有系统内新构建的机器学习应用程序,因此我们偏向于使用一种比较简单且可以解释的模型,这样我们就可以在研究更复杂的模型之前,集中精力建立模型、指标以及报告。如果出现问题,或 Riviera 出现意外行为,机器学习团队也能够进行调试,并了解是 Cannes 的原因还是其他问题。我们的解决方案必须相对简单且成本低廉,因为我们每天都需要部署将近 5 亿个请求。目前的系统只能预热所有的可预览文件,因此任何改进都可以节省成本,而且越快越好!
Cannes v1
考虑到这些权衡之后,我们选择了一个简单、易于训练且易于解释的模型。第一版的模型是一个梯度提升分类器,训练时采用了文件扩展名、存储了文件的 Dropbox 账号类型,以及该账号最近 30 天的活动等作为输入特征。在离线预留数据上训练时,我们发现该模型经过预热后,预测的预览准确率可以在最多 60 天内超过 70%。该模型拒绝了预留数据中大约 40%的预热请求,并且性能在我们为自己设定的预防指标以内。假阴性的数量很少,假阴性指的是我们预测不会被查看、但最终在接下来的 60 天内被查看的文件,一旦出现这种情况,我们就需要动态生成预览。我们估算了一下成本:“拒绝百分比”- 假阴性,结果发现每年可以节省 170 万美元。
在探索预览优化之前,我们想确保节省的成本能够超过构建机器学习解决方案的成本。我们大致估算了一下 Cannes 项目可以节省的成本。在大型分布式系统中设计和部署机器学习系统,你需要考虑系统的变化随着时间的推移对你的估计产生的影响。我们希望初始的模型尽量简单,这样一来即使相邻系统发生一些很小的变化,成本的影响也不会出现数量级的变化。通过分析训练好的模型,可以让我们更好地了解第一版实际可以节省的成本,并确认这项投资是值得的。
我们利用内部的功能开关服务 Stormcrow,在 Dropbox 流量 1%的随机样本上,针对模型进行了 A / B 测试。我们验证了模型的准确率和预热“节省”的成本符合我们离线分析的结果,这是个好消息!由于 Cannes v1 不再预热所有符合条件的文件,因此我们知道预计缓存命中率会下降。在实验期间,我们观察到缓存命中率比 A / B 测试中的对照组低了几个百分点。尽管百分比下降了,但总体的预览延迟基本上保持不变。
我们非常关心尾延迟(第 90 个百分位数以上的请求延迟),因为缓存未命中会导致尾延迟过高,进而严重地影响用户的预览功能。然而,我们并没有观察到预览尾延迟或总体延迟明显上升,这很让人欣慰。这次实时测试让我们信心大增,我们决定将 v1 模型部署到更多 Dropbox 流量。
大规模的实时预测
我们需要一种方法,当某个文件进入预热路径时,实时地告诉Riviera该文件是否需要预热。为了解决这个问题,我们将 Cannes 构建成了预测流水线,负责提取与文件相关的信号,并将其发送给模型,供模型预测未来使用预览的可能性。
图:Cannes的架构
从Rivieraprewarm path(预热路径)接收文件 ID。Riviera 会收集所有可进行预热的文件 ID。(Riviera可以预览 Dropbox 存储的大约 98%的文件。只有很少一部分文件的文件类型不支持,或无法预览。)Riviera 发送一条预测请求,其中包含需要预测文件 ID 以及文件类型。
获取实时信号。为了收集预测期间文件的最新活动信号,我们使用了一个名为“Suggest Backend”(建议后台)的内部服务。该服务会验证预测请求,然后查询与该文件相关的信号。信号存储在 Edgestore(Dropbox 主要的元数据存储系统)或 User Profile Service(RocksDB 数据存储,负责聚合Dropbox 活动信号)中。
将信号编码为特征向量。收集到的信号会被发送到 Predict Service(预测服务),由该服务将信号编码为表示文件所有相关信息的特征向量,然后将这个向量发送给模型进行评估。
生成预测。模型使用特征向量,返回该文件可能会被预览的概率。接着,这个预测结果会被发送回 Riviera,并由 Riviera 预热未来 60 天内可能会被预览的文件。
记录请求的相关信息。SuggestBackend(建议后台)会记录下特征向量、预测结果和请求状态,这些都是调查性能下降和延迟问题的关键信息。
其他考虑事项
减少预测延迟很重要,因为上述管道位于 Riviera 预热功能的关键路径上。例如,当将这个模型扩展到 25%的流量时,我们观察到了一些极端的情况,导致建议后台的可用性降低到了内部 SLA 以下。
经过分析后,我们发现上述第 3 步出现了超时的问题。因此,我们改进了特征编码处理,并优化了预测路径上的几个问题,降低了这些极端情况下的尾延迟。
优化机器学习
在推出机器学习模型的过程期间(及其之后),我们非常注重稳定性,并确保不会对预览界面的用户体验产生负面影响。多个层面的监视和警报是部署机器学习的关键组成部分。
Cannesv1 的指标
预测服务基础设施的指标:共享系统有自己内部的 SLA,主要都是围绕正常运行时间和可用性。我们依靠 Grafana 等现成的工具进行实时监控和发送警报。我们监控的指标包括:
建议后台与预测的可用性。
用户个人资料服务的数据新鲜度。
预览指标:我们有一些预览性能方面的关键指标,即预览延迟分布。我们保留了3%的存档数据,用于比较使用 Cannes 与不使用 Cannes 两种情况下的预览指标,以防止模型漂移或可能会降低模型性能的系统变化。Grafana 是一款应用程序级指标的通用解决方案。主要指标包括:
预览延迟分布(使用 Cannes 与不使用 Cannes),需要特别注意第 90 个百分比以上的延迟。
缓存命中率(使用 Cannes 与不使用 Cannes):缓存命中总数/预览内容的总请求数量。
模型性能指标:我们为机器学习团队使用的 Cannes v1 的模型建立了指标,并建立了自己的流水线来计算这些指标。我们关心的指标包括:
混淆矩阵,尤其需要注意假阴性率的变化。
ROC 曲线下的面积:虽然我们直接监视了混淆矩阵的统计信息,但我们也希望计算 AUROC,以便将来比较模型的性能。
上述模型性能指标每小时计算一次,并存储在 Hive 中。我们使用 Superset 来可视化重要的指标,并创建了一个 Cannes 的实时变化仪表板。Superset 是在各项指标的基础之上构建的,如果底层模型行为发生变化,它会赶在客户受到影响之前主动通知我们。
然而,仅凭监视和警报不足以确保系统健康,明确责任并建立上报问题的流程也是必要的。例如,我们记录了机器学习系统的上游依赖项,因为它们可能影响到模型的结果。此外,我们还创建了一个手册,详细介绍了解决问题的步骤,帮助值班的工程师判断问题来自 Cannes 内部还是其他的其他部分,并提供了在根本原因是机器学习模型的情况下,上报问题的流程。机器学习团队与非机器学习团队之间的紧密合作有助于确保 Cannes 的平稳运行。
目前的状况与未来的探索
目前 Cannes 已部署到几乎所有的 Dropbox 流量中了。结果,我们每年 170 万美元的前期成本变成了如今每年 9,000 美元的机器学习基础设施(主要用于建议后台和预测服务的流量增加)。
对于该项目的下一个迭代,我们有许多期待的探索方面。如今 Cannes 已投入生产,我们可以尝试更为复杂的模型类型。我们还可以根据更详细的内部费用和使用情况数据,为模型开发更细致的成本函数。
我们还讨论过新建一个预览应用程序,通过机器学习更细致地控制预测决策,而不是针对每个文件进行预热/不预热的二元分类。我们可以通过具有预见性来发挥更大的创造力,降低成本,同时又不会破坏用户的文件预览体验。
我们希望将 Cannes 项目积累的经验和工具推广到 Dropbox 的其他基础设施。利用机器学习优化基础设施是一个振奋人心的投资领域。
参考链接:
https://dropbox.tech/machine-learning/cannes--how-ml-saves-us--1-7m-a-year-on-document-previews
更多精彩推荐
☞Python 分析热卖年货,今年春节大家都在送啥?☞爬了20W+条猫咪交易数据,它不愧是人类团宠☞英超引入 AI 球探,寻找下一个足球巨星
☞三年投 1000 亿,达摩院何以仗剑走天涯?☞2021年浅谈多任务学习
点分享点收藏点点赞点在看
相关文章:

asp.net 对xml文件的读写,添加,修改,删除操作
asp.net 对xml文件的读写,添加,修改,删除操作 下面有代码调试正确 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using…

阿里重金投数梦工场 布局PaaS动了谁的奶酪
就目前云计算市场来看,巨头的争夺表面上还在IaaS激战,但实际上他们对PaaS也在默默布局。6月8日,PaaS相关服务商数梦工场宣布完成光大实业资本、阿里巴巴等公司共同投资的7.5亿元A轮融资。值得注意的是,阿里巴巴是几位投资方中唯一…

ASP.net中太长的数据缩略显示
问题:用<%# DataBinder.Eval(Container.DataItem,"NewsID")%>显示数据的,如果标题太长了怎么规定字数,多余的用"..."代替解决方法: 1.使用后台代码解决: cs文件代码:…
再见 for 循环!pandas 提速 315 倍~
for是所有编程语言的基础语法,初学者为了快速实现功能,依懒性较强。但如果从运算时间性能上考虑可能不是特别好的选择。本次东哥介绍几个常见的提速方法,一个比一个快,了解pandas本质,才能知道如何提速。下面是一个例子…

UVa 374 - Big Mod
题目大意:计算R BP mod M,根据模运算的性质计算。 正常计算会超时,可以用分治的思想降低时间复杂度。不过如果遇到00,结果...话说00的结果是1吗?忘了都... 1 #include <cstdio>2 3 int powMod(int base, int ex…

微软在慕尼黑设立欧洲首个物联网实验室
北京时间3月30日晚间消息,微软今日在慕尼黑设立了其在欧洲的首个物联网实验室。在此之前,微软已经在雷德蒙(Redmond)总部和中国深圳设立了物联网实验室。 慕尼黑是德国许多知名大企业的故乡,如宝马和西门子等。在此之前,思科和IBM…

linux的strace命令
linux的strace命令 strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。 下面记录几个常用 option . …
明年,我要用 AI 给全村写对联
作者 | 神经小兮来源 | HyperAI超神经春节已经过完,你是否还沉浸在年味里?到腊月二十九、三十,家家户户贴上了 红红的春联,春节就正式拉开了序幕。春联也称为「对联」、「门对」、「楹联」,是汉语所独有的一种艺术形式…

C++实现int与string之间的相互转换
2019独角兽企业重金招聘Python工程师标准>>> c 利用stringstream实现int与string类型的相互转换,记录在此,以备后用 #include<iostream> #include<sstream> #include<string>using namespace std;string add_int(const st…

逆变器的技术创新 让光伏电站更具发展前景
曾几何时,光伏发电因为光照强度和温度的变化,逆变器输出功率波动大,对电网产生冲击,而被称为垃圾电而受到限制。随着技术的进步,光伏逆变器完善了多种保护功能,增加了低(零)电压穿越…

8个免费实用的C++GUI库
C标准中并没有包含GUI,这也使得C开发图形化界面需要依赖于第三方的库。实际上,图形界面恰恰是C的强项,小到平常使用的各类桌面软件,大到魔兽世界这样的游戏,都是C擅长的地方。C之所以能做到这一点,原因在于…

.Net2.0 使用ConfigurationManager读写配置文件
.net1.1中如果需要灵活的操作和读写配置文件并不是十分方便,一般都会在项目中封装一个配置文件管理类来进行读写操作。而在.net2.0中使用ConfigurationManager 和WebConfigurationManager 类可以很好的管理配置文件,ConfigurationManager类在System.Conf…
举个例子,如何用GCN图卷积神经网络实现摔倒监测?
作者 | 李秋键责编 | 寇雪芹头图 | 下载于视觉中国引言近几年来深度学习的发展越来越火热,其中最为典型的就是半监督学习的新研究进展GCN。由Kipf和Welling提出的GCN被证明是一种有效的图半监督学习框架应用,如社会、医疗、商业和交通网络分析࿰…

数据中心节能大法 —— 尽在上海11月中国数据中心展
根据调研机构451Research的预测,全球数据中心托管市场2018年的市场规模将达到332亿美元。据悉,2015年我国数据中心节能改造规模已达30亿元左右,数据中心节能市场的空间是非常大的,在未来有望达到85亿元的市场空间。 根据调研机构4…

古怪的ConfigurationManager类
开始使用VS 2005,习惯性的使用ConfigurationSettings类来读取应用程序配置文件的信息时,却被编译器提示说:警告 1 “System.Configuration.ConfigurationSettings.AppSettings”已过时:“This method is obsolete, it has been replaced by …

最常用的css选择器及兼容性 +几个好用却不多见的 nth-child等
你也许已经掌握了id、class、后台选择器这些基本的css选择器。但这远远不是css的全部。下面向大家系统的解析css中30个最常用的选择器,包括我们最头痛的浏览器兼容性问题。掌握了它们,才能真正领略css的巨大灵活性。 1. * * { margin: 0; paddin…
对比四种爬虫定位元素方法,你更爱哪个?
作者 | 陈熹来源 | 早起Python头图 | 下载于视觉中国在使用Python本爬虫采集数据时,一个很重要的操作就是如何从请求到的网页中提取数据,而正确定位想要的数据又是第一步操作。本文将对比几种 Python 爬虫中比较常用的定位网页元素的方式供大家学习&…

2017年安全漏洞审查报告:安全补丁在不断增加,用户却不安装
软件漏洞难修复吗?年度FLexera漏洞审查报告显示,全部安全漏洞当中有81%已经拥有与之匹配的修复补丁,但多数常见软件项目的补丁安装率却相当低下。 作为一家面向应用程序开发商与企业客户的软件安全漏洞管理解决方案厂商,Flexera S…

Visual SourceSafe简明培训教程
名称Visual SourceSafe简明培训教程(Visual SourceSafe Training Short Course) 作者晨光(Morning) 简介对于采用Visual SourceSafe 6.0作为版本控制工具的项目及产品开发,本教程针对不同用户角色,提供有关该软件的若干使用指导…

水母智能联合蚂蚁森林、犀牛智造等,用AI助力非遗出圈,39万人开工得“福”
如今过年越来越有年味了,许多淡出已久的中国传统年俗,以更有趣、更年轻新潮、更科技的方式回到了大家身边。集五福、写福字、贴福字,挂福饰品,当然还有接“福袋”!人工智能实现智能设计已经相当成熟,已有微…

绿色信托任重道远 应建立补偿机制?
作为绿色金融的分支之一,绿色信托面临的状况不如绿色信贷、绿色债券,整体规模尚小,且监管方面的鼓励措施未有明确,甚至连概念都尚未统一。 日前,北京大学法学院非营利组织法研究中心与中航信托联合发布《2016年绿色信托…

解读C#正则表达式
多少年来,许多的编程语言和工具都包含对正则表达式的支持,.NET基础类库中包含有一个名字空间和一系列可以充分发挥规则表达式威力的类,而且它们也都与未来的Perl 5中的规则表达式兼容。 此外,regexp类还能够完成一些其他的功能&am…

wpa_supplicant学习
2019独角兽企业重金招聘Python工程师标准>>> interface gtk makefile wrapper buffer methods 目录(?)[-] 本来以为这个东西只有在Atheros的平台上用的突然发现Ralink的平台也可以用甚至还看到还有老美把这个东西往android上移植看来是个好东西学习一下 官方…
一张图,看编程语言十年热度变化
作者 | 叶庭云来源 | 修炼Python头图 | 下载于视觉中国什么是 TIOBE 排行榜TIOBE 排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube 统计出排名数据&…

小扎的野心不止做社交 市政厅的上线说明了这一点
一个月前,扎克伯格刚在一封6千字长信里宣布了自己要做一个全球社区的理想,日前Facebook就上线了个叫“市政厅”的政务服务功能。 美国的用户在“市政厅”的功能页填写完自己的地理位置信息之后,可以看到当地政府官员的名单,包括美…

C#调用存储过程简单完整例子
CREATE PROC P_TEST Name VARCHAR(20), Rowcount INT OUTPUT AS BEGINSELECT * FROM T_Customer WHERE NAMENameSET RowcountROWCOUNT END GO ---------------------------------------------------------------------------------------- --存储过程调用如下: -------------…
高手的习惯:pythonic风格代码
来源 | Python大数据分析责编 | 寇雪芹头图 | 下载于视觉中国什么是pythonicpythonic是开发者们在写python代码过程中总结的编程习惯,崇尚优雅、明确、简单。就好比中文的笔画,讲究先后顺序,最符合文字书写的习惯。因为是习惯,不是…

计算机天才Aaron Swartz 名作 《如何提高效率》——纪念真正的“hacker!
如何提高效率 《HOWTO: Be more productive》(如何提高效率)作者:Aaron Swartz 肯定有人跟你说过这样的话,“你有看电视的那么长时间,都可以用来写一本书了”。不可否认写书肯定比看电视更好的利用了时间,但…

python的web压力测试工具-pylot安装使用
pylot是python编写的一款web压力测试工具。使用比较简单。而且测试结果相对稳定。 这里不得不鄙视一下apache 的ab测试,那结果真是让人蛋疼,同样的url,测试结果飘忽不定,看得人心惊肉跳,摸不着头脑。 下载 pylot官网&a…
快过HugeCTR:用OneFlow轻松实现大型推荐系统引擎
Wide & Deep Learning Wide & Deep Learning (以下简称 WDL)是解决点击率预估(CTR Prediction)问题比较重要的模型。WDL 在训练时,也面临着点击率预估领域存在的两个挑战:巨大的词表(Em…