0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用ElasticDL和社区Keras模型库实现大量小众预估场景

Tensorflowers 来源:TensorFlow 作者:TensorFlow 2020-11-19 09:21 次阅读

在互联网行业里有很多需要利用深度学习模型预估点击率的场景,比如广告系统、推荐系统,和搜索引擎。有些重要的场景背后是很大的用户流量,体验了重要的商业价值,所以有数十人甚至数百人的团队在不断优化预估效能。这些团队为了优化自己负责的场景甚至专门研发深度学习工具链。

同时,大量小众的预估场景对应着不小的流量,但是无法配置专门的团队,更不可能开发专门的工具。这类场景因为数量众多,所以总体商业价值毫不弱于上述主流场景,甚至符合长尾分布的 20/80 比例 —— 其总体商业价值数倍于主流场景。

在我们研发和推广 ElasticDL 的过程里,接触到了很多负责此类小众场景的用户们。比如蚂蚁集团的各种大促活动,以及饿了么和菜鸟等业务的营销推荐活动。这些业务场景中,通常是一个算法工程师需要负责多个场景的建模。这就带来一个重要需求 —— 提供一套通用工具以提高大量小众预估场景下算法工程师的建模效率。另外,小众场景里的训练数据可不小 —— 本文梳理的场景都需要分布式训练。

之前的文章《ElasticDL:同时提升集群利用率和研发效率的分布式深度学习框架》里我们介绍过 ElasticDL 通过 Kubernetes-native 的弹性调度能力,提升机群资源利用率到 >90%。同时,作为一个 Keras 模型的分布式训练系统,ElasticDL 只需要用户提供模型定义,不需要用户定义训练循环 (training loop),更不需要用户开发分布式训练循环。实际上,由于 TensorFlow 社区贡献了很多 Keras 模型,比如 tf.keras.applications 里有很多 CV 领域的模型,DeepCTR 库里有很多 CTR 预估相关的模型,用户可以直接使用的。所以实际上 ElasticDL 在小众场景中的使用可以完全不需要用户 coding。这样的易用性在推广过程中得到了用户的好评。

tf.keras.applications
https://tensorflow.google.cn/api_docs/python/tf/keras/applications?hl=zh-cn

DeepCTR
https://github.com/shenweichen/DeepCTR

基于 no-code 的特点,ElasticDL 团队的主力工程师王勤龙为蚂蚁的可视化建模平台 PAI 增加了 ElasticDL 组件,使得大量用户可以通过在 Web 页面里拖拽和配置组件的方式实现 AI 训练。此文基于蚂蚁、饿了么、和飞猪的同事们的反馈梳理,为大家解释 TensorFlow 社区累积的 Keras 模型对中小 AI 场景的价值,以及如何经由 ElasticDL 实现这些价值。

小众预估场景对模型研发效率的期待

小众预估场景具有如下特点:

应用周期短,可能是应用在某个短时间的大促营销活动。所以算法工程师也需要在短时间内能完成预估模型的开发。

业务场景复杂多样,比如商品推荐的点击预估、营销活动的目标人群预估、优惠券的核销预估等,一个算法工程有可能会同时负责不同场景的预估建模,不同场景所使用的特征和模型可能区别很大,所说提高小众场景的预估模型的开发效率十分重要。

样本数据量大。虽然是小众场景,但是在大数据时代,公司都会积累了很多历史样本数据。训练的数据越多,有助于提升预估模型精度。所以在分布式集群上加速预估模型的训练对生产应用十分重要。

小众预估场景的这些特点不仅需要提高建模效率,也给集群管理系统带来了挑战。由于此类场景数量众多,在集群上给每个场景单独划分资源是不切合实际的。同时小众场景的训练作业时多时少,给其调度资源时既要考虑是否满足训练任务的需求,也要考虑集群资源利用率。前者决定了用户的模型训练效率,后者决定了公司成本。

使用 Keras 提高预估模型编程效率

使用 ElasticDL 来做分布式训练,用户主要需要使用 Keras API 来定义一个 Keras Model,如下所示:

import tensorflow as tf def forward(): inputs = tf.keras.layers.Input(shape=(4, 1), name="input") x = tf.keras.layers.Flatten()(inputs) outputs = tf.keras.layers.Dense(3, name="output")(x) return tf.keras.Model(inputs=inputs, outputs=outputs, name="simple-model")

深度学习预估模型一般包含两个部分:

样本特征预处理定义。将原始特征数据转换成适合深度学习使用的数据,比如标准化、分箱等变换。

深度学习网络结构定义。定义网络结构来拟合数据分布,提供模型预估精度。

在特征预处理上,TensorFlow 在其最新版本中提供了很多 preprocessing layers 来方便用户做特征预处理。使用这些 preprocessing layer,用户可以很方便地将特征预处理计算逻辑与模型网络结构结合在一起构造一个完整的 Keras 模型。

preprocessing layers
https://keras.io/api/layers/preprocessing_layers/

但是很多预估场景的特征数量很大,可能涉及用户属性、商品属性、地理位置等特征。对每个特征都手动编程定义预处理逻辑,也是件繁琐的事。同时特征预处理定义还需要一些样本特征的统计信息来保证特征变换的准确性,比如标准化操作需要特征的均值和标准差,分箱需要特征值的分布信息来确定分箱边界。在阿里巴巴集团,大多数预估场景的数据都是以结构化表形式存储在阿里云的 MaxCompute 中。针对此类数据,我们结合 MaxCompute 的大数据计算能力开发了自动生成预处理 Layer 功能。用户只需要选择使用的特征列,就可以自动完成特征统计并根据统计结果生成预处理的 Layer,用户只需关心模型的深度学习网络结构的定义。

在预估模型的网络结构定义上,DeepCTR模型库提供了很多前沿的 CTR 预估模型。用户可以很方便地调用这些模型来构造自己的预估模型。针对常用的 CTR 深度学习预估模型,我们在蚂蚁集团的 PAI 平台上封装了一个 ElasticDL-DeepCTR 组件,该组件能根据数据集自动生成特征预处理逻辑,并预置了 Wide&Deep、DeepFM、xDeepFM等算法,用户只需配置参数即可进行分布式模型训练。

弹性调度提升训练效率

小众预估场景所使用的样本数量一般也很大,几百万到几千万条不等,单机训练很慢满足模型的训练效率,往往需要在分布式集群上来加速模型训练。因为小众预估场景的数量多,单独给每个场景划分资源训练模型无疑会大幅增加集群管理员的工作。但是资源划分少会影响训练速度,划分过多则可能造成资源浪费。所以通常的做法是,这些小众预估场景的模型训练共享一个资源池。但是共享一个资源池很难同时兼顾用户体验和集群资源利用率。小众预估场景的模型训练作业往往时多时少。作业少的时候,资源池空闲造成资源浪费;作业多的时候,后面提交的任务需要排队等待。

ElasticDL 的弹性训练则能很好地解决了这个问题。通常一个 Kubernetes 集群上的资源是多个租户共用的,这些租户可能运行着各种不同的计算任务,比如在线服务任务、数据计算任务等。为了保证不同租户的 Service-Level Objective (SLO),集群管理者会给各租户分配资源配额。每个租户有高优先级使用自己的资源配额来执行计算任务,如果配置内的资源有空闲,其他租户则能用低优先级使用该租户配额里空闲的资源。如果使用过程中,原有租户计算任务增加,则其他租户需要归还使用的资源。由于集群中不同租户的使用峰值和低谷一般是错开的,所以集群中经常存在空闲资源。模型训练的租户使用 ElasticDL 则能以低优先级方式借调其他组租户的空闲资源来训练模型。就算训练过程中 ElasticDL 作业的 worker 被原有租户抢占了,训练作业不会终止失败。ElasticDL 会在集群里寻找其他租户的空闲资源来启动新的 worker,并将新 worker 加入训练作业。

在蚂蚁集团,几十个租户同时使用一个 Kubernetes 集群,我们在集群上只划分了很少的资源来启动 ElasticDL 作业的 master 和 PS 进程,而资源需求大且数量多的 worker 进程则全部使用低优先级的资源来运行。这样只要集群有空闲资源,训练作业就能快速开始,从而提升了这些小众预估模型的训练效率,也同时提升了集群资源利用率。

应用案例

以下我们简述几个阿里经济体内使用 ElasticDL 提升模型研发效能的小众场景。

蚂蚁财富的理财活动推荐

支付宝 818 金选理财节活动,新发基金策略(用于某债基带货)和黄金雨活动策略(用于促活跃)需要使用 CTR 预估来提升活动效果。该场景积累了几百万样本数据,且样本中包含用户属性、理财产品属性等很多特征。使用 ElasticDL 预估方案,非常方便地将 DeepFM 使用到了此次活动中。相比之前使用的规则策略,活动期间,页面的点击率有明显提升。

饿了么补贴投放预估

饿了么 C 端补贴(天降红包/高温补贴券包项目)是通过对用户发放红包以撬动用户下单的目的进行发放的,因此在不同门槛/面额组合下对用户核销/下单概率的预估是将平台收益最大化(ROI 最大化)的必要条件。类似逻辑同样适用在 B 端补贴上(百亿补贴项目),只不过 B 端补贴需要叠加用户对门店属性的适应/偏好/LBS限制/物流限制等更复杂的情况。ElasticDL 提供的 CTR 预估方案非常简单易用,训练的 xDeepFM 模型上线后效果很好。为后续的核销率拟合/ROI 优化提供了坚实有力的基础。

小结

针对 Keras 模型,ElasticDL 利用 TensorFlow 的 Eager execution 在 Kubernetes 上实现了弹性分布式训练,让用户只需提供 Keras 模型定义就可以提交分布式训练作业。同时由于 TensorFlow 社区拥有丰富的 Keras 模型库,用户可以做到 no-code 就能完成一个预估模型的应用。

由于 ElasticDL 在阿里经济体内部的展示的应用价值,ElasticDL 的另一位主力工程师齐俊在配合阿里云团队,争取尽快让阿里经济体之外的用户可以在阿里云上使用 ElasticDL。这项对接工作结束之后,我们再为大家带来更新。

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    2704

    浏览量

    47692
  • 大数据
    +关注

    关注

    64

    文章

    8652

    浏览量

    136600
  • 深度学习
    +关注

    关注

    73

    文章

    5239

    浏览量

    119913

原文标题:案例分享 | No-Code AI:用 ElasticDL 和社区 Keras 模型库实现大量小众预估场景

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    cube AI导入Keras模型出错怎么解决?

    我尝试过cube AI的version7.1.0、6.0.0、5.1.2、4.1.0,导入Keras都是这个报错,求解答 E010(InvalidModelError): Couldn&
    发表于 03-18 06:39

    全志V851s做了一个魔法棒,使用Keras训练手势识别模型控制一切电子设备

    功能是如何做到的。 1、软件构成 使用Keras训练手势识别模型,转为 TFlite 模型。 再通过谷歌提供的 TFlite C API 运行模型。 2、代码仓库 代码仓库顺序如下:
    发表于 02-04 10:44

    基于TensorFlow和Keras的图像识别

    TensorFlow和Keras最常见的用途之一是图像识别/分类。通过本文,您将了解如何使用Keras达到这一目的。定义如果您不了解图像识别的基本概念,将很难完全理解本文的内容。因此在正文开始之前
    的头像 发表于 01-13 08:27 382次阅读
    基于TensorFlow和<b class='flag-5'>Keras</b>的图像识别

    DeepSpark 开源社区百大应用开放平台23.09版本正式发布

    ,甄选上百个与行业应用深度耦合的开源算法和模型,支持主流生态应用框架,并针对行业需求构建多维度评测体系,广泛支持各类落地场景。 本次(23.09版本)主要在DeepSparkHub百大模型库中添加了30个基于不同深度学习框架的算
    的头像 发表于 10-11 16:00 282次阅读
    DeepSpark 开源<b class='flag-5'>社区</b>百大应用开放平台23.09版本正式发布

    OpenVINO场景文字检测与文字识别教程

    OpenVINO是英特尔推出的深度学习模型部署框架,当前最新版本是OpenVINO2023版本。OpenVINO2023自带各种常见视觉任务支持的预训练模型库Model Zoo,其中支持场景文字检测
    的头像 发表于 09-24 15:31 733次阅读
    OpenVINO<b class='flag-5'>场景</b>文字检测与文字识别教程

    keras可视化介绍

    keras可视化可以帮助我们直观的查看所搭建的模型拓扑结构,以及模型的训练的过程,方便我们优化模型模型可视化又分为
    发表于 08-18 07:53

    Keras搭建神经网络的一般步骤

    1 keras是什么? Keras 是一个 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。 Keras
    发表于 08-18 07:35

    TFllite模型的格式简介

    简单来说:所谓模型就是一个滤波器,训练的权重就是滤波系数,输入经过滤波器后得到一个输出。所以嵌入式AI部署一般就是解析模型得到“滤波系数”,输入信号进行一系列类似"滤波&
    发表于 08-18 07:01

    keras内置的7个常用的优化器介绍

    编译模型时需要如下两个参数: 一个“损失函数”(loss function),用来衡量网络的预测有多好。 一个“优化器”(optimizer),可以告诉网络如何改变其权重。 keras内置了7个
    发表于 08-18 06:32

    keras常用的损失函数Losses与评价函数Metrics介绍

    不同:损失函数用于训练过程,而评价函数用于模型训练完成后(或每一批次训练完成后)的度量,所以这里放到一个篇幅里介绍。 1 损失函数Losses 1.1keras提供的损失函数 keras提供的损失
    发表于 08-18 06:31

    如何利用keras打包制作mnist数据集

    ~/.keras/datasets目录存放mnist.npz 数据集,这是一个numpy格式的压缩文件,所以可以numpy打开。 import numpy as np file_path = "
    发表于 08-18 06:12

    keras顺序模型与函数式模型

    keras提供两种搭建模型的方式: 1. 顺序模型(也可看做是函数式模型的一种特殊情况) 2. 函数式模型 两种方式优点缺点顺序
    发表于 08-18 06:01

    Arm性能模型库发布说明产品修订版

    ARM®性能模型库是一个包,其中包含支持的ARM性能模型,用于动态建模和模拟已配置的ARM IP的性能。 您可以根据模型的性能数据调整您的IP配置,从而提高SoC设计中IP的性能。 不同版本的ARM
    发表于 08-11 06:20

    MBD的Simulink使用技巧:详解代码生成中的模型与代码(2)

    上一篇文章中提到,生成嵌入式代码,必须选择定步长求解器。实际中,生成嵌入式代码几乎不会使用Simulink模型库中的连续模型,往往需要通过最简单的离散模块来实现算法模型
    的头像 发表于 07-13 15:13 2981次阅读
    MBD的Simulink使用技巧:详解代码生成中的<b class='flag-5'>模型</b>与代码(2)

    ​DeepSpark 开源社区百大应用开放平台23.06版本正式发布

    ,甄选上百个与行业应用深度耦合的开源算法和模型,支持主流生态应用框架,并针对行业需求构建多维度评测体系,广泛支持各类落地场景。 本次(23.06版本)主要在DeepSparkHub百大模型库中添加了30个基于PyTorch框架的
    的头像 发表于 07-11 23:05 381次阅读
    ​DeepSpark 开源<b class='flag-5'>社区</b>百大应用开放平台23.06版本正式发布