专栏名称: AI前线
微信号:AI前线,ID:ai-front 运营
目录
相关文章推荐
爱可可-爱生活  ·  //@爱可可-爱生活:欢迎参与~-20250 ... ·  15 小时前  
爱可可-爱生活  ·  本文提出的MesaNet通过在每个时间步执行 ... ·  17 小时前  
AI前线  ·  小红书hi ... ·  昨天  
爱可可-爱生活  ·  【[33星]avataRL:从零开始用纯强化 ... ·  2 天前  
爱可可-爱生活  ·  【[65星]YuLan-OneSim:下一代 ... ·  2 天前  
51好读  ›  专栏  ›  AI前线

腾讯大规模分布式机器学习系统无量是如何进行技术选型的?

AI前线  · 掘金  · AI  · 2018-07-10 09:46

正文

请到「今天看啥」查看全文


1. 背景

QQ 浏览器首页的推荐 Feeds 流。业务入口如图所示:

图 1 QB Feeds 流业务

浏览器的 Feeds 业务每天的流点击曝光日志在百亿级;为了更好的给用户提供个性化的推荐服务,如果我们取半个月的数据来训练推荐模型的话,则我们会面对一个千亿样本的状况。

图 2 模型在线表现的时间衰减曲线

此外,对一个训练好的模型,我们观察了模型在线的指标变化,如图所示。这个图说明我们的 Feeds 流业务是一个时效性高度敏感的业务,在线用户访问的规律实时在变化,要取得最好的业务效果,我们必须不断及时的更新模型。浏览器另一个业务——识花君,需要用百万级图片预训练一个多分类的图片分类模型,如果采用单机单卡的模式,大约需要半个月才能训练一个收敛的模型;如果使用 TensorFlow 的分布式训练也大概需要一周,有没有更高效的方法呢?

针对这两个业务场景,接下来我们做一些技术分析,看看有没有一些解法。

场景 1:大数据 + 大模型

在可以低成本获得样本的场景,比如广告、Feeds 流的 ctr 预估场景,因为不需要标注我们就可以低成本的获取海量的正负样本,这就会促使我们设法从这海量的样本里学习足够的知识。

什么样的算法模型可以从海量数据里学习充分的信息呢?这里从 VC 维理论出发,我们知道一个模型可以容纳的信息是有限的;下图概括了样本数量、模型规模和模型效果之间的关系,这里我们用模型效果来侧面反映模型容纳的信息量是基于这样的假设:如果一个模型从同样规模的数据里学习到了更多的信息,那么我认为它在业务上会体现出更好的效果。这个假设当然还会有很细微的条件,但这里就不深究了。

图 3 模型信息和样本、模型规模的关系

从该图我们可以直观得出一个结论,对于可以轻易获取海量样本的场景,我们需要用足够大的模型去容纳其中的信息。为避免过于直观,这里我且举一个例子,以一个亿级 Feeds 流业务为例,如果每天用户点击超过一亿,那么单天用户的 pv 可能在 5-10 亿甚至更多;如果我们取半个月的数据来训练一个 CTR 预估模型,涉及到的样本量在 200 亿左右(不考虑向下负采样先),而如果我们的模型参数是样本的 10 倍的话(这个范围并不夸张),我们的模型参数数量在 2000 亿,每个参数用四字节表示,我们的模型将达到 1TB 左右;而如果我们用 double 精度则接近 2TB。

这个量级的模型如何训练?如何做在线 serving?2000 亿的原始样本如何存放?答案是唯一的:我们需要一个分布式系统。

场景 2:大数据 + 中小模型

这是另一种场景,以某图像分类业务为例,我们要将一个标注好的图像数据集通过模型分类到几千个类目上。数据集我假设 1000w 张图片;咋一看,似乎这个和大数据关系不大,才一千万而已,但注意这里是图片,如果我们把图片的每个像素作为一个样本来对待,这个数据就大了;为什么这么说?因为我们用 CNN 类的网络来训练的时候,图片本来就是以像素输入;是的,这里的大数据其实想表达的是对算力的要求。

如果我们在单机单卡(GPU)上来训练这个分类模型(以 resnet-101 为例),可能需要 2-3 周;真的是“洛阳亲友如相问,就说我在跑 training”。对于算法同学来说,如果我们要等一个模型结果需要 3 周,这显然是很让人沮丧的一件事。那么我们有没有机会把这个时间缩短到天甚至小时级别呢?答案也是一样的:我们需要一个分布式系统。

上面两个场景也许只是鹅厂众多业务场景中的一小部分,但我相信是有一定的代表性的。这里共同的答案是我们需要一个分布式系统来应对业务场景带来的工程挑战。从机器成本的角度,我们不太可能去定制能满足需求的单台机器来解决;从人力成本的角度出发,我们也不太可能容忍模型训练速度的超级低效;因此使用相对便宜的机器构建一个面向机器学习需求的分布式系统是我们唯一的选择。

2. 分布式机器学习的架构与物理设计

分布式机器学习系统,顾名思义,和分布式文件系统、分布式后台服务类似,是一个分布式系统(这似乎是废话);再结合机器学习就不一样了,这是一个面向机器学习场景的用相对便宜的机器组建的分布式系统(这还是废话)。那么和传统的分布式系统相比,分布式机器学习系统有哪些独有的特点呢?做这类系统的开发需要哪些算法知识和工程思维呢?







请到「今天看啥」查看全文