PaddleBox:百度基于 GPU 的超大规模离散 DNN 模型训练解决方案
作者 | 焦学武、李淼
导读
本文介绍百度基于 GPU 的超大规模离散 DNN 训练框架 PaddleBox。PaddleBox 打造了业界首个层次化 GPU 稀疏参数服务器,结合高效的流水线调度架构,以及多机多卡的分布式架构,支持单机 10TB 级/多机数十 TB 模型训练,具备低成本、高性能、高稳定、灵活易用的多重优势。PaddleBox 于 2019 在百度凤巢首次上线,目前已在百度广告系统全面落地,覆盖搜索广告、信息流广告、联盟广告业务,相比传统 CPU 解决方案,资源性价比提升 5~40 倍。注:本文基于 2020 年百度内网文章修改而成。
全文 5246 字,预计阅读时间 24 分钟。
01 超大离散 DNN 模型训练的背景与挑战
精准的广告是很多互联网产品重要的盈利方式之一,基于海量数据的广告系统能够很好的匹配用户的意图,为用户带来良好产品体验,同时提升商业变现效率。CTR 预估模型是广告系统中非常重要的一环,被誉为“镶嵌在互联网技术上的明珠”,而高效稳定的训练框架则是 CTR 模型日常迭代更新的基石。
近年来深度学习迅猛发展,百度早在 2014 年就已经将 DNN 模型应用到广告系统,是国内首个将大规模 DNN 用在广告领域并取得了良好效果的公司。Google 此前发布了万亿级模型 Switch Transformer,参数量达到了 1.6 万亿,其实凤巢广告模型的参数量比 Google 的 Switch Transformer 还要大,广告模型采用了十亿级别的用户 ID、Query、广告 ID 以及多种组合特征构建模型,特征数量可以达到千亿级别,模型训练过程中需要将千亿级的高维稀疏特征转化为低维的稠密特征向量(8、16 以及 64 维),模型参数规模高达万亿维。
△图 1. 大规模离散 DNN
大规模离散 DNN CTR 模型以 Embedding Layer 和 FC Layer 为主,虽然与 CV 和 NLP 领域的经典模型相比网络结构并不复杂,但是庞大的参数规模、样本规模和大规模高维稀疏的特性为模型的高效稳定训练提出了多重挑战。(下文把高维稀疏特征对应的 Embedding 参数称为 Sparse 参数,DNN 参数为 Dense 参数)
存储挑战。Sparse 参数量可达万亿级别,存储空间占用达到 10TB 级别,远超单机内存,一般需要分布式全内存的存储系统。
IO 挑战。IO 挑战来自训练样本和模型参数两个维度,很多场景每天产出亿级用户的数十亿条训练样本;每个 mini-batch 模型需要从千亿特征的 Embedding Table 中查找和更新对应的参数,需要应对超高频的参数查询和更新。
计算挑战。CTR 模型与 NLP 和 CV 模型不同,大部分计算不是矩阵运算,样本解析、稀疏参数的查询和更新等非矩阵运算占比超过 70%。
02 传统分布式 CPU 解决方案
基于多台 cpu 服务器的参数服务器架构是大规模模型训练的成熟方案,该方案采用了数据并行和模型并行的混合方式,数据并行是指将训练样本分散到多个计算节点上,模型并行是指将稀疏参数分散到多个存储节点上。参数服务器架构有两个角色 Worker 和 Server。其中 Worker 用于执行模型的前向和反向计算;Server 负责从各个 Worekr 收集汇总梯度并更新参数。
△图 2. 参数服务器的分布式训练架构
参数服务器以 Scale-out 的思路成功解决了参数规模和样本规模带来的系统可伸缩性问题,可以通过调整 CPU 服务器的数量来应对参数规模和样本规模的伸缩性需求,但也有自身的限制:
成本问题。训练任务占用上百台 CPU 服务器,此前百度大商业用于 CTR 模型训练的服务器接近 2 万台,带来大量的硬件采购和维护成本。
通信长尾和稳定性问题。训练过程中上百台 CPU 服务器需要进行 mini-batch 级的超高频网络通信(参数拉取和梯度更新),通信长尾导致严重的性能恶化,也导致了梯度过期问题,影响策略效果;此外,由于故障概率的指数级上升,基于上百台 CPU 服务器的训练任务存在严重的稳定性问题。
算力问题。随着 Gate Network、Attention 等网络结构被引入到 CTR 模型,模型网络越来越复杂,对算力的要求越来越高,CPU 机器很难满足模型复杂度增长的算力需求。
NVIDIA 近年来一直在推动 GPU 通用计算能力的发展,从 2006 年推出 CUDA 编程平台以来,面向通用计算的 GPU 架构先后经历了 Fermi、Kepler、Maxwell、Pascal、Volta 和 Ampere 等 6 代产品,最新一代的 Tesla A100 单精度浮点数运算性能达 156 TFLOPS, 比 Intel Xeon E7 系列高出 2 个数量级,算力的提升使得语音、图像、NLP 等领域取得了革命性的进展,但在超大规模离散 DNN 场景却一直没有落地。
直接采用 GPU 做参数服务器架构的 Worker 来解决算力问题并不可行,因为模型训练过程中高频的参数拉取与梯度更新需要频繁地进行 CPU/GPU 通信,难以发挥 GPU 算力优势,且存储超大模型需要较多 GPU 服务器,成本过高。
03 PaddleBox GPU 解决方案
为了解决传统参数服务器架构面临的问题,本框架设计了基于 GPU 的 PaddleBox 解决方案,整体架构如下图所示:
△图 3. PaddleBox 整体架构
PaddleBox 推出了异构层次化参数服务器,通过 SSD、MEM、HBM 三级参数服务器高效协同的方案来提升模型参数容量和访存速度,采用高效的流水线调度流程使得异构硬件最大化并行,充分发挥异构硬件优势,实现单台 GPU 服务器支持 10TB 级模型高效训练。为了支持更大规模的模型和样本,PaddleBox 基于多机进行扩展,设计了性能近线性加速比的分布式架构。而且 PaddleBox 与 Paddle 共建开源生态,可支持复杂模型的快速接入与调研,具备低成本、高性能、高稳定、灵活易用的多重优势。
PaddleBox 打造了业界首个分布式 GPU 稀疏参数服务器,下面将详细介绍 PaddleBox 是如何解决模型训练的多重挑战的。
3.1 异构层次化参数服务器
△图 4. 异构参数服务器
3.1.1 支撑超大模型参数存储的 SSD 参数服务器
GPU 服务器拥有超强的算力,从算力角度,单台或几台 GPU 参数服务器的算力就可以支持超大规模模型的训练。但是从存储角度,几台机器的内存和显存无法存储 10TB 级的模型参数,因此也就无法进行模型训练。为了应对超大规模模型的存储挑战,在 HDD、NVMe SSD、Optane 和 AEP 等多种硬件存储设备间,综合考虑训练所需的存储容量、性能和成本等多方面因素,最终选择 SSD 作为全量参数存储设备。
测试显示在 Raid0 下的 SSD 的读写性能依旧落后于内存 1-2 个数量级,业务场景对读写性能要求非常高,传统的 SSD 索引一次检索需要多次 IO,性能太差,为此系统进行多重性能优化。
IO 优化:通过构建多级全内存 hash 索引,实现了对 SSD 数据一次性的准确读写,每次查询最多一次 IO。
查询剪枝:结合数据访问的冷热比例,MEM Cache 存储热数据;使用 BloomFilter 判断当前 key 是否在 SSD 上进一步降低无效的访盘次数。这两种剪枝策略使得 SSD 查询次数降低一个数量级。
底层优化:通过异步 IO 和数据对齐等优化技术,SSD 读写性能提升 5 倍,直达 SSD 理论极限 5*3GB/s。
△图 5. SSD 参数服务器结构
这是业界首个基于 SSD 的超大规模异构存储稀疏参数服务器,成功支持单机 10TB、万亿维参数存储,使得采用单 GPU 服务器进行 10 TB 级模型训练成为现实。
3.1.2 支撑参数高效访存的 HBM 参数服务器
采用 SSD 参数服务器后,单台 GPU 服务器即可进行超大模型训练,但是其训练速度却并没有得到很大提升。其原因在于训练过程中 Sparse 参数的超高频 CPU-GPU 通信,无法充分发挥 GPU 超强算力。
为了解决这个问题,框架设计实现了业界首个多机多卡分布式 GPU 稀疏参数服务器。HBM、MEM 和 SSD 三层参数服务器自动化协同,既具备 SSD 的大容量,又具备 HBM 的高性能。
机器内 GPU 卡间需要应对超高频的万亿次稀疏参数访问,传统通信技术无法满足性能需求,我们通过软硬件双重创新来优化。
软件创新:NVLink 的带宽高达 300GB/s, 性能超过 PCIe 一个数量级。传统卡间通信技术采用低速的 PCIe, 难以满足海量的参数通信需求。对此我们根据 GPU 的拓扑结构实现了 Multi-Hop 通信策略,实现 GPU 跨卡参数访问性能提升 7 倍。(百度自研 XMAN2.0 机型)
△图 6. 非 NVLink 全互连的 GPU 拓扑结构(来自 NVIDIA 官网)
硬件创新:首次引入 NVSwitch 全互联总线架构,任意 GPU 间可以通过 NVLink 进行 P2P 高速通信,GPU 跨卡参数访问性能提升 10 倍。(百度自研 XMAN3.0 机型)
△图 7. NVSwitch 全互联总线架构
3.2 高效的训练流水线架构
PaddleBox 使用的机型设备具备多种异构硬件,怎样可以充分发挥硬件能力呢?
PaddleBox 模型的训练流程包括样本读取、样本解析、参数拉取和模型训练四个阶段,每个阶段对硬件资源类型的需求是不同的。
样本读取:从分布式文件系统读取数据,是网络密集型任务。
样本解析:把文本数据解析为特定的数据结构,是 CPU 密集型任务。
参数拉取:从 SSD 中拉取 Sparse 参数,是 SSD IO 密集型任务。
模型训练:在 GPU 硬件上训练模型,是 GPU 密集型任务。
△图 8.高效的流水线结构
3.3 近线性加速比的分布式版本
PaddleBox 单机版本能够支撑 10TB 模型的高效训练。为了支持更大规模的模型和样本,以及更快地训练,PaddleBox 进一步实现了分布式架构。
△图 9. 分布式 PaddleBox 架构
分布式 SSD 存储引擎:通过参数分区存储的方式将稀疏参数 sharding 到多台机器上,构建分布式 SSD 参数服务器来实现更大规模的稀疏参数存储。
超高的多机通信效率:超强的 GPU 算力,要求更加高效的多机通信效率,否则会严重制约分布式的加速比。对此,PaddleBox 框架在网卡拓扑、通信协议等方面进行了软硬一体的整体设计。
算法创新:梯度聚合和量化通信结合,通信量降为原来的 1/4, 极大的提升了模型训练效率。我们通过多个维度的优化榨干异构硬件的性能,最终使得 PaddleBox 的分布式架构具备近似线性的加速比。
△图 10. 分布式 PaddleBox 性能测试结果
3.4 Paddle 开源生态
PaddlePaddle 源于产业实践,是业界公认的国内唯一功能完备的开源深度学习平台,具备灵活的组网能力和丰富的算法库,提供高效的并行训练能力和良好的可扩展性,目前已经支持公司内外多个业务上线。
PaddleBox 提供基于 GPU 的超大规模异构参数服务器,结合 Paddle 灵活的组网能力和丰富的算法库,同时具备算力和组网的双重优势,可以快速引入来自学术界的 CNN、RNN、Attention、Bert 等模型和机制,为业务场景引入开源复杂模型算法提供了广阔空间。
04 落地与收益
PaddleBox 目前已经覆盖了百度搜索广告、推荐广告、网盟广告和手百推荐等场景的上百个模型,支撑各业务取得收入上的巨大提升。与此同时,公司内部丰富的业务也在驱动着 PaddleBox 的升级与成熟。获取的收益主要来源于三方面:
极高的性价比:PaddleBox 以更低的成本提供了更多的训练资源,相对采用 MPI 参数服务器,取得了 5~40 倍的性价比提升。
算力和灵活性双重优势:支持复杂的模型,PaddleBox 使得 CTR 不再只是全连接模型,融入开源生态后提供语义模型、注意力模型、多模态联合训练的能力。
支持多种业务场景:PaddleBox 不仅仅是 CTR 模型训练框架,更是通用的大规模离散模型训练框架,适合多种场景。除点击率模型外,框架在转化率 CVR、TDM 模型、图模型等场景也有广泛的落地。
05 总结
Paddlebox 设计之初就开始潜心研究 GPU 分布式训练技术,以应对大规模离散模型的训练任务,在丰富的广告推荐业务驱动下,PaddleBox 推出了业内首创的异构参数服务器,支持多种场景而且可以极大地提升硬件资源利用率,具有极高的性价比。
同时,PaddleBox 也在进行框架的更深层次升级,包括模型混布、异构集群、昆仑芯新硬件的探索等,进一步提升模型训练性能和资源利用率。PaddleBox 也在场景上扩展到了特征抽取,目前已经支持特征抽取、模型训练一体化任务,极大提升了模型训练效率。后续,也希望能跟大家分享特征抽取框架 FeaBox 和大规模图引擎 PGLBox。
相信 PaddleBox 必将成为星辰大海上的那颗北极星,引领大规模离散模型的进一步创新。
————END————
推荐阅读:
版权声明: 本文为 InfoQ 作者【百度Geek说】的原创文章。
原文链接:【http://xie.infoq.cn/article/cbaad77e68f82d63bff08df31】。文章转载请联系作者。
评论