基于Alluxio加速混合云下的Intel Analytics Zoo开源深度学习平台
本文描述了Alluxio如何在混合云环境中,加速oneAPI支撑的英特尔Analytics Zoo开源平台深度学习模型训练。本文会讨论有关新架构和工作流的细节,以及Alluxio的性能优势和基准测试结果。
1.混合环境中的深度学习
从架构演进到混合模式
传统上,数据处理和分析系统是将计算和存储服务作为一个整体平台来设计、构建和操作,并部署在本地/私有数据仓库中的。尽管这种体系结构具有易于管理和高性能的优点,但这种深度耦合存储和计算的体系结构,通常难以在不扩展另一种类型资源的情况下,提供良好的应用程序弹性和资源扩展性。
越来越多的用户正在转向混合模型,将来自云和本地环境的资源结合在一起。该模型采用了另一种架构,将数据保留在通常位于本地数据仓库中,但是根据需要启动单独的计算层。混合模型允许计算和存储资源独立扩展,从而带来众多优势:
-
无资源争用:由于不存在来自计算服务的资源竞争,因此本地存储服务可以充分利用内部机器
-
无计算停机时间:因为集群是按需在云中启动的,因此不存在闲置的计算资源
-
无数据冗余:长时间运行的批处理作业或临时性查询可以共享同一组数据,而无需创建单独的副本
为深度学习提供快速I/O面临的挑战
尽管混合架构提供了灵活性和成本优势,但是在大数据上进行训练时,深度学习分析还面临着其他挑战。深度学习训练时使用相同的数据集对不同的神经网络模型和不同的超参数进行大量训练。此外,训练集的规模也在不断增长。当训练数据存储在远程存储系统中时,每次训练加载所有这些数据会产生巨大开销。
如今,跨混合环境管理数据的一种常见做法是,在运行深度学习作业之前,将数据复制到计算群集中的存储服务中。通常,用户使用“distCP”之类的命令在内部部署环境和云环境之间来回复制数据。尽管这看起来很简单,但通常需要手动处理,并且很慢和容易出错。
为了解决在混合环境中训练深度学习模型所面临的I/O挑战,并利用英特尔的oneAPI优化性能,我们开发并测试了一个新架构/工作流,该架构/工作流将Alluxio集成在由oneAPI支持的Analytics Zoo平台中。
2.使用Analytics Zoo和Alluxio的新架构和工作流
什么是Analytics Zoo
由oneAPI支撑的Analytics Zoo是英特尔开发的开源统一分析和AI平台,旨在将多个深度学习应用程序无缝地整合到一个集成流水线中。用户可以透明地扩展规模,从在笔记本电脑上运行示例作业扩展到在大型集群上处理生产规模的大数据。
它支持:
- 使用Spark代码内联编写TensorFlow或PyTorch,以进行分布式训练和推理
- 在Spark ML流水线中支持本地深度学习(TensorFlow/Keras/PyTorch/BigDL)
- 通过RayOnSpark在大数据群集上直接运行Ray程序
- 用于(TensorFlow / PyTorch / BigDL / OpenVINO)模型推理的纯Java/Python API
什么是Alluxio
Alluxio是用于数据分析的开源数据编排层。它充当一个分布式缓存层来防止从远程数据源重复拉取数据,以此为数据分析或机器学习系统(如Analytics Zoo)提供高性能。与其他解决方案相比,Alluxio在具有“零拷贝突发”功能的混合云环境中具有以下优势,可将数据处理突发迁移到云上进行:
-
按需计算驱动的数据:将存储系统挂载到Alluxio上时,初始仅会加载其元数据。Alluxio仅在应用程序请求时缓存数据。这种按需应变的行为允许对云进行突发数据处理,从而避免了手动将数据从内部集群复制到云。
-
数据本地化:Alluxio可根据数据访问模式,智能地在应用程序附件缓存数据,复制热数据,或驱逐过时数据。
-
数据弹性:Alluxio可以根据分析框架(包括容器编排的环境)灵活扩展。
-
用于数据访问的通用API:Alluxio使用不同的通用API提供数据抽象,包括HDFS API,S3 API,POSIX API等。为分析和AI工作构建的现有应用程序可以直接在此数据上运行,而无需对应用程序本身进行任何更改
设置和工作流程
下图是集成了Alluxio和Analytics Zoo的架构图,可实现快速高效的深度学习工作:
本地或远程数据存储被挂载到Alluxio上。Analytics Zoo应用程序通过运行Spark作业启动深度学习训练任务,通过分布式文件系统接口从Alluxio加载数据。初始时,Alluxio尚未缓存任何数据,因此它从挂载的数据存储中检索数据,并将其提供给Analytics Zoo应用程序,同时在其Worker中保留一个缓存副本。第一次训练的运行速度与应用程序直接从本地数据源读取数据的速度大致相同。在随后的训练中,Alluxio将拥有一个缓存副本,因此数据将直接由Alluxio Worker提供,从而消除了对本地数据存储的远程请求。请注意,缓存过程对用户是透明的;无需人工干预即可将数据加载到Alluxio中。但是,Alluxio确实提供了诸如“distributedLoad”之类的命令来预加载工作数据集,以便在需要时预热缓存。还有一个“free”命令用于收回缓存存储空间,而无需从底层数据存储中清除数据。
3.基准测试结果
本节总结了Alluxio集成工作流的性能测试和基准测试结果。
环境
我们在AWS EMR部署的7节点Spark集群(其中1个实例为主节点,其余为工作节点)中运行实验。基准测试的工作负载是inception v1训练,使用存储在AWS S3同一区域的ImageNet数据集。
作为基准,Spark集群直接从S3 bucket访问数据集。与基准作为对比,在Spark群集上安装Alluxio,并将S3 bucket挂载为底层文件系统。
下表详细介绍了具体的环境配置:
结果对比
在使用Analytics Zoo对ImageNet数据进行inception训练时,我们测量了数据加载性能。测得的时间包括训练数据和测试数据的加载时间。
使用Alluxio和不使用Alluxio的平均加载时间分别为579秒和369秒。当Analytics Zoo使用Alluxio加载ImageNet训练和测试数据时,速度大约提高了1.5倍。注意,输入数据位于S3中计算的同一区域中。
下图显示了使用Alluxio时,性能波动(15.9秒)也远低于基线波动(32.3秒)。这表明Alluxio不仅有助于平均加载时间,而且可以使性能更加稳定。
4.结论
通过利用Alluxio作为Analytics Zoo的数据层,混合云解决方案可加速Analytics Zoo应用程序中的数据加载以及大数据系统上的深度学习分析。我们的Alluxio内部性能基准测试表明,当Analytics Zoo使用Alluxio加载ImageNet的训练和测试数据时,该架构提升了约1.5倍的速度。
人工智能应用的不断发展,将深度学习带入了新一代数据分析发展的前沿。各类组织机构将深度学习技术应用于大数据分析流水线的需求将不断增长。我们代表整个Alluxio开源社区鼓励读者尝试这个解决方案,并欢迎您在遇到任何问题时在我们的社区slack频道中提问。
特别感谢英特尔的Jennie Wang和Louie Tsai,感谢他们提供的宝贵的Analytics Zoo技术咨询和支持。