阿里云pai-deeprecctr模型性能优化天池大赛——获奖队伍技术分享

author author     2023-03-21     284

关键词:

阿里云联合英特尔举办的“创新大师杯”全球AI极客挑战赛——PAI-DeepRec CTR模型性能优化挑战赛已结束 ,此次大赛旨在DeepRec中沉淀CTR模型新的优化思路和优化方向。为了和大家共享经验成果,邀请获奖队伍分享解题思路,共同推动实际工业实际场景中点击率预估模型的训练效率的提升。

大家好,我们是MetaSpore团队,三位成员孙凯、苏程成、朱亚东均来自北京数元灵科技有限公司,其中苏程成就读于西安交大,曾为数元灵科技实习生。

今年7月中旬,阿里云联合 Intel 启动了“创新大师杯”全球AI极客挑战赛——PAI-DeepRec CTR模型性能优化,全球一共有超过3800支队伍报名参加比赛。经过近 5 个月的努力,我们在保障 6 个经典的 CTR 模型AUC 基本不损失的前提下,将训练效率提升了 3 倍以上,减少了接近 70% 的训练时间。团队在全球初赛和全球复赛都获得了排名第一的成绩,本文将就比赛中的整体思路和具体方案进行阐述。

解题思路

首先必须承认,这是一道比较难的题目。因为 DeepRec 已经集成了来自 Alibaba、Intel、Google等众多优秀工程师的智慧,在这个基础上再进行性能优化,不得不说是一个非常具有挑战性的问题。经过长时间的迭代,团队优化思路如下图所示,主要可以概括为一下 3 个方面:

阿里云PAI-DeepRec

  1. CTR稀疏模型训练优化:6个模型均为经典的 CTR 稀疏模型,在特征处理、算子等方面可能具有一定的优化空间。
  2. DeepRec训练加速参数调优:DeepRec 本身已经具有有来自 Alibaba 和 Intel 团队的很多优秀的技术沉淀,对模型训练有很多参数都可以进行调优。
  3. DeepRec框架性能优化:这个方面我们觉得可能在编译选项、优化器等方面有一定的空间,以便更好的发挥硬件潜能。

稀疏模型训练优化

  1. 选择更快的 GRUCell

对于DIEN模型,我们注意到其使用了GRU,而GRU是串行执行,必然会耗费大量时间,因此我们先把矛头对准了GRU。

阶段一:DIEN使用的是tf.nn.rnn_cell.GRUCell接口,在查阅 tensorflow 官方文档时我们注意到tf.contrib.rnn.GRUBlockCellV2能够有更好的性能。

阿里云PAI-DeepRec

因此我们将 tensorflow 中的tf.nn.rnn_cell.GRUCell改为了 tf.contrib.rnn.GRUBlockCellV2。tf.nn.rnn_cell.GRUCell是使用 python写的 GRU,因此其反向传播需要计算图层层传递。而tf.contrib.rnn.GRUBlockCellV2用 C++ 编写的,并且实现了 forward 和 backward,因此速度会相对快一点。

阶段二:在 GRU 的优化获得初步收益之后,我们在想能否有替代 GRU的网络结构。之后我们调研了替换 GRU 的方法,发现 SRU 可以在不损失 AUC 的情况下加快模型的训练,相比原始版本速度提升约80s。SRU 论文链接:

​https://arxiv.org/pdf/1709.02755.pdf​

阿里云PAI-DeepRec

为什么 SRU 会比较快呢?我们来看GRU与SRU的实现公式:

阿里云PAI-DeepRec

相比于GRU,SRU 对时序依赖更弱一些,SRU有 3 个步骤依赖于前面的状态,并且依赖 C(t-1) 的操作使用的是 Hadamard 积,计算量更小;论文最后还通过消融实验发现,与C(t-1)相关的 2 个操作可以省略,因此代码实现中并没有粉色部分。


阶段三(未采用):既然 GRU 能改成 SRU,那 SRU 能否继续优化呢,我们带着这个疑问开始尝试优化SRU,最终我们得到了一个保持 AUC 不变的简化版 SRU,其速度又能够提升 50s 左右。由于并没有严格的理论分析,最终我们并未把这个版本提交上去,不过在代码记录了这个版本。


  1. 优化稀疏特征表示

在查看DeepFM 模型的 Timeline 图(下图所示),我们发现其中有大量的 OneHot 算子异常耗时。

阿里云PAI-DeepRec

我们注意到官方文档中描述embedding_column 速度会更快,而且更适合高维稀疏的类别特征,于是我们将Indicator_column替换为了embedding_column。

阿里云PAI-DeepRec

对比结果如下:

阿里云PAI-DeepRec

训练加速参数调优

开启流水线在阅读 DeepRec 文档时,我们注意到了 AutoMicroBatch,它的本质是一个模型训练的流水线,多个MicroBatch 对梯度进行累加后更新至 variable,DeepRec 文档中给出的实测效果下图所示。

阿里云PAI-DeepRec

我们首先对这五个模型开启 micro_batch 进行了实验,发现Wide & Deep 模型不能使。我们首先对这五个模型开启micro_batch 进行了实验,发现Wide & Deep 模型不能使用 micro_batch,其使用的tf.feature_column.linear_model 接口与 micro_batch 冲突,导致运行crash,如下左图示。因此我们将 Wide & Deep 模型使用的 tf.feature_column.linear_model 进行了重写,如下右图所示。

阿里云PAI-DeepRec

经过了以上的准备,我们开启了micro_batch 的性能优化。1. 我们最初对所有模型都设置了相同的 micro_batch_num,经过我们实验,当micro_batch_num = 2时,所有模型都可达到 AUC 要求,相对原始版本速度可以提升900s左右。2. 当 micro_batch_num 再大一点,DIEN 模型的 AUC 会低于赛题标准,其他几个模型AUC基本没有变化。因此,我们对DIEN 模型进行了特殊处理,也就是给它单独设置一个 micro_batch_num ,最终经过我们实验,我们给DIEN模型 micro_batch_num 设置为 2,其他几个模型采用默认值 8。对比结果如下:

阿里云PAI-DeepRec

底层框架性能调优

  1. 优化编译选项

在DeepRec比赛教程中给出的编译选项如下

bazel build  -c opt --cnotallow=opt  --cnotallow=mkl_threadpool --define build_with_mkl_dnn_v1_notallow=true

该编译选项使用了针对intel处理器进行优化的 mkl_threadpool。tensorflow有很多可配置的编译选项,不同的编译选项会编译出不同性能的框架,经过我们尝试,在本次比赛中,经过优化编译选项,相较原始版本速度提升130s左右。

编译选项如下:

bazel build -c opt --cnotallow=opt //tensorflow/tools/pip_package:build_pip_package

对比结果如下:

阿里云PAI-DeepRec

2. 其他底层优化选项

下面是我们对于其他底层优化的想法与探索:

  1. 使用微软开源的 mimalloc 作为内存分配器可以进一步优化性能,实测可以节省 4% 的时间,但由于时间关系我们并未打包提交。
  2. MKL 库有比较多算子可供使用,可以针对不同的算子选择性地调用 MKL,这一方向也由于时间的关系没有来得及完成。

总结

在 DeepCTR 比赛中,我们从稀疏模型、训练加速调优、底层框架调优等 3 个方面出发,主要做了以上 5 点的优化,其中 GRU 算子和稀疏特征的优化灵感来自于团队之前在 MetaSpore 的开发中的技术沉淀。决赛阶段遇到了各路好手,很多问题的切入点独到而新颖,非常有启发性,值得我们学习和借鉴。

最后,将以上所有优化点进行叠加,我们得到如下总运行时间对比图,可以清晰的看到,经过我们的优化,模型训练效率得到 3 倍以上提升,训练时间减少了 70%。

阿里云PAI-DeepRec

注:以上测试都是在我们本地机器(8核16G)上进行的测试,因此与线上成绩有一定差异。

Github 链接:

​https://github.com/meta-soul/DeepRec/tree/tianchi​

DeepRec开源地址:

​https://github.com/alibaba/DeepRec​

本地没有环境跑深度学习模型?阿里云天池实验室它不香吗(代码片段)

...配置也可以满足我的需求训练模型的需求。这个平台就是阿里云天池实验室。二、阿里天池实验室进 查看详情

阿里云天池赛题解析——深度学习篇重磅发布!

深度学习伴随着大数据与云计算技术的崛起而快速发展起来,并在计算机视觉、语音等感知领域迅速取得成功。相对于传统机器学习,深度学习的算法设计更加灵活,可以显著提升针对感知类问题的效果。随着算力及... 查看详情

天池nlp大赛来了!

 Datawhale赛事 主办方:阿里云天池、问天引擎“阿里灵杰”问天引擎电商搜索算法赛已在阿里云天池平台拉开帷幕。本次比赛由阿里巴巴集团智能引擎事业部主办,阿里云天池平台承办,诚邀社会各界开发者共同探... 查看详情

阿里云弹性人工智能v1.2

此篇文章介绍了阿里巴巴云内容推荐场景的推荐技术体系结构,以及在阿里巴巴云中大型分布式GPUVM节点上的性能优化工作和结果。阿里团队需要在一小时内训练大约200亿个样品。该模型具有较高的通信计算比,采用Tensorflow实现... 查看详情

阿里云天池算法挑战赛零基础入门nlp-新闻文本分类-day2-数据读取与数据分析(代码片段)

 一、赛题解析【阿里云天池算法挑战赛】零基础入门NLP-新闻文本分类-Day1-赛题理解_202xxx的博客-CSDN博客二、数据读取下载完成数据后推荐使用anaconda,python3.8进行数据读取与模型训练首先安装需要用到的模块包:pip版本... 查看详情

redis学习---阿里云redis多线程性能增强版详解

【原文】https://www.toutiao.com/i6594620107123589635/摘要Redis做为高性能的K-V数据库,由于其高性能,丰富的数据结构支持,易用等特性,而得到广泛的应用。但是由于redis单进程单线程的模型限制,单RedisServerQPS最高只能达到10万级别。... 查看详情

全球视频云创新挑战赛落幕阿里云天池推出科研数据集平台

7月10日,“Imagine”——2021阿里云视频云全景创新峰会暨全球视频云创新挑战赛决赛颁奖典礼在北京正式举行。本届峰会云集众多业内大咖,以全景化的创新视角,共同在时代、商业、社会、生态的探讨中,深入... 查看详情

阿里云天池赛题解析深度学习篇重磅发布!(代码片段)

...哈喽,各位小伙伴。今天联合博文视点为大家送5本《阿里云天池大赛赛题解析——深度学习篇》。参与方式:在本文评论中谈谈你对竞赛、深度学习的学习体会,留言最走心&&对大家最有帮助的5名读者(由小编... 查看详情

阿里云天池赛题解析深度学习篇重磅发布!(代码片段)

...哈喽,各位小伙伴。今天联合博文视点为大家送5本《阿里云天池大赛赛题解析——深度学习篇》。参与方式:在本文评论中谈谈你对竞赛、深度学习的学习体会,留言最走心&&对大家最有帮助的5名读者(由小编... 查看详情

天池风控算法大赛来了!

 Datawhale赛事 主办方:阿里云、intel、ApacheFlink第三届ApacheFlink极客挑战赛暨AAIGCUP已在阿里云天池平台拉开帷幕。大赛由阿里云联手英特尔、ApacheFlink社区、阿里巴巴人工智能治理与可持续发展实验室(AAIG)、Occlum共同发起。继... 查看详情

深入云原生ai:基于alluxio数据缓存的大规模深度学习训练性能优化(代码片段)

作者|车漾(阿里云高级技术专家)、顾荣(南京大学副研究员)导读:Alluxio项目诞生于UCBerkeleyAMP实验室,自开源以来经过7年的不断开发迭代,支撑大数据处理场景的数据统一管理和高效缓存功能日趋成熟。然而,随着云原生... 查看详情

深入云原生ai:基于alluxio数据缓存的大规模深度学习训练性能优化(代码片段)

作者|车漾(阿里云高级技术专家)、顾荣(南京大学副研究员)导读:Alluxio项目诞生于UCBerkeleyAMP实验室,自开源以来经过7年的不断开发迭代,支撑大数据处理场景的数据统一管理和高效缓存功能日趋成熟。然而,随着云原生... 查看详情

天池供应链大赛来了!

 Datawhale赛事 主办方:阿里巴巴集团2021阿里云供应链大赛在阿里云天池正式拉开序幕。阿里云具有制造业和互联网的多重属性,提供了一种可随时自助获取、可弹性伸缩、成本保障的云资源服务,而这种弹性能力也... 查看详情

深入云原生ai:基于alluxio数据缓存的大规模深度学习训练性能优化(代码片段)

作者|车漾(阿里云高级技术专家)、顾荣(南京大学副研究员)导读:Alluxio项目诞生于UCBerkeleyAMP实验室,自开源以来经过7年的不断开发迭代,支撑大数据处理场景的数据统一管理和高效缓存功能日趋成熟。然而,随着云原生... 查看详情

深入云原生ai:基于alluxio数据缓存的大规模深度学习训练性能优化(代码片段)

作者|车漾(阿里云高级技术专家)、顾荣(南京大学副研究员)导读:Alluxio项目诞生于UCBerkeleyAMP实验室,自开源以来经过7年的不断开发迭代,支撑大数据处理场景的数据统一管理和高效缓存功能日趋成熟。然而,随着云原生... 查看详情

阿里天池比赛心得

    最近时间都忙于参加阿里天池的全国社会保险大数据应用创新大赛,终于结束,最终全国排名第7,总共是1336只队伍参加,还是很激动进了前10,今天想把一些体悟写一下,希望对后来参加的人有用。这个比赛... 查看详情

阿里云天池学习赛汇总(教学赛,零基础入门,长期赛)

...二期-ImageNet图像分类对抗攻击快来一起挖掘幸福感!阿里云安全恶意程序检测工业蒸汽量预测天池新人实战赛o2o优惠券使用预测天猫复购预测之挑战Baseline新浪微博互动预测-挑战Baseline资金流入流出预测-挑战Baseline淘宝穿衣... 查看详情

阿里云启动天池电力ai大赛是怎么回事?

4月26日,云栖大会·南京峰会召开。本次会议上,阿里云天池平台联合扬中高新区政府、大航集团,启动电力AI大赛------大航杯“智造扬中”电力AI大赛。“用电之痛”是全国千万用电及售电企业的大难题。据了解,仅2016年全社... 查看详情