AI 运用对存储体系的应战是全面的,从离运用最近的数据核算怎么加快,到离运用最远的数据存储怎么办理,到数据存储和数据核算之间怎么高效流通,再到不同运用之间的资源调度怎么协调 …… 这其间每一个环节的低效,都有或许连累最终的 AI 使命的最终完结时刻,让 AI 运用在一向等候数据,多个 AI 运用之间无法高效并发。
本次同享,将以存储体系为视角,对 AI 运用加快中的悉数流程进行打开,剖析其间要害节点和解说相应技能,并同享百度智能云在 AI IaaS 建造上的最佳实践,加快 AI 运用。以上内容将为咱们在做 AI 存储的计划规划、技能选型、工程实践等方面上供给最前沿的参考。
本文收拾自 InfoQ《公开课》,文末顺便 Q&A和视频回看链接。
01 开场
今日的同享内容首要分为三个部分:
-
榜首部分简略整理一下企业的 AI 练习基础设施的开展进程,经过展现云原生 AI 练习的一个完好流程,总结出和其间存储相关的问题。
-
第二个部分对这些问题做一些简略的剖析,同享一下百度智能云是思考和剖析这些问题的。
-
最终一个部分介绍百度智能云的沧海存储在高功用范畴的全流程加快的计划,在这个计划里会对上述存储问题有完好的回答。
02 AI 练习中的存储问题
企业的 AI 练习基础设施是怎样一步一步开展到今日的容貌的呢?这个开展进程其实阅历了 4 个阶段:
-
阶段一:一开端企业练习的模型和数据量都不太大,最关怀的是练习的功用,对核算之外的其它部分重视比较少,基础设施是怎么能快速跑起来怎么来。这一阶段首要是单机的练习,存储运用本地资源,如内存和本地盘。
-
阶段二:等到模型、数据量变大之后,单机练习就不能满意企业的需求,企业开端多机练习。关于存储,一方面数据集或许大到单机无法存储,别的一方面数据集需求方便地被多机同享。这个阶段,一个便捷和省心的挑选便是去购买商用的网络存储。
-
阶段三:等到企业用户的练习规划、事务规划继续不断的增加之后,购买了越来越多的机器。从企业的角度来讲,希望能够充分地把核算资源运用率进步上来。企业在这一阶段引入练习渠道处理这个问题,让不搭档务的练习能够最大极限的并行跑在练习渠道上。这个阶段对存储的需求发生了分解。一方面,数据量大了之后,企业本钱灵敏,许多的数据需求大容量低本钱的存储。另一方面,关于练习的时分需求的那部分数据,仍是希望存储的功用能够满意练习的要求,这一部分仍然是一个高功用存储的需求。这个阶段企业的规划现已比较照较大了,有足够的动力去自研或依据开源计划二次开发整个存储体系。
-
阶段四:进入云年代,企业测验把现已比较成熟的体系往云上搬,所以看起来云年代的 AI 练习基础设施架构便是阶段三的翻版,关于存储而言,仍然是“大容量存储 + 高功用存储”的组合。但是这儿其完结已发生了比较重要的一个改变,便是它的数据流向和阶段三年代是不相同的,这在后边的部分有详细的介绍。
现在来看今日的云原生 AI 练习基础设施,最底层是数据湖存储,定位是大容量、高吞吐、高吞吐、低本钱、高牢靠的存储底座,是企业进行数据流通的中心。
在数据湖之上,针对 AI 练习的高功用需求,供给一个加快层作为数据湖存储的弥补,弥补数据湖存储在支撑高功用核算时功用缺乏的问题。靠近核算的位置有练习渠道、各类 AI 结构,和硬件基础设施。
假如咱们仔细观察企业的 AI 练习基础设施的开展进程,会发现其间的存储问题是不断的累加的,每一个阶段之前的问题仍然存在,但又出现的新的问题。
例如,在阶段一阶段二的时分,首要关怀的是练习功率,这时分对存储的要求是不能拖核算的后端,有必要能支撑好核算,这个问题无论是什么时分都是最中心的问题。因而,云原生年代面对的存储问题,涵盖了之前一切阶段的问题,咱们只需求剖析这一个阶段即可得到一切的疑惑和答案。
需求留意的是,从最开端的本地盘,到后来的商用网络存储、冷热分层、数据湖,存储在这个开展进程中出现出来的一个大趋势便是,存储离核算的距离越来越远。这就导致今日咱们去做一个云原生的 AI 练习,会阅历一个很长的流程:
-
云原生年代的事务数据首要是会集堆集到数据湖存储中,这儿就包括未来用于练习的数据。咱们面对的榜首个问题便是数据湖存储怎么选型,以确保能够牢靠的寄存企业的海量数据,这便是“ ①海量数据”问题。
-
预备练习前,由于数据湖存储不能满意练习时的功用要求,所以练习数据需求转移到一个速度更快的加快层中,这个转移进程便是“ ②数据流通”问题。
-
临近练习,练习渠道担任协调练习要求的各类资源,这儿当然也包括存储资源,那么存储和调度器怎么才干合作好,发生了“ ③资源调度”问题。
-
阅历了绵长的流程链之后,总算能够跑练习了,这个时分存储要到达一个什么样的功用,才不至于成为核算的瓶颈,这是“ ④核算加快”问题。
上面的流程整理下来是“ ①海量数据 -> ②数据流通 -> ③资源调度 -> ④核算加快”这样一个次序,但后边的部分会按照“ ④核算加快 -> ③资源调度 -> ①海量数据 -> ②数据流通”这样的次序叙述,从咱们最重视的核算加快问题讲起。
03 要害问题剖析和处理思路
3.1 核算加快
在剖析这个问题之前,让咱们经过一个简略的比如来了解一下一个典型的练习终究长什么样:
-
练习的核算会经过许多许多轮,每一轮称为一个 epoch,每一轮 epoch 重复以下进程:
-
首要,为了让算法到达比较好的鲁棒性、加快收敛速度,把整个练习运用的数据集随机打散,相似于咱们打牌前先把牌洗一遍,这个进程称之为 shuffle。至于样本集包括哪些样本,是从存储体系读取的。
-
shuffle 确定了数据集样本的读取次序,接下来,数据会进一步分红许多个批次(batch),算法接下来就读取一个 batch 练习一次,直到整个样本集都处理完。这个进程涉及到许多的读操作。
-
一次练习持续的时刻或许十分长,数个小时乃至数天数个月都有或许。一切的机器都没有办法确保在练习的进程百分之百没有毛病发生,毛病发生后,用户不会想从头开端核算,能康复到一个较近时刻点,从那个时刻点重新开端核算是最理想的。因而需求有毛病康复的机制,一般的做法是周期性的把练习的状况保存下来,毛病发生后,加载保存的状况继续核算。这个机制叫 checkpoint。checkpoint 对存储体系来说是写操作。
从上面的剖析,能够看到和存储有关的操作包括 3 种,shuffle、读 batch、checkpoint,前两者是读,后者是写。那么这些操作终究对练习发生什么影响呢?
为了回答这个问题,鄙人图中列出一个简略的公式。衡量存储在这个进程中心是不是好,咱们需求看的是整个练习进程中,真实用于核算的那部分时刻在总时刻中所占的份额。这个份额越高,说明存储的影响就越小。在不考虑其它要素、假定核算时刻不变的状况下,这便是要求让存储的影响时刻变短。
checkpoint 不必定每个 epoch 都保存,且是对存储体系比较友好的次序大 I/O,全体耗时占比较小,一般剖析时会忽略它的影响。当然,这儿的定论不肯定,假如遇到 checkpoint 慢的状况,能够做详尽的剖析。
读操作的部分,咱们首要看 shuffle。前面说到 shuffle 需求把整个数据集做一次打散,在这个打散完结前,其实是是没有数据能够核算的,也就意味着这是一个朴实等候的时刻。这个时刻从根本上无法彻底消除,只能经过更高效的完结办法、更好的存储功用,把它在全体时刻中的占比降到一个可接受的份额。
接下来看读 batch 的部分。关于 “读 batch 然后练习” 这个不断重复的进程,现代的一些练习结构其完结已做了许多的优化,现在在大部分结构里,“读 batch” 的这个进程,由所谓的 Data Loader 模块来完结,它的思路是让读的进程和核算自身并行起来。这对 GPU 练习的作用更明显一些。
在GPU练习中,核算和读数据的作业别离是由 GPU 和 CPU 来完结的,在 GPU 忙于一个 batch 的核算的时分,CPU 其实是空出来的,能够提前开端读取后边一个或多个 batch 的数据。整个进程出现出一种流水线的感觉。榜首个 batch 开端读的时分还没有数据能够核算,只能等候,但是从第二个 batch 开端,花费在存储上的时刻假如短于前一个 batch 核算的时刻,就能够被核算彻底掩盖掉。因而,这个阶段关于存储的要求是快到不连累核算、读等候时刻挨近 0 即可。
详细到这两个阶段,咱们能够拿起放大镜再仔细观察一下这儿到底包括哪些操作。
在 shuffle 阶段,需求把样本集包括哪些样本列出来,一种典型的朴素完结是将一切的样本按照目录分类寄存,咱们就能够经过文件体系供给的 ls 功用来枚举目录获取完好的文件列表,这时分就发生了许多的 open、getdents、close 操作,这些操作都能够归类为元数据操作。
多个 Data Loader 会发动多个进程,读取这个 batch 一切的样本文件,关于每一个文件都是 “ open -> stat -> read -> close” 这样的流程,其间 open、stat、close 是元数据操作,read 是数据操作。
咱们很简略观察到一个现象,关于一个样本数量确定的数据集,元数据操作的数量是确定的,只需 read 操作或许会由于文件巨细而改变,关于较小的(几百 KB 以下)文件,一次 read 操作就能够完结,关于较大的文件(数 MB 以上),需求调用多次 read。因而,样本巨细影响了元数据操作耗时的占比,元数据操作的耗时占比进一步决议了元数据仍是数据对练习的影响更大。
依据一些统计的成果,能够发现许多练习的样本集面对的状况是,样本数量十分大,但样本的均匀巨细又很小。以 ImageNet 数据集为例,整个数据集包括几百万(ImageNet 1K)、上千万(ImageNet 22k)的图片,均匀一个图片巨细仅为一百多 KB。这个巨细对存储体系来说是十分小的。
因而,许多 AI 练习都面对海量小文件的问题。假如咱们对存储体系的架构有必定了解,就会知道,在一个存储体系里,元数据的扩展性和功用是远比数据部分差的。这个定论无论对单机的存储体系仍是分布式的存储体系都建立。 **
那应该怎么来处理这儿面对的核算加快问题呢?
假定要处理的这个问题是咱们的敌人,咱们要打败它,有几个方向能够测验的方向:
方向一:我发现敌人太强大了,能不能削弱它的实力,让它变得更弱呢
前面说到海量小文件场景的要害是元数据操作的占比较高,一起也说到,元数据操作的功用在存储体系里是更差的。那么咱们是不是能把较难的元数据操作转化成更简略的数据操作呢,假如能做到这一点,就能够把问题简化。
这儿选用的优化措施首要是软件层面的。关于 shuffle,能够为样本集保护一个独自的列表文件,或许选用更合适的元数据体系。关于读数据,能够经过 TFRecord、HDF5 等打包格局,对小文件进行打包,变成大文件。这些操作的中心都是将元数据操作转化成更简略优化的数据操作。这类优化措施的首要缺点是需求用户改变运用习气。
方向二:不论敌人有多强大,让我自己变得更强肯定没错
硬件层面,便是敞开 “买买买” 方式,花更多的钱,运用更高规格更快的硬件来支撑练习。例如,存储介质方面运用更多的内存、更快更多的 SSD 硬盘等,网络方面晋级到 100G/200G 的高速 TCP/RDMA 网络。
软件方面,对软件架构做一些晋级来进步整个软件体系的扩展才能,缩短软件栈的 I/O 途径长度。这儿咱们或许有必定了解的计划便是并行文件体系,这一类文件体系经过 hash、stripe 等办法将元数据和数据尽或许地涣散到更多的节点上,以此来进步元数据和数据的并发处理功用。这类体系一起还会完结私有的内核客户端,恳求直接发送给存储节点,以此来缩短 I/O 途径。
方向三:在咱们和敌人相对实力不变的状况下,想办法让敌人离我更近,让同等力道的拳头对敌人造成更大的损伤
这样的办法相同包括硬件和软件上的一些办法。
硬件方面,咱们能够在组网的时分让核算节点和存储节点在物理上靠得更近。这件事情和硬件晋级自身是独立的,由于假如仅仅是晋级硬件,一次操作仍是需求跨过许多跳交换机,功率相同会遭到影响。关于单机而言,GPU Direct Storage 这样的技能,能够让 GPU 直接去读取存储体系上的数据,消除掉一部分 CPU 处理的开支,实质上是抄了一个近道,少绕了一些路。
软件方面,能够做的一点是让需求拜访的数据能够尽或许的搬到核算节点本地,或许和核算节点比较近的地方。这便是缓存的思路,经过运用核算节点本地的冗余的内存、磁盘资源,让一些恳求在缓存里处理掉,会比直接拜访存储体系的功用更好。
到现在为止,咱们的这些优化思路里,现已提出来两个比较重要的软件计划,一个是并行文件体系,一个是缓存。接下来再稍微打开介绍一下这两类体系。
并行文件体系和其它品种的文件体系有什么样的不同呢?今日咱们去检查公有云厂商的官网,能够发现文件存储产品一般分为两类:
榜首类体系是 NAS。这是一种对标 NetApp 这类传统厂商供给的网络文件存储产品,供给规范的 NFS、SMB 协议拜访才能,产品形态上是 serverless 的。这样一类产品的一个特色便是规范,NFS 和 SMB 协议是得到业界认可的规范协议,用户运用时没有兼容性负担和学习本钱,干流操作体系也会内置支撑,基本上是开箱即用的状况。但这类存在的一个最大缺点便是,为了去兼容规范的协议,需求在处理途径上引入专门的协议处理节点,这些节点担任将恳求转化为存储节点能够理解的内部格局。这种架构有两个影响功用的问题。榜首个问题是让恳求的处理链条变得更长,让延时变大。第二个问题是协议处理节点自身或许成为处理瓶颈,影响并发度。
第二类体系是并行文件体系。并行文件体系走了和 NAS 相反的道路,专门针对特定的高功用场景去做一些极致的优化。这类体系一般会抛弃或弱化对规范协议的兼容性,取而代之,完结私有的客户端协议,一般运转在内核态。事务的恳求进入客户端后,迅速、直接发往后端的存储节点。这种规划让软件上的 I/O 途径到达最短,充分运用后端节点、设备的并行处理才能。这类体系的代表有 Lustre、BeeGFS、GPFS,和百度智能云PFS。
简略总结一下,想要兼容性更好,挑选 NAS 类的产品,想要功用更高,挑选并行文件体系产品。
从咱们之前的剖析能够看出,AI 场景下对数据集的运用是只读的。因而,关于 AI 练习场景,缓存是一个十分好的优化手段。详细做法是将数据缓存到核算节点本地或临近节点的内存、磁盘上,到达就近拜访的作用。缓存体系在 cache miss 的状况下需求从远端存储体系读取数据,功用是比较低的,练习中应该尽量防止这样的状况。
现在,本范畴业界干流的缓存处理计划分为两大类。一类是 Alluxio 这类比较照较朴实的缓存体系,不改变数据的格局,忠实地做一个数据的搬运工。别的一类是近些年比较抢手的云原生文件体系,如 JuiceFS,这类体系在目标存储之上重新界说了一层数据结构,数据只能经过体系自身拜访。无论是哪一类体系,进步核算侧功用的实质仍然是缓存。阿里云 JindoFS、百度智能云 RapidFS 都是兼有这两类缓存体系才能的一致处理计划,用户能够依据自己的实际需求挑选不同的作业方式。
现在为止,现已说到了并行文件体系和缓存两大类软件处理计划,那么困扰挑选恐惧症患者的问题来了,它们终究有什么差异,该怎么选。
并行文件体系首要是面向高功用场景(传统 HPC、AI 场景)优化,供给了对 POSIX 规范文件体系接口的完好支撑,所以大部分通用文件体系的需求,相同能够用这类文件体系来满意。从久远的开展趋势看,并行文件体系的依然是去兼容 POSIX,将文件体系的规范才能做大做强做好用。
缓存体系的完结则相对灵敏许多,彻底是为有限的特定场景定制的一类体系,现在在云上的首要服务场景是 AI 和大数据存算别离。这类体系的一个重要开展趋势是继续探究一些非规范的才能,和上层的结构、生态加强融合。
所以,全体上来看,并行文件体系能够适用于需求规范文件体系的场景,缓存体系是合作目标存储运用的定制体系,这两个计划只是在 AI 场景下发生堆叠。假如事务尚未没有完结云原生的改造,或许强依赖文件体系的一些语义(如多进程并发写同一文件),并行文件体系是更省心的挑选。假如事务现已是数据湖为中心的云原生架构,在 AI 的场景下,能够测验缓存体系。
从久远看,这两类体系更多的是互补的关系:
-
功用方面:尽管说缓存体系一般是用来加快一些相对较慢的存储体系,但并不能排除能够用来进一步加快并行文件体系。例如,元数据恳求即便经过并行文件体系处理比较快,但仍然发生许多轮的网络拜访开支,假如能在其上叠加一层元数据缓存,对进步功用也是很有协助的。
-
功用方面:缓存体系能够更好的完结一些非规范的才能,合作一个规范的高速文件体系,能够有一些好玩的用法,这些用法其实也是业界探究的方向。例如,前面说到一种优化 shuffle 的办法是运用文件列表代替 ls,缓存体系彻底能够完结一种功用,将列表映射成文件体系目录的结构,并缓存下来,而数据拜访继续由并行文件体系处理。这样的办法能够让之前的练习代码继续运用,不感知其间的改变。
3.2 资源调度
一切的练习渠道都存在一个终极的梦想,便是让核算资源运用率维持在一个较高的水位。这个水位假如能到 60%+、70%+ 是一个很了不得的事情。这儿有些同学或许不能理解,平常的练习很简略到达 90%+ 的运用率呀,为什么上了练习渠道就下降了呢?
首要的原因是在一个完好的练习流程里,除了核算的部分,还有许多其它的操作和步骤,练习之间也或许存在串行、并行等关系。这些操作假如调度上处理欠好,让核算资源处于等候的状况,就会拉低全体的运用率。此外,还有低峰期这样的要素进一步拉低运用率。
本文讲的是存储相关的问题,不会涉及核算侧的相关优化。假如想要了解核算优化的部分,能够看一下我的两位搭档之前做的很精彩的同享,链接如下:
-
百度智能云技能站:双引擎 GPU 容器虚拟化,用户态和内核态的技能解析和实践同享
-
InfoQ 直播回放:www.infoq.cn/video/RBZSK…
回到咱们今日的主题,存储这部分在渠道化练习和云原生练习阶段面对的问题是一致的。在这两个阶段,咱们会发现许多时分数据的来历是速度较慢的大容量存储或许数据湖。这就导致在真实开端练习前,需求一个数据预备的阶段,将数据搬到速度更快的存储里。
咱们来看一个简化的比如,Task 1 和 Task 2 恳求同一批 GPU 资源,数据预备时刻和 GPU 核算时刻相同长。
假如不在调度上做优化,直接按照算力需求,将使命作为全体调度,即下图中的调度战略 1,那么 Task 1 和 Task 2 只能串行履行,中心有很长的时刻被数据等候糟蹋掉了,整个时刻段的 GPU 运用率均匀下来只需 46%。这样的状况明显是不理想的。
让咱们换一个角度看这个问题。回想一下 Data Loader 是怎么处理让读数据和核算并行的,明显这儿的问题也是相似的。咱们彻底能够让数据预备的时刻和练习的时刻并行起来。如图中的调度战略 2 展现的那样,在Task 1 练习的期间,就能够开端 Task 2 的数据预备作业。在这个比如里,刚好 Task 2 的数据预备时刻都能够被躲藏掉。这个调度战略能够让全体的 GPU 运用率进步到 62%。
这儿的思路具有必定的普适性,关于优化其它的资源运用率问题也有参考意义,实质上便是让不发生竞争的环节最大或许的并行运转,到达工厂流水线的作用。
思路有了,详细应该怎么做呢。有聪明人在开源社区现已先行了一步,完结了一个依据该思路的项目 Fluid。Fluid 自称是一个数据集编列跟加快的这样一个结构,其间心思维便是上面描绘的流水线调度。
Fluid 把数据集的预备作业从整个流程里独自抽取了出来,运用底层的 K8s 分配需求的资源,例如缓存体系需求的内存和磁盘资源。资源分配出来后,能够挑选性的建议元数据和数据的预热作业。等预热作业完结之后,再由 K8s 调度核算资源运转练习使命。练习使命能够挑选是否亲和,所谓亲和是让缓存的节点和核算的节点是同一批节点,这个能带来什么样的优点待会儿会讲到。练习完结后,用户能够视状况而定决议何时收回 Fluid 占用的资源,这个进程和核算也是独立的。
现在,社区对 Fluid 的定位仍然是环绕缓存体系打开的,但咱们认为数据预备在 AI 练习里是一个普遍的问题,相同的原理也适用于并行文件体系和其它存储体系。从这个角度看,Fluid 的适用范围能够超出社区对它的定位。
在这个问题的最终,对 Fluid 的亲和调度稍微打开再介绍下。亲和性调度首要对缓存体系有协助,体现在两个方面。
榜首个优点是功用方面的。核算节点和缓存节点是同一批节点,确保了核算节点拜访缓存数据的物理途径是比较优的。一起,部分数据经过本地就能够满意,不再需求网络拜访。
第二个优点是容错方面的。缓存体系和并行文件体系最大的一个不同是自身的容错才能较弱,缓存节点毛病,就意味着其上的缓存数据失效。假如没有亲和调度,即便能够从远端重新拉取数据,也需求忍受一段时刻的功用下降,这段时刻会拉低核算资源的运用率。有了亲和调度之后,缓存节点和核算节点一起失效,在康复核算使命前有时机先康复缓存数据,就规避了功用退化的问题。
3.3 海量数据
前面咱们的重视点首要在 AI 练习部分,这部分对存储的功用有极致的要求。但假如咱们放眼去观察一下一切 AI 相关的流程,包括数据集办理、项目办理、预处理这些,会发现除了练习和预测,其它的流程对高功用并没有一个很强的诉求,它们的需求归纳下来是一个高吞吐、可同享、大容量、高牢靠的存储体系。
在考虑到企业中存在其它各种事务,这些事务或许是 AI 的数据集来历,也或许是 AI 的运用方,这个存储体系需求能够方便地和这些事务进行数据沟通。综合来看,一致的数据湖存储是最佳挑选。
**有必要指出的一点便是,挑选数据湖的背后,是事务间的数据流通办法现已发生了天翻地覆的改变。**在云原生之前,不同类型的事务处于信息孤岛的状况,大数据的事务运用 HDFS,高功用核算运用并行文件体系,数仓体系自己保存数据。体系 B 需求运用体系 A 的数据,需求把数据从体系 A 里导出来一份。这种点对点的数据沟通明显是比较低效和繁琐的。
数据湖、存算别离这些概念的兴起,让业界到达一个共识,那便是建造一致的数据湖存储底座,环绕数据存储进行数据流通,能够有效的处理体系间数据流通的问题。对这部分内容感兴趣的同学能够阅览“百度智能云技能站”大众号的的数据湖系列专题文章。
咱们认可的数据湖存储候选体系有两个,一个是大数据范畴运用较多的 HDFS,一个是起源自 AWS S3 的目标存储。
HDFS 首要有两个模块,别离是用来供给元数据服务的 NameNode,和用来存储数据的 DataNode。HDFS 的元数据是按照树形结构来安排的,即所谓的层级命名空间。这种元数据安排办法的特色便是除了根目录外,每一个文件或许目录,都从属于一个父目录,从根目录往下看,就像是一颗倒挂的树。HDFS 的数据一般是 3 副本保存的。
目标存储的架构首要分为三个部分。首要由于目标存储供给的接口方式是规范的 HTTP,需求一些 Web Service 服务器来处理接口调用。Web Service 服务器处理的进程中会依据恳求的类型拆分红元数据恳求和数据恳求,别离交由相关的子体系来担任:
-
元数据子体系:在完结上一般依据分布式 KV 或 NewSQL ,供给平整命名空间。平整命名空间的特色是其间的每一个目标(等价于 HDFS 中的文件或目录)没有从属关系,相互独立。数据子体系。
-
数据子体系:运用纠删码(Erasure Coding,EC)技能存储数据,它的原理是将原始数据切成 N 个等巨细的块,并核算出 P 个冗余的校验块。这些数据块和校验块存储到不同的节点上,只需有不少于 N 个块存活,就能康复出来完好的数据。
咱们来简略地从几个方面比照一下这两个体系:
-
本钱:目标存储的本钱要比 HDFS 低许多,由于以下几个原因:
-
首要是副本数。HDFS 自己有 3 副本,直接搬到云上运用云磁盘建立,还存在副本放大问题。由于云磁盘自身也有 3 副本,叠加起来其实是 9 副本的开支。与之比较,目标存储的纠删码能够做到 1.5 副本乃至更低。这部分的本钱就差出来许多。
-
其次,云厂商的目标存储对不同冷热程度的数据运用不同的纠删码配置和存储介质,最冷的数据能够存储到磁带中,磁带比 HDFS 运用的机械硬盘本钱更低。
-
最终,HDFS 的数据湖是存算一体架构。所谓存算一体是说,相同一批机器既用来跑核算,也用来跑存储。这个架构的优势是能够完结亲和调度,调度的时分让核算使命直接跑到数据所在的节点上,和咱们前面说的缓存亲和调度殊途同归。但这也带来了一个问题,便是核算有必要和存储同步扩容,实际中很难做到刚好匹配,必然会存在一类资源的糟蹋。这个问题在目标存储存算别离数据湖架构上不存在,目标存储服务只供给朴实的存储才能,核算资源是客户按需购买的,核算需求不存在的时分乃至能够不买核算资源,十分灵敏。选用存算别离架构,用户能够防止许多核算资源的糟蹋。
-
扩展性:层级命名空间和平整命名空间比较,扩展性要差许多:
-
这儿首要便是由于层级命名空间需求保护父子关系。HDFS 为了简化这个关系的保护,运用了单点 NameNode 的规划,数据还直接放在内存里,这导致这个单点很难扩展,功用上限也比较低,一般一个体系只能保存数亿文件,几十 PB 的数据。尽管社区后来推出了 Federation 的功用,但没有实质上处理问题。
-
目标存储则不同,平整命名空间里的每个目标天然没有任何关联,能够作为独立的个体对待,关联性的打破让扩展性更简略做。云厂商的目标存储服务因而能够做到一个集群 EB 级的容量,万亿条元数据,比 HDFS 大许多。
-
可用性&牢靠性:HDFS 是一个单机房的服务,同一个数据只能容忍 2 个副本出现问题。目标存储能够布置到多个机房,EC 编码也能够容忍更多的块丢掉,如 18 + 6 的编码能够容忍 6 个块毛病,这些确保了目标存储能够供给更好的可用性和牢靠性确保,完胜 HDFS。
-
吞吐:咱们对数据湖比较重视的功用指标便是吞吐,这个指标和集群规划是强相关的,集群的节点数越多,磁盘数量越多,能够供给的吞吐就越高。云厂商的目标存储在这方面有天然的优势,一方面集群规划要大许多,别的一方面其间许多数据的拜访频率十分低,不会对需求高吞吐的数据发生挤兑,功用简略得到确保。
-
生态:两个体系都是接受度比较高的。目标存储缺乏对 rename、边写边读等特性的支撑,使得它现在还不能满意部分大数据的场景需求。不过云厂商也在积极的处理这些问题,例如百度智能云推出了 RapidFS 和 BOS 层级 Namespace 作为弥补。
经过这样的比照,能够得到一个简略直观的定论便是在目标存储是数据湖存储的首选。
3.4 数据流通
数据湖存储成为整个数据流通的 C 位之后,带来的最大的一个改变便是数据流向彻底逆转了。在传统的架构里,大容量的冷数据存储和高功用存储是别离保护的,关于 AI 练习的部分,数据的存储、生产、消费都发生在高功用存储中,自成体系,只需转冷的数据才会考虑转移到大容量存储中去。份额较小的反向数据流通(从大容量存储到高功用存储)经过东西来处理。
但到了数据湖里,数据湖存储才是最全量、最威望的数据来历,大部分状况下,数据的榜首个落脚点是数据湖,然后才会到高功用的加快层。在存算别离架构中,加快层自身都只是临时的存在,其间的数据生命周期和核算资源同步,略早于核算资源的创立而生成,核算资源毁掉时同步删去。这就导致数据湖到加快层的数据同步成为一个高频、中心的需求,需求花大力气处理。
很简略想到的是一种比较朴素的计划,经常被咱们用来做数据同步和迁移。简略的讲,这个计划便是预备一个中起色,在同一台机器上把数据湖存储和加快层高功用存储都挂载上,然后运用 cp 或 rsync 之类的东西来搬家数据。
咱们假如运用过这样一类办法,会很简略发现存在一些问题:
-
榜首个问题是同步速度慢。这儿遭到许多环节的约束,中起色的硬件配置、存储体系单客户端的并发度等等要素。文件体系层也有许多冗余开支,这些冗余开支首要来自元数据,关于读的那方,每个文件都需求 open、stat、close,关于写的那方,每个文件需求 open、setattr、close。前面剖析练习功率的时分提过这类操作对海量小文件十分不友好,但经过 cp、rsync 无法优化掉这些开支。
-
第二个问题是同步战略不可定制,在有一些场景下,咱们或许会希望只做元数据的同步,或一些特定条件数据的同步。例如,一些练习里文件都很大,练习使命对延时不灵敏,数据湖存储就足以满意吞吐的要求,这时分只需求元数据的缓存。cp 和 rsync 这样的东西无法满意要求。这种办法在处理增量同步的时分也比较低效,需求比照全量的文件列表,而目标存储是支撑通知机制的,假如能运用这一点能够极大地改进增量同步的功率。
-
第三个问题是和调度器的集成困难。朴素的计划在完结上选用脚本和命令行东西完结,复杂的环境下稳定性比较差,状况的获取和解析也不是很灵敏。假如操作体系环境改变了,没测试过,真实运用的时分或许会发现跑不起来。这些问题导致和调度器集成时会遇到各式各样的问题,需求人工介入排查,保护本钱极高。
-
最终一个问题是这种办法同步成功还好,同步失利后需求善后,处理残留的废物,这些也需求介入或许半人工的办法来处理。
上述诸多要素的叠加,让朴素计划在云原生年代显得十分的粗笨和低效。咱们认为,加快层的存储体系内置数据同步的才能才是处理这一要害问题的正确思路。
在体系内部完结,能够处理朴素计划存在的各类问题。
关于同步速度慢的问题,充分运用体系的多个节点去并发的同步数据,缩短中心环节,不给中心商赚差价的时机。
至于哪些数据同步,哪些不同步,在体系内部很灵敏,简略完结各式各样的战略。
调度器方面能够结合前面说的 Fluid 结构,将同步的建议、状况的展现、容错做到彻底主动化。
废物收回的问题也相同能够在 Fluid 的结构内处理掉,由 Fluid 的机制确保资源主动释放。
04 百度沧海存储全流程存储加快计划
百度沧海存储依据上面的剖析,推出一整套高功用存储的处理计划。
计划的数据湖部分由目标存储 BOS 来承当,除了前文剖析的大容量、高吞吐、低本钱的特色,还内置了分级存储和智能生命周期功用。分级存储是进一步细分目标存储数据冷热降低本钱的手段,合作智能生命周期能够让事务在更高的功用和更低的总持有本钱之间取得平衡。
支撑练习的部分由专门的加快层来完结。这一层首要从网络环境确保存储和核算是离得比较近的,让存储能够到达最好的功用。在这基础上,包括两个软件产品,一个是并行文件体系 PFS,一个是数据湖存储加快 RapidFS。每个 PFS 实例布置在保管的裸金属 BBC 上,或许虚拟机 BCC 上,无论是哪种方式,运用的硬件功用均有定量确保。每个 RapidFS 实例的资源则来自核算节点本地的内存和磁盘。PFS 和 RapidFS 均支撑 Bucket Link 完结数据湖数据的主动同步,一起也支撑 Fluid 调度器。
在咱们的计划里,对之前讨论的问题都有回答,详细如下:
-
海量数据:由 BOS 及周边生态处理。
-
数据流通:PFS 和 RapidFS 内置的 Bucket Link 才能支撑主动从数据湖同步数据。
-
资源调度:PFS 和 RapidFS 均支撑 Fluid 调度器,运用办法挨近,用户可灵敏切换。
-
数据加快:PFS 和 RapidFS 作为数据湖加快层,选用高速硬件,近核算布置的办法确保功用。
最终简略看一下 PFS 和 RapidFS 在实际支撑用户练习时分的作用。在这个比如里,有三组数据,别离是依据 RapidFS、PFS、目标存储直接来做 GPU练习。能够看出,当 RapidFS 和 PFS 运用 Bucket Link 做完数据预热之后,能够确保练习期间的 GPU 运用率打满。依据目标存储直接来做这个练习的话,中心很大一部分时刻是消耗在数据的读取上,整个 GPU 运用率在一个十分低的水位上。经过这样一个实验,咱们大致能够看到 RapidFS 跟 PFS 在核算加快这一块的作用。
05 Q&A
问题 1:为什么目标存储能让存算别离?HDFS 不能够?这个不是取决于核算和存储的架构吗?
一切的技能选型都离不开当年的大布景。
存算一体架构自身在过去是十分棒的规划。其时的网络没有那么快,存算一体能够让核算和存储获得更好的亲和性,极大的降低了网络上的数据传输量开支。但随着数据量的爆破式增加和网络速度的改进,存算一体架构的问题逐渐暴露出来了。
首要,存储和核算对资源的需求不匹配,扩容时很简略导致其间一种资源的糟蹋。
其次,网络速度的改进让数据传输变得很快,亲和性的重要性降低。
第三,HDFS 自身的扩展性缺点也暴露出来了,不能支撑上百亿文件。目标存储作为云厂商供给的一种存储服务,处理了扩展性的问题,本钱也比自建 HDFS 更低价。
更重要的是,目标存储让用户的核算资源和存储资源能够解耦,彻底能够按需运用,核算资源的本钱也降低了。
这些优势综合下来,让目标存储成为存算别离架构的首选。
运用 HDFS 来做存算别离架构,它的扩展性和本钱会比目标存储差许多。HDFS 当然也在处理这个问题,但其规划的下一代 OZone 实际上便是目标存储。
问题 2:在进行存储体系选型的时分,你们会优先考虑什么?
不同的存储体系有各自适用的场景,最重要的是调研清楚这个存储体系服务哪些事务,这些事务的拜访方式是什么样的。例如,大数据事务次序读写比较多,且多为大文件,所以它对存储的要求首要在吞吐方面。要满意吞吐的要求,就不必定需求很快的硬件,经过堆机械硬盘,相同能够到达很高的吞吐。再例如,假如你的事务拜访元数据拜访十分频繁,或许发生许多的随机小 I/O,这时分就需求考虑高速的硬件,软件架构也需求有针对性的优化。咱们需求先从事务的拜访方式了解它重视哪些方面的功用和功用,然后再去做存储硬件和软件体系的选型。
问题 3:怎么将本地存储与公有云存储打通?
公有云厂商的数据打通基本都是经过目标存储来满意的。只需网络是通的,用户能够经过 SDK、FUSE、命令行东西等多种办法运用目标存储。假如需求进行数据同步和迁移,纯软件的计划有相似 rsync 的东西。数据量比较大的状况,百度智能云还能够供给一种叫月光宝盒的硬件,相似一个很大的移动硬盘,用户能够把数据拷贝进去,邮寄到百度智能云的机房,在百度内网完结数据的上传。更多的办法咱们能够去 BOS 的官网了解。
问题 4:Ceph、HDFS 的差异是什么?
在回答它们的差异之前,先看看它们的共同点,它们的共同点是都能够归类为所谓的软件界说存储。在它们出现之前,存储软件都是跑在磁盘阵列这种专业的硬件之上的,依托硬件来处理数据牢靠性的问题,但 Ceph、HDFS 能够跑在通用服务器上,数据牢靠性由软件自身确保,这是一个巨大的改变。
它们的差异在于定位不相同。HDFS 是专门面向大数据规划的,针对大数据的事务特色,完结了 POSIX 规范的一个子集。Ceph 包括 3 个子体系,别离是文件存储 CephFS、块存储 RBD、目标存储 RGW,其间 CephFS 和 HDFS 有些相似,但对 POSIX 规范的兼容程度要比 HDFS 高许多。例如随机写、hardlink 这样的才能没有被 HDFS 支撑,但 CephFS 就支撑。
问题 5:请问一下 AI 练习预读时,存储体系能够知道预读的文件有哪些吗?
存储体系需求结构主动去读取才知道预取的是哪些文件。现在业界在做的一个探究便是让存储和结构合作,经过一些非规范的接口让存储体系提前知道某个核算节点需求那些数据,这样就能够在结构真实读之前就将这些数据搬运到核算节点本地了。这个思路能够进一步把 shuffle 也卸载给存储来做。
问题 6:请问一下百度沧海 RapidFS 是 POSIX 部分兼容的吗?
是的,兼容的是 HDFS 接口。RapidFS 有两个方式,一种定位是缓存,和 Alluxio 比较挨近,只完结缓存加快才能,对 HDFS 的兼容性和底层目标存储彻底对齐,不供给 rename 原子性、边写边读这样一些特性的支撑。别的一种方式是云原生文件体系,和 JuiceFS 相似,在目标存储之上重新安排数据,供给完好的 HDFS 兼容性。
问题 7: RDMA 技能比较直接用高功用 SSD 有优势吗?
这两个不应该拿来比较谁代替谁,是鱼和熊掌能够兼得的关系。高功用场景下,RDMA 调配机械硬盘,作用不会好。反之,SSD 盘调配万兆的 TCP 网络作用也欠好。高功用场景重视端到端的延时表现,需求叠加了网络的奉献和存储介质的奉献。
问题 8: 写更多的场景应该运用 PFS 吗?
是的,特别是存在许多随机写的状况。PFS 的定位是一个完好兼容 POSIX 的文件体系,而 RapidFS 是一个缓存服务,和 HDFS 比较挨近,对随机写的支撑很弱。
本次线上同享回看链接:www.infoq.cn/video/TIyuf…