This article was originally published on InfoWorld on March 22, 2022.Reprinted with permission. IDG Communications, Inc., 2022. All rights reserved. Orchestrating data for machine learning pipelines.
作者导读
人工智能(AI)和机器学习工作负载依赖大型数据集,并且对数据吞吐量有较高的要求,两者都能够通过优化数据工作流来实现。
当进行 AI 模型训练时,咱们须要高效的数据平台架构来疾速生成剖析后果,而模型训练在很大水平上依赖于大型数据集。执行所有模型训练的第一步都是将训练数据从存储输送到计算引擎的集群,而数据工作流的效率会大大影响模型训练的效率。
数据平台/AI 平台工程师在数据架构和数据管理方面须要思考以下几个问题:
- 数据可拜访性:当数据逾越多个数据源且存储在远端时,如何高效地获取训练数据?
- 数据工作流治理:如何把数据作为工作流来治理,在训练流程中无需期待,保证数据的继续供应?
- 性能和 GPU 利用率:如何同时实现低元数据提早和高数据吞吐量,确保 GPU 始终处于繁忙状态?
本文将针对上述端到端模型训练数据流问题,探讨一种新的计划——数据编排计划。
文章首先会剖析常见的挑战和误区,而后介绍一种可用于优化 AI 模型训练的新技术:数据编排
AI 模型训练中的常见挑战
端到端机器学习工作流是蕴含从数据预处理和荡涤到模型训练再到推理的一系列步骤,而模型训练是整个工作流程中最重要且资源最密集的环节。
如下图所示,这是一个典型的机器学习工作流,从数据收集开始,接着是数据筹备,最初是模型训练。在数据收集阶段,数据平台工程师通常须要破费大量的工夫来确保数据工程师可能拜访数据,之后数据工程师会对数据科学家搭建和迭代模型所需的数据进行筹备。
训练阶段须要解决海量的数据,确保 GPU 可能继续获取数据,从而生成训练模型。因而咱们须要对数据进行治理,使其可能满足机器学习的复杂性及其可执行架构的需要。在数据工作流中,每个步骤都面临相应的技术挑战。
数据收集上的挑战——数据无处不在
数据集越大,越有助于模型训练,因而收集所有相干数据源的数据至关重要。当数据分布在本地、云上或者跨区域的数据湖、数据仓库和对象存储中时,将所有的数据集中成繁多数据源的做法不再可行。鉴于数据孤岛的存在,通过网络近程拜访数据难免会造成提早。如何在实现所需性能的同时确保数据可被拜访成为微小的挑战。
数据筹备上的挑战——串行化的数据筹备
数据筹备从收集阶段的数据导入开始,包含数据荡涤、ETL 和转换,最初再将数据用于模型训练。如果孤立地思考这个阶段,则数据工作流是串行化的,训练集群在期待数据筹备的过程中会节约大量工夫。因而,AI 平台工程师必须想方法创立并行化的数据工作流,实现数据的高效共享和两头后果的无效存储。
模型训练上的挑战——受制于 I/O 且 GPU 利用率低
模型训练须要解决数百万亿字节的数据,但通常是图像和音频文件等海量小文件。模型训练须要屡次运行 epoch 来进行迭代,因而会频繁地拜访数据。此外, 还须要通过一直向 GPU 供应数据来让 GPU 处于繁忙状态。既要优化 I/O 又要放弃 GPU 所需的吞吐量并非易事。
传统计划和常见误区
在探讨不同的解决方案之前,咱们先来看一个简化的场景,如下图所示:
咱们在云上应用一个多节点的 GPU 集群,并把 TensorFlow 作为机器学习框架来进行模型训练。预处理的数据存储在亚马逊 S3 中。一般来说,让训练集群获取这些数据有两种计划,咱们接下来会别离探讨:
计划 1:把数据拷贝到本地存储
第一种计划如下图所示,将远端存储中的残缺训练数据集拷贝到每个用于训练的服务器的本地存储中。这样可保证数据的本地性,训练作业实际上是从本地读取数据,而非近程拜访数据。
从数据工作流和 I/O 的角度来看,因为所有数据都在本地,因而该计划可能达到最大的 I/O 吞吐量。除了一开始训练必须期待数据齐全从对象存储拷贝到训练集群外,GPU 会始终处于繁忙状态。
尽管如此,该计划并不适宜所有状况。
首先,数据集的大小必须匹配本地存储的总容量。随着输出数据集的增大,数据拷贝耗时越来越长且更容易出错,与此同时也造成了 GPU 资源的节约。
其次,将大量的数据拷贝到每台训练机上,会给存储系统和网络带来微小的压力。在输出数据常常变动的状况下,数据同步可能会非常复杂。
最初,手动拷贝数据既费时又容易出错,因为要放弃云存储上的数据与训练数据同步十分艰难。
计划 2:间接拜访云存储
另一种常见的计划如下图所示,让训练作业间接近程拜访云存储上的指标数据集。如果采纳该计划,数据集的大小就不再成为限度,但也面临着几个新的挑战:
首先,从 I/O 和工作流的角度来看,数据是串行解决的,所有的数据拜访操作都必须通过对象存储和训练集群之间的网络,这使得 I/O 成为性能瓶颈。因为 I/O 操作的吞吐量受限于网络速度,GPU 会呈现空转期待的状况。
其次,当训练规模较大时,所有训练节点须要同时拜访同一个云存储中的同一个数据集,会对云存储系统造成微小的负载压力。此时因为高并发拜访,云存储很可能会呈现拥塞,导致 GPU 利用率低。
最初,如果数据集由海量小文件组成,元数据拜访申请将占到数据申请的很大一部分。因而,间接从对象存储获取大量文件或目录的元数据操作将成为性能瓶颈,同时也会减少元数据操作老本。
举荐计划——数据编排
为了应答这些挑战和误区,咱们须要重新考虑针对机器学习工作流 I/O 的数据平台架构。这里,咱们举荐采纳数据编排来减速端到端的模型训练工作流。数据编排技术将跨存储系统的数据拜访抽象化,把所有的数据虚拟化,并通过标准化的 API 和全局命名空间为数据驱动型利用提供数据。
通过抽象化对立数据孤岛
该计划不拷贝和挪动数据,无论是在本地还是在云上的数据都留在原地。通过数据编排技术,数据被抽象化从而出现对立的视图,大大降低数据收集阶段的复杂性。
因为数据编排平台曾经实现与存储系统的集成,机器学习框架只需与数据编排平台交互即可从其连贯的任何存储中拜访数据。因而,咱们能够利用来自任何数据源的数据进行训练,进步模型训练品质。在无需将数据手动挪动到某一集中的数据源的状况下,包含 Spark、Presto、PyTorch 和 TensorFlow 在内所有的计算框架都能够拜访数据,不用放心数据的寄存地位。
通过分布式缓存实现数据本地性
咱们倡议采纳分布式缓存,让数据平均地散布在集群中,而不是将整个数据集复制到每台机器上。当训练数据集的大小远大于单个节点的存储容量时,分布式缓存尤其有用,而当数据位于远端存储时,分布式缓存会把数据缓存在本地,有利于数据拜访。此外,因为在拜访数据时不产生网络 I/O,机器学习训练速度更快、更高效。
如上图所示,对象存储中存有全副训练数据,两个文件(/path1/file1 和/path2/file2)代表数据集。咱们不在每台训练节点上存储所有文件块,而是将文件块分布式地存储在多台机器上。为了避免数据失落和进步读取并发性,每个块能够同时存储在多个服务器上。
优化整个工作流的数据共享
在模型训练工作中,无论是在单个作业还是不同作业之间,数据读取和写入都有很大水平的重叠。数据共享能够确保所有的计算框架都能够拜访之前曾经缓存的数据,供下一步的工作负载进行读取和写入。比方在数据筹备阶段应用 Spark 进行 ETL,那么数据共享能够确保输入数据被缓存,供后续阶段应用。通过数据共享,整个数据工作流都能够取得更好的端到端性能。
通过并行执行数据预加载、缓存和训练来编排数据工作流
咱们通过实现预加载和按需缓存来编排数据工作流。如下图显示,通过数据缓存从数据源加载数据能够与理论训练任务并行执行。因而,训练在拜访数据时将得益于高数据吞吐量,不用期待数据全副缓存结束才开始训练。
尽管一开始会呈现 I/O 提早,但随着越来越多的数据被加载到缓存中,I/O 等待时间会缩小。在本计划中,所有环节,包含训练数据集从对象存储加载到训练集群、数据缓存、按需加载用于训练的数据以及训练作业自身,都能够并行地、互相交织地执行,从而极大地减速了整个训练过程。
当初咱们来看看新计划与两种传统计划的比照状况。通过对机器学习工作流各个步骤所需的数据进行编排,咱们防止了数据在不同阶段的串行化操作以及随之而来的低 I/O 效率,也进步了 GPU 利用率。
如何对机器学习工作负载进行数据编排
这里咱们以 Alluxio 为例来介绍如何应用数据编排。同样,咱们还是看这个简化的场景,这里能够应用 Kubernetes 或私有云服务来调度 TensorFlow 作业。
应用 Alluxio 来编排机器学习和深度学习训练通常蕴含以下三个步骤:
- 在训练集群中部署 Alluxio;
- 将 Alluxio 服务挂载至训练节点的本地文件目录;
- 应用训练脚本, 从 Alluxio 服务的挂载点拜访缓存在 Alluxio 以及底层存储中的数据
Alluxio 挂载实现后即可通过 Alluxio 拜访不同存储系统中的数据,此时可应用基准测试脚本来通明地拜访数据,无需批改 TensorFlow。相较于须要整合每个特定的存储系统以及配置证书的惯例操作,这大大简化了利用的开发过程。
您能够点击查看参照指南,应用 Alluxio 和 TensorFlow 运行图像识别。
扫码查看指南
数据编排的最佳实际
鉴于任何计划都不能实用于所有场景,咱们举荐在下述条件下应用数据编排:
- 您须要进行分布式训练;
- 您有大量的训练数据(>= 10 TB),尤其是训练数据集中蕴含海量小文件/图像;
- 网络 I/O 速度不足以让您的 GPU 资源始终处于繁忙状态;
- 您的工作流波及多个数据源和多个训练/计算框架;
- 您心愿在可能满足额定训练任务需要的同时仍然放弃底层存储系统稳固;
- 多个训练节点或工作共享同一个数据集。
随着机器学习技术一直倒退以及框架执行的工作更加简单,咱们治理数据工作流的办法也将一直优化。通过在数据工作流中应用数据编排技术,端到端训练工作流能够实现更高的效率和资源利用率。
想要获取更多乏味有料的【流动信息】【技术文章】【大咖观点】,请关注[Alluxio智库]: