关于人工智能:喜马拉雅基于-HybridBackend-的深度学习模型训练优化实践

39次阅读

共计 3256 个字符,预计需要花费 9 分钟才能阅读完成。

喜马拉雅作者:李超、陶云、许晨昱、胡文俊、张抹黑、赵云鹏、张玉静

喜马拉雅 AI 云借助阿里云提供的 HybridBackend 开源框架,实现了其举荐模型在 GPU 上的高效训练。

业务介绍

举荐场景是喜马拉雅 app 的重要利用之一,它广泛应用于热点、猜你喜爱、私人 FM、首页信息流、发现页举荐、每日必听等模块。这些模块都依赖于喜马拉雅 AI 云,这是一套从数据、特色、模型到服务的全流程一站式算法工具平台。

举荐服务的一个外围诉求是能疾速捕获和反映用户一直变动的趣味和以后热点,这就要求模型能在短时间内,以可控的老本实现对海量用户数据的训练。应用 GPU 等高性能硬件来减速模型训练曾经成为 CV,NLP 等畛域的行业标准;在应用稠密训练数据的举荐场景下,国内外的各大厂商也在踊跃转向应用高性能 GPU 来代替传统的 CPU 训练集群,以晋升训练的效率。

喜马拉雅 AI 云借助阿里云机器学习平台 PAI 的开源框架 HybridBackend,实现了其举荐模型在 GPU 上的高效训练。在减速训练的同时,HybridBackend 框架高度易用,帮忙其算法团队晋升了开发效率。

问题与挑战

随着举荐业务的底层训练硬件逐步从 CPU 向 GPU 转变,咱们在生产实践中发现传统的训练形式存在重大的计算资源利用率有余的问题。通过考察与剖析,咱们发现计算资源利用有余次要来自于稠密数据拜访和分布式训练两方面:

  • 稠密数据拜访:咱们应用经典机器学习中罕用的 libsvm 数据格式来存储数据,将多个特色合并成一个稠密字符串表白。在训练时,训练节点从远端的存储(如 OSS)上下载字符串,并从字符串中切分出多个特色输出,而后再喂入对应的 Embedding Table。在特色维度爆炸性增长的状况下,拼接字符串的数据量很大,导致数据读取重大受制于网络带宽;同时切分字符串也造成了 CPU 资源的耗费。
  • 分布式训练:咱们尝试过多种分布式训练形式。起初,咱们应用 keras+horovod 实现多 GPU 分布式训练,但在具体应用过程中发现有不少问题,比方呈现减速不稳固、模型指标好转等景象。起初,咱们自研实现了一版基于参数服务器 (PS) 的分布式训练框架,通过外部的 xcache 服务实现 embedding 存储管理并进行线上同步,并应用自研的 pspull 和 pspush 算子进行 embedding 表的更新,肯定水平上解决了分布式训练的效率问题。但在进一步增大训练数据量时发现,引入的 ps 算子因为频繁的 IO 交互成为了训练速度的瓶颈,升高了 GPU 设施利用率,同时 xcache 服务存储变长 embedding 的反对老本很高,限度了算法工程师的优化空间。

HybridBackend

咱们在调研如何解决上述问题和摸索将来技术倒退空间时发现了阿里云正在推广的开源框架 HybridBackend,该框架对稠密模型训练过程中的数据拜访、稠密计算以及分布式训练都进行了深度优化(见图 1),并提供了简略易用的接口。令人惊喜的是,这个框架兼容性很强,能够反对 TensorFlow、DeepRec 等多种训练框架,能够很好地满足咱们服务不同业务客户的需要。此外,相干的架构和零碎设计曾经以论文模式在 ICDE2022 会议上公开,并且在 Github 上开源了次要性能,能够间接以 pip 形式装置。

HybridBackend 的根本功能模块

图 2 形容了在我司模型训练任务中落地 HybridBackend 的全景示意图。蓝色框代表了 HybridBackend 参加或减速了的流程局部。能够看到根本涵盖了全副模型训练流程,  上面重点介绍在数据读取和分布式训练上的优化成绩。

HybridBackend 在喜马拉雅业务流程中的落地

稠密数据拜访优化

HybridBackend 提供了 hb.data.Dataset 接口,通过反对如 Parquet 这样的列存数据格式,能够极大减速稠密数据的拜访。如表 1 所示,HybridBackend 框架稠密数据读取性能远高于其余实现。

文件格式文件大小(MB)框架线程数耗时(ms)
CSV11062.61TensorFlow18858.38
Parquet (SNAPPY)3346.10TensorFlow I/O1103056.17
Parquet (SNAPPY)3346.10HybridBackend1397.88
Parquet (SNAPPY)3346.10HybridBackend2021.67

在咱们的理论利用中,HybridBackend 稠密数据拜访性能中的一些性能效果显著:

  • 数据列选择性解析:咱们将须要原有的类 libsvm 格局切换成宽表格局,其中每列对应一个特色。HybridBackend 能够反对在读取 Parquet 文件时只读取抉择的字段,并将字段数据解析成 TensorFlow 所须要的格局,如主动将 list 类型的数据转换为 SparseTensor,或将 list 类型的数据进行填充截断后转换为 Tensor,满足了咱们数据加载的多种须要。
  • 数据读取并行度设置:HybridBackend 能够通过设置 num_parallel_reads 参数来调整读不同文件的并行度,通过设置 num_parallel_parser_calls 参数来调整读文件中不同列的并行度。通过并行读取,在充分利用机器 CPU 资源的同时,减速了数据读取的性能。

在应用 HybridBackend 后,数据拜访不再是咱们的训练瓶颈。单卡训练的 GPU 均匀利用率晋升了 3x 以上,业务模型的训练周期显著缩短。

分布式训练优化

HybridBackend 提供了混合并行训练模式(如图 3),每张 GPU 都会存储全副的浓密参数和局部的稠密参数,并应用能够利用 NVLink 的 NCCL 通信协议来代替传统 PS 训练形式所应用的 RPC 协定。

HybridBackend 提供的混合并行训练模式

依据咱们对将来一段时间内模型特色维度和大小的预估,以及咱们对训练速度的需要,咱们采纳了 HybridBackend 混合并行形式进行训练,无效地进步了训练速度和 GPU 利用率。

咱们还与 HybridBackend 社区的开发者协同工作,促成了 HybridBackend 对 Keras Model API 的反对,使咱们可能在 Keras Model API 下利用 HybridBackend 进行混合并行,并实现模型热启等重要性能。这些性能极大地升高了应用老本。

总体收益

整体流程革新结束之后,咱们在举荐场景中,单机多卡训练 GPU 均匀利用率晋升了 1.4x 以上(视具体模型不同),训练环节整体耗时缩小 50% 以上。目前咱们曾经在应用了 Tensorflow 和 DeepRec 的模型中全量推广基于 HybridBackend 的训练计划。

将来布局

喜马拉雅 AI 云平台目前笼罩了喜马拉雅多个 app 的举荐、广告、搜寻举荐等外围业务场景,以及画像产出、数据分析、BI 数据生成等定制化开发场景。咱们也在摸索后续与 HybridBackend 社区的一些单干,以便更好地满足业务需要:

● 算子优化:HybridBackend 反对了 embedding lookup 过程中的各种算子的交融优化。咱们会尝试通过这种形式晋升模型在线推理的性能。

● PyTorch 反对:NLP 搜推场景中有用 Pytorch 进行训练和部署的需要。咱们须要 HybridBackend 可能反对该场景的实现。

● 超大型分布式训练:咱们的模型训练级别达到了百亿样本十亿特色维度。随着算法复杂度的晋升,咱们须要反对更大的数据量和更高的维度的训练。

鸣谢

在单干共建阶段,咱们失去了 HybridBackend 社区 陈浪石、袁满等的技术支持,他们技术高超、服务周到、响应及时。帮忙咱们疾速实现了深度学习模型的训练流程优化,为咱们的业务指标和算法优化空间带来了显著的晋升。在此示意衷心的感激!

HybridBackend 社区

欢送在 GitHub 上 star 和提 issue,也能够间接在钉钉群中分割 HybridBackend 社区。

GitHub 地址:

https://github.com/alibaba/HybridBackend

正文完
 0