共计 5188 个字符,预计需要花费 13 分钟才能阅读完成。
作者 | 焦学武、李淼
导读
本文介绍百度基于 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————
举荐浏览:
聊聊机器如何 ” 写 ” 好广告文案?
百度工程师教你玩转设计模式(适配器模式)
百度搜寻业务交付无人值守实际与摸索
分布式 ID 生成服务的技术原理和我的项目实战
揭秘百度智能测试在测试评估畛域实际
再添神器!Paddle.js 公布 OCR SDK