速度提升18倍!微博海量深度学习模型训练效率跃升的秘密 (速度提升100%是多少)

速度提升18倍!微博海量深度学习模型训练效率跃升的秘密 (速度提升100%是多少)

一、背景

新浪微博是中国最大的社交媒体平台,每天上亿条内容产生并在万亿级关系的社交网络上进行传播。下图是是微博的业务生态图,通过优质用户生产、传播优质内容,普通用户消费这些内容,进而关注自己喜欢的博主,建立联系,形成闭环生态。

微博机器学习平台的主要作用是让整个过程流转得更高效流畅:通过理解优质内容,构建用户画像,把用户感兴趣的优质内容推给用户,让他们和内容生产者互动,进而刺激生产者生产更多更好的内容,实现信息消费者和信息生产者的双赢。而随着多媒体内容变成主流,深度学习技术就变得更为重要。从多媒体的内容理解,到 CTR 任务的优化,都离不开深度学习技术的支持。

二、大规模深度学习模型训练挑战

随着深度学习在微博业务场景中的广泛使用,微博深度学习平台扮演了非常核心的角色。该平台采用了存储与计算分离的架构,使得计算资源得以与存储资源解耦,从而实现了灵活的资源配比以及便捷的存储扩展,并且降低了存储成本。

然而,这种架构也带来了一些挑战,其中比较关键问题体现在数据访问性能和稳定性方面:

通过对于微博深度学习平台的监控分析,我们发现一方面由于 IO 性能问题导致 GPU 等昂贵计算资源不能被充分利用,同时,我们也发现集群中的内存和本地硬盘的水位很低,余量较多并且稳定,这是由于多数的深度学习任务并不使用本地磁盘,同时内存使用率也不高。因此我们考虑如果能够充分利用集群自身的内存和磁盘资源加速数据访问会是一种更好的方案。

三、Fluid+JindoRuntime:为微博深度学习平台提供高效支撑

为了能更好满足大规模深度学习模型训练的计算需求,需要取得更好的数据本地性效果。因此,我们希望达到以下目标:

为了达到上述目标,我们迫切希望找到 Kubernetes 上具有分布式缓存加速能力的软件。很幸运,我们发现 CNCF Sandbox 项目正好可以满足我们的诉求。于是,我们设计了基于 Fluid 的新架构方案,经过验证比较,我们选择JindoRuntime作为加速运行时。

3.1 架构组件介绍

是一个运行在 Kubernetes 上可扩展的分布式数据编排和加速系统,它通过数据的编排和使用数据的应用调度,解决云原生编排框架运行此类应用面临数据访问延时高、多数据源联合分析难、应用使用数据过程复杂等痛点。

JindoRuntime

JindoRuntime是 Fluid 一种分布式缓存 Runtime 的实现,基于 JindoFS 分布式缓存加速引擎 。是阿里云 EMR 团队自研大数据存储优化引擎,完全兼容 Hadoop 文件系统接口,给客户带来更加灵活、高效的计算存储方案。JindoRuntime 使用 JindoFS 的 Cache 模式进行远端文件的访问和缓存,支持 OSS、HDFS、标准 S3 协议等多种存储产品的访问和缓存加速。在 Fluid 上使用和部署 JindoRuntime 流程简单、兼容原生 K8s 环境、可以开箱即用。深度结合对象存储特性,使用 Navite 框架优化性能,并支持免密、checksum 校验等云上数据安全功能。

3.2 使用基于 JindoRuntime 的 Fluid 的原因

3.3 落地实践

3.4 性能测试方案

为了验证以上方案的整体效果,我们从稳定性、性能不同角度进行了验证,这里着重介绍性能测试方案,训练的模型都是基于 mmaction 的视频理解模型,采用的是 rawframes_train 方式,是拥有 400w 图片的训练的数据集实验,数据是从真实业务场景中提取的 40w 视频中抽帧得到,每个场景下抽 10 帧图片,由于视频清晰度各异,每张图片大小由几 KB 到十几 M 各异,总计大小 780G 左右,每个缓存节点提供 300G 的缓存空间;同时根据经验一般在 50epoch 左右会实现模型收敛。

而当我们把测试的视频数据量调整到 100w,总共的数据大小 2T,由于数据量大和延时长,HDFS 接口的方式完全不能工作;而通过 Fluid+JindoRuntime 则可以满足业务的需要。

测试的流程是会通过 Fluid JindoRuntime 进行数据预热,之后进行模型训练。

3.5 性能测试结果

结合 Fluid+JindoRuntime 方案,在数据预热的前提下,我们取得了非常明显的训练速度提升,从下图可以看到在 3 机 12 卡的场景下,我们发现基于 HDFS 接口读取数据的实验往往会因为网络通信等问题中断,导致实验不能跑完,增加异常处理后,workers 之间的等待时间加长,导致增加卡数并不能增加训练速度,反而会拖慢。可以观察到 1 机 8 卡和 3 机 12 卡的场景总体训练速度基本持平,计算资源的扩容。而通过新的方案,我们发现相比于 HDFS 接口,我们发现 1 机 4 卡可以得到 5 倍的加速,2 机 8 卡可以得到 9 倍的加速,3 机 12 卡可以得到 18 倍的加速。

由于训练的速度和稳定性的得到了保障,端到端的模型训练时间也得到了显著的提升,训练总时长由原来的 389 小时(16 天)缩短到了 16 小时。

四、总结:从两周到 16 小时的训练速度跃升

集成了 Fluid+JindoRuntime 后,显著提升了小文件场景模型训练的性能和稳定性,在多机多卡分布式训练的情况下,可以将模型训练的速度提升 18 倍;将过去需要两周才能完成的训练缩减到了 16 个小时。更短的训练时间和更小的 HDFS 压力,也提升了训练任务的稳定性,将训练的成功率从 37.1%提升到了 98.3%。目前我们在生产环境的数据量是 4TB,同时随着不断迭代数据量还在持续增长。

微博 AI 训练场景对于数据读取有很高的性能要求,而且海量的小文件对于访问延时也非常敏感,通过 JindoRuntime 的缓存能力可以有效地对大数据存储系统上的数据进行缓存加速,提供稳定可靠的高吞吐、低延时的数据访问性能,同时也可以有效地缓解对后端存储系统的的压力,保证后端存储的稳定性。结合自身的具体场景,优化小文件读取和缓存,不仅可以缓解 HDFS 集群的 IO 压力,也大大提高训练效率。

五、展望

目前 Fluid+JindoRuntime 更像是杀手锏,用来加速小文件场景,而非常规性武器对于所有数据集进行加速优化,我们期望能够把弹性的数据加速作为微博深度学习平台的差异化能力,提升整体训练任务速度和计算资源的利用率;另一方面也帮助社区不断演进,帮助到更多的开发者。具体来说:

作者:

致谢

感谢阿里云 JindoFS 团队的辰山、扬礼和容器团队的车漾在整个方案设计和优化过程中的巨大帮助,在几乎没有任何应用改造前提下,将数据加速能力赋予了现有应用;同时对于测试和生产环境中的需求和问题也及时专业的提供了支持。

相关链接

[1] Fluid:JindoFS:更多 Fluid 和 JindoFS 相关介绍请参考以上链接

声明:本文来自用户分享和网络收集,仅供学习与参考,测试请备份。