Wide & Deep的OneFlow网络训练

HugeCTR是英伟达提供的一种高效的GPU框架,专为点击率(CTR)估计训练而设计。

OneFlow对标HugeCTR搭建了Wide & Deep 学习网络(WDL)。OneFlow-WDL网络实现了模型并行与稀疏更新,在8卡12G TitanV的服务器上实现支持超过4亿的词表大小,而且性能没有损失与小词表性能相当。

本文介绍如何使用OneFlow-WDL网络进行训练,以及一些训练结果及分析。

环境和准备

运行OneFlow-WDL需要有安装好OneFlow的python环境,并安装了scikit-learn

软件要求

  • python 3.x(推荐)
  • OneFlow 0.x
  • scikit-learn

数据准备

准备了一个小的样本数据集,可以下载进行简单测试。

或者参考《使用Spark创建WDL数据集》中的步骤,从CriteoLabs官网下载原始数据集并制作成OneFlow所需要的OFRecord格式的数据集。

OneFlow-WDL脚本

OneFlow-WDL脚本只有一个文件wdl_train_eval.py,请从这里下载。

运行OneFlow-WDL脚本

EMBD_SIZE=1603616

DATA_ROOT=/path/to/wdl/ofrecord

python3 wdl_train_eval.py \

--train_data_dir $DATA_ROOT/train \

--train_data_part_num 256 \

--train_part_name_suffix_length=5 \

--eval_data_dir $DATA_ROOT/val \

--eval_data_part_num 256 \

--max_iter=300000 \

--loss_print_every_n_iter=1000 \

--eval_interval=1000 \

--batch_size=16384 \

--wide_vocab_size=$EMBD_SIZE \

--deep_vocab_size=$EMBD_SIZE \

--gpu_num 1

通常配置好数据集的位置DATA_ROOT后,上面的shell脚本就可以被执行了,如果屏幕上能够输出下面类似的结果,就表示已经正确运行。

1000 time 2020-07-08 00:28:08.066281 loss 0.503295350909233

1000 eval_loss 0.4846755236387253 eval_auc 0.7616240146992771

2000 time 2020-07-08 00:28:11.613961 loss 0.48661992555856703

2000 eval_loss 0.4816856697201729 eval_auc 0.765256583562705

3000 time 2020-07-08 00:28:15.149135 loss 0.48245503094792364

3000 eval_loss 0.47835959643125536 eval_auc 0.7715609382514008

4000 time 2020-07-08 00:28:18.686327 loss 0.47975033831596375

4000 eval_loss 0.47925308644771575 eval_auc 0.7781267916810946

测试结果及说明

在一台有8块12G显存的TitanV的服务器上对OneFlow-WDL进行了一组测试,并使用HugeCTR提供的docker容器做了同样参数的测试。

多GPU性能测试

主要测试目的是在batch size = 16384的情况下,测量不同GPU数量处理每个批次的平均时延(latency)。 测试配置了7个1024神经单元的隐藏层。

结果如下图:

同时记录了,测试时实际最大占用显存的大小,结果如下图:

综合上面结果表明,1卡到8卡,OneFlow-WDL在占用较少的显存的情况下,速度要比HugeCTR快。

batch size=16384每卡,多卡性能测试

主要测试目的是在保证每GPU卡处理16384batch size情况下,使用1至8GPU卡进行训练每个批次的平均时延(latency)。 测试配置了7个1024神经单元的隐藏层。

结果如下图:

同时记录了,测试时实际最大占用显存的大小,结果如下图:

综合上面结果表明,随着卡数的增加,时延增加,OneFlow-WDL在占用较少的显存的情况下,速度要比HugeCTR快;因为每卡保证16384 batch size,OneFlow每卡占用的内存并无显著变化。

单GPU卡不同batch size性能测试

主要测试目的是在一个GPU卡情况下,测量不同batch size每个批次的平均时延(latency)。 测试配置了2个1024神经单元的隐藏层。

结果如下图:

超大词表测试

OneFlow-WDL中配置了两个Embedding Table: - wide_embedding 大小是vocab_size x 1 - deep_embedding 大小是vocab_size x 16

HugeCTR中词表大小(vocab_size)是1603616。从3200000开始测起,一直到支持4亿的词表大小,结果如下图:

上面的图中,蓝色柱子是批次训练的平均时延(latency),红色曲线代表GPU显存的占用。

结论:随着词表大小的增大,内存随之增大,但latency没有明显的变化。

收敛性测试1

选取了batch size=512进行了收敛性能的测试。

下面这张图是,前500步的结果,每一步训练都在验证集中选取20条记录进行验证,图中的曲线分别是loss和AUC:

结论:AUC迅速就增长到超过了0.75。

收敛性测试2

和收敛性测试1同样的情况,这一次是每训练1000步打印训练loss的平均值,然后选取20条验证集数据进行验证,一共训练30万步,结果如下:

结论与分析: 1. 蓝色的train loss曲线有明显向下的台阶,因为整个训练集有36674623条数据,batch_size=512的情况下,大概71630步就过了整个数据集(一个epoch),30万步就把训练数据集用了4次多,蓝色曲线的台阶印证了这些。OneFlow在训练过程中支持数据的打乱,每当数据集被完整的用完一遍之后,数据会被重新打乱,减少过拟合。 2. 橙色的曲线是验证集loss,在前两个epoch的时候基本保持下降的趋势,从第三个epoch开始,loss开始有上升的趋势,表明已经过拟合了。 3. 灰色是验证集的AUC,AUC也是在第二个epoch的时候达到了峰值,超过了0.8,后面几个epoch就开始下降。

Wide & Deep的OneFlow网络训练的更多相关文章

  1. 【RS】Wide & Deep Learning for Recommender Systems - 广泛和深度学习的推荐系统

    [论文标题]Wide & Deep Learning for Recommender Systems (DLRS'16) [论文作者] Heng-Tze Cheng, Levent Koc, ...

  2. 深度排序模型概述(一)Wide&Deep/xDeepFM

    本文记录几个在广告和推荐里面rank阶段常用的模型.广告领域机器学习问题的输入其实很大程度了影响了模型的选择,因为输入一般维度非常高,稀疏,同时包含连续性特征和离散型特征.模型即使到现在DeepFM类 ...

  3. 深度学习在美团点评推荐平台排序中的应用&& wide&&deep推荐系统模型--学习笔记

    写在前面:据说下周就要xxxxxxxx, 吓得本宝宝赶紧找些广告的东西看看 gbdt+lr的模型之前是知道怎么搞的,dnn+lr的模型也是知道的,但是都没有试验过 深度学习在美团点评推荐平台排序中的运 ...

  4. Wide & Deep Learning Model

    Generalized linear models with nonlinear feature transformations (特征工程 + 线性模型) are widely used for l ...

  5. wide&deep模型演化

    推荐系统模型演化 LR-->GBDT+LR FM-->FFM-->GBDT+FM|FFM FTRL-->GBDT+FTRL Wide&DeepModel (Deep l ...

  6. 巨经典论文!推荐系统经典模型Wide & Deep

    今天我们剖析的也是推荐领域的经典论文,叫做Wide & Deep Learning for Recommender Systems.它发表于2016年,作者是Google App Store的 ...

  7. Deep Learning 学习随记(五)Deep network 深度网络

    这一个多周忙别的事去了,忙完了,接着看讲义~ 这章讲的是深度网络(Deep Network).前面讲了自学习网络,通过稀疏自编码和一个logistic回归或者softmax回归连接,显然是3层的.而这 ...

  8. Caffe-python interface 学习|网络训练、部署、測试

    继续python接口的学习.剩下还有solver.deploy文件的生成和模型的測试. 网络训练 solver文件生成 事实上我认为用python生成solver并不如直接写个配置文件,它不像net配 ...

  9. 推荐系统系列(六):Wide&Deep理论与实践

    背景 在CTR预估任务中,线性模型仍占有半壁江山.利用手工构造的交叉组合特征来使线性模型具有"记忆性",使模型记住共现频率较高的特征组合,往往也能达到一个不错的baseline,且 ...

随机推荐

  1. 【ShardingSphere】ShardingSphere学习(三)-数据分片-分片

    分片键 分片算法 分片策略 SQL Hint 分片键 用于分片的数据库字段,是将数据库(表)水平拆分的关键字段.例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段. SQL中如果无分片字段, ...

  2. wire shark 抓包过滤器

    http.request.method==GET vuin= 抓取QQ信息 数据链路层: 筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad ...

  3. CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现

    漏洞背景:来自Wallarm的安全研究员Andrew Danau在9月14-16号举办的Real World CTF中,意外的向服务器发送%0a(换行符)时,服务器返回异常信息.由此发现了这个0day ...

  4. R3抹掉加载的DLL

    R3抹掉加载的DLL 原理类似于获取Kernel32.dll加载地址,知道这个东西也是在看获取Kernel32.dll地址的时候在网上搜索学习资料,无意中看到的这个东西.这个挺有用,结合着HiJack ...

  5. pr加字幕

    选择免费字体 自由字体整理了免费的商用字体 安装字体 将下载好的.ttf文件,右键选择为所有用户安装 如果没有选择为所有用户安装,你在Arctime或者premiere中可能无法找到这个字体 而且想要 ...

  6. Asp.NetCore Web开发之会话技术

    这节讲一下会话技术,首先了解一下什么是会话,会话是指浏览器打开到关闭的过程中,多次与服务器发送接收数据的过程. 由于HTTP是无状态协议,一次请求响应过后,产生的数据就随之释放了,可是在某些情况下,我 ...

  7. FFmpeg应用实践之命令查询

    0. 前言 FFmpeg 中常用的工具有三个,分别是多媒体编解码工具ffmpeg.多媒体内容分析工具ffprobe和多媒体播放器ffplay.本文介绍的指令都是与编解码工具 ffmpeg 相关的. 学 ...

  8. VS·.Net WCF多项目调试方法

    阅文时长 | 0.12分钟 字数统计 | 252.8字符 主要内容 | 1.引言&背景 2.声明与参考资料 『VS·.Net WCF多项目调试方法』 编写人 | SCscHero 编写时间 | ...

  9. 如何设计一个高性能 Elasticsearch mapping

    目录 前言 mapping mapping 能做什么 Dynamic mapping dynamic=true dynamic=runtime dynamic=false dynamic=strict ...

  10. golang:TCP总结

    在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程."IP地址+端口号"就对应一个socket.欲建立连接的两个进程各自有一个 ...