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 渠道工程师在数据架构和数据办理方面需求考虑以下几个问题:
1. 数据可拜访性:当数据跨过多个数据源且存储在远端时,怎么高效地获取练习数据?
2. 数据作业流办理:怎么把数据作为作业流来办理,在练习流程中无需等候,确保数据的继续供应?
3. 功能和 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 资源一直处于繁忙状况;
-
您的作业流触及多个数据源和多个练习/核算结构;
-
您期望在能够满意额外练习使命需求的一起仍然坚持底层存储系统安稳;
-
多个练习节点或使命同享同一个数据集。
随着机器学习技能不断发展以及结构履行的使命更加杂乱,咱们办理数据作业流的方法也将不断优化。经过在数据作业流中运用数据编列技能,端到端练习作业流能够完成更高的功率和资源利用率。
Reprinted with permission. IDG Communications, Inc., 2022. All rights reserved.
想要获取更多有趣有料的【活动信息】【技能文章】【大咖观念】,请重视[Alluxio智库]: