现在,睡前刷刷新闻、视频已经成了大多数人的习惯,有人认为能够适当缓解压力、打发时间、有趣好玩, 甚至已经成为生活中“不可或缺”的部分。为何你们会以为有趣呢?这后面很大程度是“推荐系统”在起做用。推荐系统经常使用的一种推荐策略,就是根据用户的历史喜爱推荐新的内容,让用户喜欢看,从而增长用户粘性。python
推荐是如何实现的?git
目前在推荐系统领域,应用深度学习模型来实现推荐,能够取得很是好的效果,是将来的发展趋势。以一个新闻推荐的简单例子来看,用户访问APP时,会对推送的新闻条目点击(正样本)或是滑过不点击(负样本),这些点击行为信息、加上用户信息、新闻条目信息通过特征提取之后,能够获得用户特征和新闻特征之间的匹配度,匹配度越高说明用户对这条新闻越感兴趣。所以再推送新的新闻时,就能够从清单中选择匹配度最高的新闻推送给用户。github
下载安装命令
## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle
## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
看起来问题的处理不算复杂,但实现开发这样一套推荐系统,开发者会面临诸多问题:服务器
图:推荐系统的Workflow多线程
-
须要作繁杂的数据预处理:实际环境中数据集可能有成千上万个特征,但并不是每一个条目都有全部的特征,也并不是每一个特征都有必要参与训练,须要处理后才能参与训练;同时数据集的来源是原始的日志信息,还须要作必定的格式转换。架构
-
须要高速的数据集传输设计:推荐系统须要处理的日志数据很是庞大,单机或是本地文件系统很难做为日志数据的载体,须要有分布式的文件系统。并且在读取文件的过程当中,须要设计高效的机制提高数据读写效率和并发处理效率,多队列并发的IO组件尤其重要。并发
-
须要复杂的分布式计算架构:庞大的数据集须要强有力的分布式训练框架支持,而完成分布式计算的任务,开发者须要在繁杂的机器集群之间配置,既繁琐又容易出错 。框架
-
须要精细的模型加载和配送系统:对于推荐系统来讲,千万甚至亿级别的稀疏特征做为模型输入十分常见,稀疏参数的规模动辄超过单机内存,所以实现分布式稀疏参数查询,而且可以对海量稀疏参数作精确裁剪、分片,是必不可少的工做。异步
-
须要吞吐量高的客户端服务端交互:模型的部署上线难度取决于两个方面,第一个是模型的大小,过大的模型须要作分割,分割以后的稀疏参数须要有专属的高速KV服务器来索引;第二个是响应速度,客户端、服务端、稀疏参数索引之间的通讯应当尽量快速高效。分布式
以上每一个问题,对开发者来讲都是一座大山,闯过一个个关卡以后,才能打通整个推荐系统。好在打怪升级的道路上并不寂寞,百度飞桨近期发布了一套弹性计算推荐系统套件ElasticCTR,可实现端到端的推荐系统部署,为广大AI开发者又增添一套强劲的武器装备。接下来咱们就来了解一下ElastcCTR都有哪些武器装备。
ElasticCTR是什么?
ElasticCTR,即飞桨弹性计算推荐系统,是基于Kubernetes的企业级推荐系统开源解决方案。该方案融合了百度业务场景下持续打磨的高精度CTR模型、飞桨开源框架的大规模分布式训练能力、工业级稀疏参数弹性调度服务,帮助用户在Kubernetes环境中一键完成推荐系统部署,具有高性能、工业级部署、端到端体验的特色,而且做为开源套件,知足二次深度开发的需求。
ElasticCTR有哪些特点?
1. 端到端部署套件,免去繁琐的中间处理环节,助力推荐系统快速上线
推荐排序的workflow复杂而琐碎,开发者会面临不一样组件间难以整合的问题。例如:HDFS的分布式文件系统,难以被训练组件全内存多线程高效读取;训练组件产出模型后,因为模型中的稀疏参数体积过大,须要在部署模型时作分割处理;推理组件须要对体积过大的稀疏参数作分片存储处理,而且还需实现高效的远程调用。所以有一套端到端的方案实现一站式部署,对开发者来讲能够大大提高工做效率。
百度在推荐系统领域有多年的成熟经验,在这些经验的加持下,ElasticCTR打通了端到端的部署流程,用户只需配置好数据集,经过一个elastic_control.sh启动工具,便可用简单几行命令,启动高性能的分布式训练和在线预测服务PaddleServing等组件。中间的繁琐步骤、模型配送等流程都不须要额外操做。
图:ElasticCTR的Workflow示意
此外,在接下来几个月,ElasticCTR还将继续完善召回、向量检索等其余功能,也将整合更多的推荐模型,全方位的打造端到端推荐系统部署方案,帮助开发者快速上线推荐业务。
2. 弹性调度,全异步多线程分布式训练,训练吞吐量提高6倍
对于不一样规模的数据集和访问需求,ElasticCTR提供了资源弹性分配机制,在保证高效的同时尽量节省资源消耗。在实际生产环境下,一套分布式系统的搭建已经十分繁杂,更不用说在其基础上弹性的增减资源,而ElasticCTR就给出了这样的解决方案,为开发者排忧解难。依托Kubernetes的弹性分配能力,以及百度开源的各个组件对弹性调度的大力支持,用户在训练前配置训练的参数服务器和训练节点的数量等参数后,便可启动启动训练。
经验证,使用Criteo数据集训练CTR-DNN模型,训练吞吐量相比同类框架可提高6倍。事实上,Criteo数据集只是一个简单的例子,在实际应用中会有更大规模的稀疏参数,ElasticCTR的训练和部署优点会更加显著。
图:CTR-DNN模型训练效果对比
3. 流式训练,实现自动、分批、按时训练和配送模型
常见的深度学习训练方式中,一般是固定数据集进行多轮次迭代,可是在推荐系统中,因为日志数据的时效性,数据集需分时段加载,训练好的模型也需按时段配送。在实际生产环境中每每是分日期、分时段保存用户点击信息的日志,ElasticCTR支持流式训练方式,它的意义在于用户能够按照自定义的时段来训练模型,也能够监听存放数据集的HDFS上是否有增量的数据集参与训练,训练好的模型亦可定时增量配送。
在分布式文件系统上,按照必定的格式,例如yyyyMMdd/hh的格式将每一个时间段的数据集准备好,经过配置文件指定,就能够把对应时间段里的模型所有训练,而且按时配送。若是没有设定终止时间,就是在线训练,时刻等待新的数据集。
4. 工业级全组件开源,知足二次深度开发诉求
ElasticCTR采用全开源组件,知足开发者二次深度开发的需求。在数据读取和预处理环节,采用HDFS的存储,全内存多线程读取,打破数据传输的各类可能瓶颈;在训练环节,采用飞桨核心框架的分布式训练能力,全异步多线程分布式训练,训练速度可达到同类框架6倍之多;在部署环节,采用飞桨在线部署框架PaddleServing简单易用的部署服务,并结合百度推荐场景成熟应用多年的稀疏参数索引服务Cube,确保了超大规模模型的快速部署和高效服务;此外,为充分利用Kubernetes的弹性调度和资源分配机制以加强可用性,引入了Kubernetes的job管理框架Volcano。
如何用ElasticCTR
来搭建推荐系统?
接下来实战演练一下ElasticCTR。咱们以Criteo广告数据集为输入,采用ElasticCTR构建一个完整的推荐系统,实现广告的推荐。Criteo广告数据集一共有27个维度的稀疏参数,每一条样本均有一个label来表示用户是否点击了这条广告。
1 建立k8s集群
ElasticCTR是基于Kubernetes(即k8s)环境的,因此须要先建立k8s集群,这里推荐使用百度智能云容器引擎CCE,可参考文档百度智能云CCE容器引擎帮助文档-建立集群:
https://cloud.baidu.com/doc/CCE/s/zjxpoqohb
,其余云平台或是自建K8S集群亦可部署ElasticCTR。在准备好K8S集群以后,安装volcano,具体步骤可参考 :
https://volcano.sh/docs/getting-started/
2. 克隆ElasticCTR代码库
ElasticCTR已在github上开源:
git clone https://github.com/PaddlePaddle/ElasticCTR
用户能够在操做 K8S集群的开发机上下载代码库。
3. 准备数据集
部署一个HDFS集群,并在HDFS上存放好Criteo数据集。具体可参考HDFS配置教程。
4.执行训练
ElasticCTR经过工具elastic-control.sh配置训练参数和启动训练,只需5条命令,便可搞定训练和部署。
sh elastic-control.sh -r #训练参数配置 sh elastic-control.sh -a #执行训练 sh elastic-control.sh -l #查看训练进度 sh elastic-control.sh –c #下载客户端SDK python bin/elastic_ctr.py $IP 8010 conf/slot.conf data/ctr_prediction/data.txt #客户端预测
( 1 )配置训练参数:
a、在项目的elastic-ctr-cli文件夹下,配置data.config文件,指定数据集的来源。
上图可查看data.config的配置信息,包含HDFS的地址和路径,以及训练的起始时间(2019年12月2日0点)和终止时间(2019年12月2日0点,只训练一个小时的数据)。
b、执行以下命令,配置训练参数:
sh elastic-control.sh -r -u 4 -m 20 -t 2 -p 2 -b 2 -s slot.conf -f data.config
该命令表示在此次训练当中启动每一个节点4个CPU 20GB的内存,2个训练节点,2个参数服务器节点,2个稀疏参数索引服务节点,特征信息存放在slot.conf,HDFS地址和流式训练配置放在data.config。
( 2 )执行训练
sh elastic-control.sh -a
以上信息说明组件所有启动成功。
( 3 )查看训练进度
sh elastic-control.sh -l
咱们能够在上图看到训练结束,模型加载完成,此时就能够在客户端进行最后的验证了。
5.在线预测
下载客户端SDK,而后执行预测。
sh elastic-control.sh -c
python bin/elastic_ctr.py $IP 8010 conf/slot.conf data/ctr_prediction/data.txt
最终咱们能够看到对于data.txt里的每一条样本,模型都会给出预估结果和几率,来预测用户是否会点击此广告条目。
咱们在data.txt中存放了100条的数据,最终预测的AUC约为0.68。
百度的使命是用科技让复杂的世界变简单,而ElasticCTR的使命是让推荐系统的开发和使用变简单。咱们也将继续拥抱开源,博采众长,升级并完善ElasticCTR的各项功能,让推荐系统的工业应用更加便捷,开发者的工做更加容易。
更多ElasticCTR的应用方法,欢迎访问项目地址:
GitHub:
https://github.com/PaddlePaddle/ElasticCTR
Gitee: https://gitee.com/paddlepaddle/elasticctr
若是您加入官方QQ群,您将赶上大批志同道合的深度学习同窗。官方QQ群:703252161。
若是您想详细了解更多飞桨的相关内容,请参阅如下文档。
下载安装命令
## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle
## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
官网地址:https://www.paddlepaddle.org.cn
飞桨开源框架项目地址:
GitHub: https://github.com/PaddlePaddle/Paddle
Gitee: https://gitee.com/paddlepaddle/Paddle
>> 访问 PaddlePaddle 官网,了解更多相关内容。