如今,睡前刷刷新闻、视频已经成了大多数人的习惯,有人认为可以适当缓解压力、打发时间、有趣好玩, 甚至已经成为生活中“不可或缺”的部分。

为什么大家会觉得有趣呢?这后面很大程度是“推荐系统”在起作用。推荐系统常用的一种推荐策略,就是根据用户的历史喜好推荐新的内容,让用户喜欢看,从而增加用户粘性。

 具体是如何实现推荐的?

目前在推荐系统领域,应用深度学习模型来实现推荐,可以取得非常好的效果,是未来的发展趋势。

以一个新闻推荐的简单例子来看,用户访问 APP 时,会对推送的新闻条目点击(正样本)或是滑过不点击(负样本),这些点击行为信息、加上用户信息、新闻条目信息经过特征提取以后,可以得到用户特征和新闻特征之间的匹配度,匹配度越高说明用户对这条新闻越感兴趣。

因此再推送新的新闻时,就可以从清单中选择匹配度最高的新闻推送给用户。

看起来问题的处理不算复杂,但实现开发这样一套推荐系统,开发者会面临诸多问题:

▲ 图:推荐系统的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 配置教程。

https://github.com/PaddlePaddle/ElasticCTR/blob/master/HDFS_TUTORIAL.md

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点,只训练一个小时的数据)。

执行如下命令,配置训练参数:

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。

如果您想详细了解更多飞桨的相关内容,请参阅以下文档。

官网地址:https://www.paddlepaddle.org.cn

飞桨开源框架项目地址:

GitHub:

https://github.com/PaddlePaddle/Paddle

Gitee:

https://gitee.com/paddlepaddle/Paddle

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

训练吞吐量提升6倍!飞桨弹性计算推荐系统套件ElasticCTR1.0发布相关推荐

  1. 飞桨助力OPPO上线3.5亿用户规模分布式推荐系统,训练效率提升8倍!

    随着技术的完善与门槛的降低,深度学习正在加大往各行业渗透落地的力度.5月20日,由深度学习技术及应用国家工程实验室与百度联合主办的"WAVE SUMMIT"2020深度学习开发者峰 ...

  2. 阿里公开自研AI集群细节:64个GPU,百万分类训练速度提升4倍

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :量子位 AI博士笔记系列推 ...

  3. 137% YOLOv3加速、10倍搜索性能提升!百度飞桨推出模型压缩神器

    深度学习模型压缩,又有利器问世. 最新消息,历经一年四个版本打磨之后,百度推出最新深度学习模型压缩工具PaddleSlim1.0. 不仅囊括了深度学习模型压缩中常用的量化.剪裁.蒸馏.模型结构搜索.模 ...

  4. 深度干货!如何将深度学习训练性能提升数倍?

    作者 | 车漾,阿里云高级技术专家 顾荣,南京大学副研究员 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 近些年,以深度学习为代表的人工智能技术 ...

  5. 【云原生AI】Fluid + JindoFS 助力微博海量小文件模型训练速度提升 18 倍

    简介: 深度学习平台在微博社交业务扮演着重要的角色.计算存储分离架构下,微博深度学习平台在数据访问与调度方面存在性能低效的问题.本文将介绍微博内部设计实现的一套全新的基于 Fluid(内含 Jindo ...

  6. alexnet训练多久收敛_如何将深度学习训练速度提升一百倍?PAISoar 来了

    阿里妹导读:得力于数据规模增长.神经网络结构的演进和计算能力的增强,深度学习的图像处理.语音识别等领域取得了飞速发展.随着训练数据规模和模型复杂度的不断增大,如何充分利用分布式集群的计算资源加快训练速 ...

  7. 阿里云助力完美日记半年内系统吞吐量提升50倍

    阿里云 Redis 直播地址 近年来,完美日记的"小黑钻口红""动物眼影盘"等爆款彩妆出现在了越来越多女孩子的化妆台上,完美日记(Perfect Diary)是 ...

  8. 如何将深度学习训练速度提升一百倍?PAISoar 来了

    阿里妹导读:得力于数据规模增长.神经网络结构的演进和计算能力的增强,深度学习的图像处理.语音识别等领域取得了飞速发展.随着训练数据规模和模型复杂度的不断增大,如何充分利用分布式集群的计算资源加快训练速 ...

  9. 【深度学习-数据加载优化-训练速度提升一倍】

    1,介绍 数据加载 深度学习的训练,简单的说就是将数据切分成batch,丢入模型中,并计算loss训练.其中比较重要的一环是数据打batch部分(数据加载部分). 训练时间优化: 深度学习训练往往需要 ...

最新文章

  1. “ px”,“ dip”,“ dp”和“ sp”有什么区别?
  2. 七牛云上传文件之表单上传文件
  3. 数据库事务系列-事务模型基础
  4. 2018年暑假第四次周赛-图论部分题解
  5. 检测raid类型和磁盘坏道脚本
  6. 【codevs1425】最小的N个和,如何像煞笔一样地写堆
  7. 防盗链python_python一行代码,实现网页视频下载
  8. SpringCloud工作笔记068---登录堡垒机_下载文件报错_Xshell向Linux上传下载文件_lrzsz_ZModem
  9. 天天打无人车是怎样一种体验?
  10. (转)http接口测试——Jmeter接口测试实例讲解
  11. (转)JAVA泛型通配符T,E,K,V区别,T以及Class,Class的区别
  12. 【贪心算法】POJ-2376 区间问题
  13. 青岛科技大学C语言程序设计,青岛科技大学c语言试题库
  14. php 修改文件所有者,PHP 改变文件的所有者
  15. 2018ISMAR Comparing Different Augmented Reality Support Applications for Cooperative Repair...
  16. MathType编辑器安装(写公式)
  17. 频谱泄漏 matlab,频谱泄漏与窗函数.ppt
  18. 80端口封了怎么办,利用80端口映射解决
  19. 线程池,是时候做个了结了!
  20. 八股文写春联会是什么样子?

热门文章

  1. Android中的HTTP请求
  2. 服务降级和服务熔断的区别_Spring Cloud 熔断 隔离 服务降级
  3. python(五)模块
  4. Oracle_Rac_BackgroudProcess
  5. Vue之旅-Vue环境搭建
  6. Datatable Initialization - 使用objects数据源初始化
  7. postgresql 排序索引
  8. Java之关于面向对象
  9. leetcode 之Median of Two Sorted Arrays(五)
  10. python中readlines,在Python中连续两次使用readlines