京东广告算法架构体系建设--大规模稀疏场景高性能训练方案演变

news2024/11/16 15:40:36

一、前言

京东广告训练框架随着广告算法业务发展的特点也在快速迭代升级,回顾近几年大致经历了两次大版本的方案架构演变。第一阶段,随着2016年Tensorflow训练框架的开源,业界开始基于Tensorflow开源框架训练更复杂的模型。模型对特征规模和参数规模需求不断提升,大规模稀疏模型具有更强的表征能力,逐渐成为算法的主流趋势。但是Tensorflow在大规模稀疏参数的训练机制不完备,因此第一次最大能力升级是通过自研高性能参数服务器,支持超大规模TB级稀疏参数模型的建模能力以及基于此架构支持在线学习的能力。 第二阶段,随着用户行为序列建模、多模态建模、多目标等算法技术的发展,模型变得既宽且深,计算算力、通信性能和存储容量逐渐成为瓶颈。基于之前的方案虽然有可能通过扩大训练集群规模满足训练需求,但是在节点拓扑的复杂度、参数通信性能、集群稳定性和模型效果等多个方面都存在较大的问题。随着更先进的NVIDIA A100 等训练GPU硬件资源的出现,基于高性能GPU算力构建的新一代软硬深度结合的训练方案成为第二次架构演变的主要方向。接下来,本文将针对大规模稀疏场景,结合模型的发展趋势,详细介绍各阶段的训练方案。

二、持续演进的大规模稀疏场景训练方案

2.1 基于分布式参数服务器的TB级大规模稀疏场景训练方案

2.1.1 Tensorflow在大规模稀疏场景的局限性

随着业务规模和算法能力不断发展,训练样本规模扩展到百亿级,训练参数规模达到千亿级,为了提高模型训练效率和规模,业界通常采用数据并行和模型并行方式来进行分布式训练。由于Tensorflow采用静态Embedding机制来存储稀疏参数,限制了参数规模,对训练的效率和效果并不友好:

静态存储局限性:词表空间过小,hash冲突加剧;词表空间过大,浪费内存资源,难以支持大规模参数存储。

在线学习不支持:针对在线学习场景,无法淘汰不重要的特征,也无法单独释放该特征Embedding的内存,参数更新时效性成为瓶颈。

2.1.2 自研高性能参数服务器

为了解决静态Embedding的问题,我们通过自研动态Embedding的高性能参数服务器,将不同的Embedding映射到不同的内存空间,优化存储空间,支持大规模稀疏参数的高效存储,并考虑高并发读写场景,针对稀疏参数设计高性能二级检索方案,优化数据结构,减少并发读写冲突。

图1 动态Embedding参数服务器&训练架构

参数二级检索

▪一级参数分片,支撑分布式千亿甚至更大规模参数存储。

▪二级参数分桶,并行无锁读写,支撑数据并行模式下的高并发读写场景。

稀疏参数存储&训练

▪基于Map实现稀疏参数存储,支撑动态Embedding、增量导出等复杂功能。

▪稀疏参数延迟初始化,支撑特征准入&淘汰等复杂策略。

▪参数&优化器状态同构存储,支撑复杂优化算法(带一二阶动量)的高性能实现。

离&在线一体化设计

▪通用化服务接口&模型参数格式,一套核心框架服务离&在线场景,支持在线学习。

图2 动态Embedding高性能参数服务器实现设计

在2020年底广告实现了高性能参数服务器架构,2021年初在搜索广告场景构建了离在线一体实时在线学习闭环系统。性能方面,支持千亿参数规模,提升算法建模空间,对比TF原生PS训练性能提升25%,对比阿里DeepRec和腾讯TFRA,内存节省约15%至20%。效果方面,在搜索精排模型场景落地京东零售首个OnlineLearning架构,模型时效性从天级提高到分钟级。

2.2 基于高性能算力的全GPU训练方案

2.2.1 分布式参数服务器方案的局限性

为了精细刻画用户的行为,捕捉用户的兴趣变化,推荐系统模型进入到更深层次的序列化、多模态建模。推荐领域模型建模逐渐发展到以一定规模Transformer结构结合大规模Embedding为主,抽象结构则是中等规模稠密参数 + 大规模稀疏参数,对模型训练架构的存储、计算、IO等方面都提出了更高的要求。虽然可以通过更大的参数服务器规模 + 更大的数据并行规模来提升整体训练集群吞吐,但该方案存在一定局限性:

▪参数服务器规模仅能满足大规模Embedding稀疏模型,但是针对Transformer等稠密模型无法分片,会导致模型训练性能&效果显著下降;

▪训练节点规模急剧扩大到上百,导致通信拓扑复杂,训练稳定性下降,梯度过期问题加剧;

▪大量参数IO使得参数服务器与训练节点之间的参数传输成为通信性能瓶颈。

图3 分布式参数服务器存在的问题

随着Nvidia推出新一代NVIDIA A100 80GB SXM GPU服务器,伴随NvLink、IB网络等GPU-RDMA硬件加持,相较P40,在存储容量(显存640GB、内存1~2TB、SSD10+TB级别)、通信性能 (由PCIe总线提供的32GB/s升级到NVLink卡间互联的600GB/s的高速带宽,多机之间通过IB网络采用RDMA进行通信,通信带宽相比于TCP而言,从1G/s 提升到50G/s)以及计算能力(从12TFLOPS升级到156 TFLOPS) 都有质的突破。更高算力的硬件资源为模型迭代和优化带来了更大的机遇,同时也给训练架构设计带来了更大的挑战,基于高性能GPU算力构建的新一代软硬深度结合的训练方案成为第二次架构演变的主要方向。

2.2.2 基于高性能算力的全GPU训练方案

如何把分布式训练中上百个节点的复杂拓扑结构,融入到高算力GPU的一体化方案中,实现千亿甚至更大规模参数在GPU上的高性能计算,在业界是一个比较有挑战的问题,在新一代训练架构的落地实践中我们主要面临三个核心挑战:

▪存储挑战:不同于传统NLP、CV几十G模型规模,推荐领域大规模稀疏模型通常在几百G以上,远超单显卡80G显存上限,需要设计一种新的参数存储和计算策略;

▪IO挑战:大规模稀疏参数、稠密参数的拉取与计算为训练集群带来极高的IO需求,需要设计一种新的交互式策略,实现卡与卡间,机与机间参数高性能通信;

▪算力挑战:CPU的算力性能限制了推荐模型的规模与计算复杂度,需要设计一种新的训练并行策略,实现CPU与GPU的算力均衡。

结合对业界方案的调研以及广告推荐算法的业务场景特点,我们设计了基于高性能算力的全GPU训练方案:基于GPU-HBM+CPU-DRAM两级交叉缓存来实现全参数的GPU存储计算,结合GPU-RDMA集合通信技术突破大规模参数训练的通信瓶颈,同时构建CPU&GPU异构的分布式流水线并行训练框架,实现了CPU和GPU计算算力的最大化协同。

图4 基于高性能算力的全GPU训练方案

基于GPU-HBM和CPU-DRAM的两级交叉参数服务器,实现稀疏参数的跨域存储。GPU作为一级缓存有效利用GPU高带宽、高算力的优势,极大提升训练吞吐,CPU作为二级缓存有效利用CPU内存的高容量、易扩展的优势,提升参数的规模上限。该方案可以进一步扩展SSD固态硬盘,形成HBM-DRAM-SSD的三级参数服务器方案,支撑更大规模万亿参数级别的高性能训练。

图5 GPU-HBM+CPU-DRAM 两级交叉存储方案

**基于GPU-RDMA集合通信的全参数同步训练范式。在参数通信方式上:**参数的拉取方式相比于传统的分布式参数服务器架构,由CPU-to-CPU的TCP通信升级为GPU-to-GPU的RDMA通信,带宽吞吐量实现了数量级的显著提升(1GB/s->600GB/s)。**在参数更新方面:**通过AllReduce、AllToAll等集合通信技术,实现全参数同步训练范式,保证模型效果。基于上述能力,框架一体化设计实现了参数交互&参数训练的最佳配速。

CPU&GPU异构的分布式流水线并行训练框架,将模型按CPU密集型子图(重逻辑)与GPU密集型子图(重计算)进行分图,部署于CPU&GPU异构集群进行分布式分图训练,在发挥各自硬件算力优势的同时,解决CPU与GPU算力不匹配的问题,达到算力均衡。同时构建多级流水线并行训练模式,使训练集群整体IO、计算吞吐最大化。

图6 CPU&GPU异构的分布式流水线并行训练框架

**多机多卡算力水平扩展:**基于上述核心能力,借助 IB 网络,进一步实现单机多卡到多机多卡的算力水平扩展,训练加速比达到1.85+,做到业界领先。

三、总结与展望

综上,新一代基于高性能算力的全GPU训练方案,在广告多个业务线进行了落地实践,取得了显著的效果收益:推荐首页CTR模型规模从30G扩展到130G,资源0增长的情况下,训练性能提升55%,并通过技术迁移仅一个月时间将技术方案复用至商详、中长尾信息流核心位置,实现模型规模百G的突破,算法迭代效率提升400%,助力推荐大盘整体点击+8.5%, 消费 +5.77%,搜索精排整体点击+2%,消费+5.63%。

算法在不断的迭代发展,硬件也在不断的推陈出新,广告训练框架也在持续的演变,我们正在规划设计下一代算法架构体系,其最显著的特点就是算法、算力、架构的深度融合以及在线、离线一体化的设计方案。算法架构体系建设是一个充满挑战的新的技术领域,需要不断探索、学习和创新。

作者:京东零售 刘凯宁

来源:京东云开发者社区 转载请注明来源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1429298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android之命令行烧写OTA镜像(一百八十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

MySQL 备份恢复

1.1 MySQL日志管理 在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这样情况下,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了。 数据库中数据丢失或被破坏可能原因: 误删除数…

算法设计与分析实验:动态规划与回溯

目录​​​​​​​ 一、编辑距离 1.1 具体思路 1.2 思路展示 1.3 代码实现 1.4 复杂度分析 1.5 运行结果 二、买卖股票的最佳时机 2.1 具体思路 2.2 思路展示 2.3 代码实现 2.4 复杂度分析 2.5 运行结果 三、单词拆分 3.1 具体思路 3.2 思路展示 3.3 代码实现…

【Nginx】Ubuntu如何安装使用Nginx反向代理?

文章目录 使用Nginx反向代理2个web接口服务步骤 1:安装 Nginx步骤 2:启动 Nginx 服务步骤 3:配置 Nginx步骤 4:启用配置步骤 5:检查配置步骤 6:重启 Nginx步骤 7:访问网站 proxy_set_header 含义…

Qt程序设计-左侧菜单栏实现

创建项目,在窗体左侧添加widget,右侧上面添加容器,容器里添加label、和关闭按钮,添加stackedwidget。 widget处理 widget里面添加几个toolButton按钮,按需添加,本例子添加4个,一个弹簧verticalSpacer 将几个按钮添加到同一个按钮组。 stackedwidget stackedwidge…

无人机激光雷达标定板

机载激光雷达标定板是用于校准和验证机载激光雷达系统的设备。由于机载激光雷达系统在测量地形、建筑物和植被等方面具有广泛的应用,因此标定板的使用对于确保测量结果的准确性和可靠性至关重要。 标定板通常由高反射率的材料制成,如镀金的玻璃或陶瓷&am…

如何选择最适合的服务器

许多朋友想做一些网站,应用,游戏,小程序等等,都需要接触一个基础,就是服务器。服务器相当于一台24小时不关机的联网电脑,浏览网页或者应用相当于用户在访问这台电脑里的文件。那么如何选择最适合自己的服务…

单片机学习笔记---中断系统(含外部中断)

目录 中断介绍 中断优先级 中断嵌套 中断技术的优点 中断的结构 中断请求源 中断优先级 5个基本中断内部的结构 INT0和INT1 T0和T1 串口 中断寄存器 IE TCON 中断优先级列表 中断号 中断响应的条件 代码编写实例分析 外部中断硬件电路分析 这一节我们主要是…

spring boot yaml文件中如何设置duration对象值

Spring Boot对表示持续时间有专门的支持。如果您公开java.time.Duration属性,则应用程序对应Duration类型的属性有以下格式可用: long类型的常规表示(使用毫秒作为默认单位,除非指定了DurationUnit)java.time.Duration 使用的标准ISO-8601格式其中值和单…

echarts绘制2D地图

简介 此案例需要用到世界地图json数据,我把json文件放到我的资源中,有需要的自行下载。 安装插件 // 安装echats npm install echarts --save项目中引用 1,引入安装的echarts插件 import * as echarts from echarts;2,引入世…

Pyecharts炫酷散点图构建指南【第50篇—python:炫酷散点图】

文章目录 Pyecharts炫酷散点图构建指南引言安装Pyecharts基础散点图自定义散点图样式渐变散点图动态散点图高级标注散点图多系列散点图3D散点图时间轴散点图笛卡尔坐标系下的极坐标系散点图 总结: Pyecharts炫酷散点图构建指南 引言 在数据可视化领域,…

一些整洁代码的原则

1. 改善if判断 当代码中出现大量防卫代码的时候(Guard Code),需要考虑是否可以改造成fail fast的模式完成。 但是给出的建议是,不要过分使用防卫代码 2. 无用代码,just delete it! 作者给出结论的前提是&…

Java常用

文章目录 基础基础数据类型内部类Java IOIO多路复用重要概念 Channel **通道**重要概念 Buffer **数据缓存区**重要概念 Selector **选择器** 关键字final 元注解常用接口异常处理ErrorException JVM与虚拟机JVM内存模型本地方法栈虚拟机栈 Stack堆 Heap方法区 Method Area (JD…

C#拆分字符串,正则表达式Regex.Split 方法 vs String.Split 方法

目录 一、使用的方法 1.使用Split(String, String)方法 2.String.Split 方法 二、源代码 1.源码 2.生成效果 使用正则表达式可以拆分指定的字符串。同样地,使用字符串对象的Split方法也可以实现此功能。使用字符串对象的Split方法可以根据用户选择的拆分条件&…

2024年【A特种设备相关管理(电梯)】考试总结及A特种设备相关管理(电梯)模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(电梯)考试总结是安全生产模拟考试一点通生成的,A特种设备相关管理(电梯)证模拟考试题库是根据A特种设备相关管理(电梯&#x…

操作系统基础:虚拟内存【上】

🌈个人主页:godspeed_lucip 🔥 系列专栏:OS从基础到进阶 🐹1 虚拟内存的基本概念🦓1.1 总览🦓1.2 传统存储管理方式的缺点🦓1.3 局部性原理🦓1.4 虚拟内存🦝1…

spring boot 使用 Kafka

一、Kafka作为消息队列的好处 高吞吐量:Kafka能够处理大规模的数据流,并支持高吞吐量的消息传输。 持久性:Kafka将消息持久化到磁盘上,保证了消息不会因为系统故障而丢失。 分布式:Kafka是一个分布式系统&#xff0c…

Swift Vapor 教程(查询数据、插入数据)

上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。 这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。 注:数据库配置比较重要 先将本地的Docker启动起来,用Docker管理数据库 将项目自己创建的Todo相关的都删掉…

TQ15EG开发板教程:在VIVADO2023.1 以及VITIS环境下 检测DDR4

打开VIVADO2023.1 创建一个新的工程,设置工程名称和地址 选择RTL工程,勾选不添加文件 搜索15eg,选择xqzu15eg-ffrb1156-2-i 完成创建工程 添加设计模块 设置模块名称 在模块中添加mpsoc器件 双击器件进行配置 若有配置文件预设可以直接导入配…