算力赋能AIGC专题训练营:高性能存储CPFS在AIGC场景的具体应用
课程地址:https://developer.aliyun.com/trainingcamp/5c9aaef8f02e49dbb0a8dc961ac71248
高性能存储CPFS在AIGC场景的具体应用
内容介绍
一、AI训练的IO分析
二、高性能文件存储CPF S加速AI+HPC智能创新
三、阿里云提供专属智算平台
四、阿里云提供Serverless智算平台
一、AI 训练的 IO 分析
今天给大家带来的课程是在AIDC场景里面,怎么通过高性能存储CPFS,可以加速大家在AI训练场景中的数据读写的效率。
首先带大家一起去看一下整个AI训练场景的数据的IO模型。如果对于AIGC或者AI的各种场景里面,已经研究有一段时间的话,可能会有更有体感。但是没关系,如果你之前没有了解过这个领域,具体在数据层面它是怎么一步一步的在整个训练的环节,包括推理环节里面怎么去推进的。大家也可以今天跟着我在这一页片子里面一起去学习一下。
其实大家可以看到,经常谈到一些AIDC训练模型不管是在GP3、GP4,其实大家都在讲我的一个数据集到底有多大,或者在一些自动驾驶的一些领域,它的训练数据集到底有多大。其实这个数据集的差别,这个范围是非常大的。
比如我们今天看到的话,实际上有很多不仅仅是小模型,甚至有大的模型,它的训练数据集并不大,仅仅可能只有一百多个GB,甚至就只有几10个GB,它续集并不是大家想象当中,是不是我需要一个万卡的集群,就一定是一个PD的原始的训练数据集,其实并不是这样的,因为你要看它训练的数据集的类型是什么样子,比如你一个text to image这种文本设置图片,那它很多血液数据集就是一些文字,它不太可能有很海量的血液数据集产生的。但对于一些比如像这种自动驾驶,它很多的训练数据集就是一些图片,我们录了大量的视频,你把它截成这一张的一个图片,但是他的训练数据相对来讲比较大,所以它跨度是非常大的。在读取整个AI训练过程中,一定会发生一件事情,譬如我又需要从GPU去读取这个文件,目前我应该看到这个地方给大家举一个例子,比如一个GPU,需要在以32路形式并发的读取大量的这种小文件,可能是100K的,可能是一兆十兆的这种文件的一个格式。让大家在左侧这个图形院里面第一个iteration,我们每个iteration的读取数据的时候,它这些GPU都会去读取整个数据集的一部分。当然这个不是绝对,有些训练,比如说单机单卡,或者单机多卡的,有可能一个GPU,它需要去加载所有数据,这都很正常。所以大家不要被这个图所迷惑,这个地方只是举了一个例子。
在训练的过程中,我读取了这么多数据,我可能希望我训练了时间比较短,有可能是几个小时就训练完了,但是有的训练时间是比较长的,动辄需要几天的时间,几周的时间,甚至于按月去计算。大家想象一下,如果在训练的过程之中,因为我的参数,需要去调整或者参数的配置出现的一些问题,或者训练过程之中,我的GPU或者训练框架出现了问题。它出现了一些任务的失败,那怎么办呢,那我是不是会去浪费几个小时,甚至于最高的时间,可能会浪费三个月的时间。所以在整个AIG的训练的判断里面,他又带了一个新的概念,就是check point,我定了一个打一个标,这个标志我把整个模型的checkpoint以及每个GPU的卡的状态给保存下来,这样的话当我需要去调整的时候,不管是主动的调整,比如要去调参,或者说被动调整,比如整个虚拟集群出现了故障,这时候都可以非常快速的去回归到上一个采集的点,就是这个check point去重新开始去训练。比如今天可能比较流行的,比如半个小时打一次check point,那也意味着你不管训练从头到尾究竟需要去延续多长时间,其实你最多损失的时间就是30分钟。当然你可以打的更密集,比如十分钟,当然你可以打的更长。这根据于每个实际的业务团队或者实际的研发团队自己去制定这个相关的策略。所以这个地方我们可以看到说,当iteratio大家在左侧的图里面看到读完数据训练的时候一定会在一个时间段,比如半个小时之后,我要写入我的check point。在写实际方案的时候,就会在整个GPU的集群里面选拔几个。比如这个地方在50B的参数下,我做了一个示例,我们会选择4个GPU卡去写整个模型就是model整个模型的check point ,然后每张卡都会去写自己的stage statement状态的check point。这样大家就会看到,到底这个对于存储、对于写这块的需求是什么样,大家应该是比较有一个直观的感受的。比如说在50B的参数下,整个模式采矿就是100GB,如果切成四路去并发去写的话,那意味着每张卡需要去写25G的文件。同时因为每个GPU的状态的check point是1.2G大B这样的话,整个集群如果在512张卡的情况下,就要写到600G卡的状态check point,这就是整个50B的模型的参数下,512卡的情况下,我们就需要在每个check point的阶段需要写入700G的数据。这个数据其实对于训练的影响是蛮大的,因为大家知道就今天上打点就类似于做一个快照一样,它已经是一个串行,我需要整个GPU是闲下来的。在这个时刻他是不做训练的,他需要等待写check point这些事情完成,什么时候把这700GB的数据写入完成、持续化完成之后,他才能去从check point2解脱出来,去进入到下一个information,去加载新的数据,加载新的一些参数,再重新训练,再进入到check point三的一个过程。对于写这种串行的点,它对于性能的存储的性能要求是非常高的。那什么时候会读check point呢,刚才已经讲过了,可能是因为是主动的需要去调整参数,所谓的发现新的过程,也可能是因为整个集群出现了一个问题,需要去回溯,需要回溯到上一个健康点。比如这个图里面对,check point3是健康的,是满足收敛的一个要求。进入到了下一个generation,继续写,训练过程发现不太对,收敛的效果或者梯度的效果跟预期不太一样。这时候可能就会临时的去中断,直接把这个任务给中断掉了。这个imation然后把它回溯到上一个check point,就是check point3,这时候就需要从我的存储里面去快速把数据再读回来,要加载回到整个集群,回到check point3的状态,然后再去新启动一个generation。这时候如果训练比较理想的话,我会写check point4下一个分支,然后继续往下走到了下一个generation。这个point一路这么走下去等等这么往返的去往复。在读这块的时候,大家可以看到在这个过程它一定也是读等待的,GPU其实在这个时刻也是没有办法去做其他事情的。需要等到我的数据从这个存储里面把model,把每个GPU卡的状态都能够回溯到check point3状态的情况下才能够往下走下去。所以和check point相关的一些读写的操作,其实对于存储的性能要求是比较高的。反而在训练数据集的加载过程这一块,其实今天是有很大的优化手段。比如可以去异步的加载,通过一些数据管道的一些技术,通过在iteration开始之前,就已经提前把数据加载到缓存里面。比如内存的缓存里面,这个反而是可以去异步的。因为在AI或者AIGC这个场景里面,是非常关注check point的整个读写对于存储的要求的。当然下面我也给大家举了一些例子。
|
业务类型,模型 |
单机 8 卡性能要求 |
读训练数据 |
自动驾驶,Resnet-50 自动驾驶,Swim-Transformer 自动驾驶,ViT-L-32 语音/NLP,Bert-base AIGC, Stable Diffusion |
11600 文件/s 2400 文件/s 9200文件/s 1500文件/s 40文件/s |
包括对于这种自动驾驶的场景,比如ren net这个50那单机,它八卡的场景下就需要每秒能够加载数据,能够读到11600张文件,这是第一个起码的要求。那他在AIGC这种场景,比如stable diffusion这种场景里面,他可能每秒读会读取四十多件就可以了。它是一个计算密集型的,那它跳动的范围是非常大的。但对于读写check point,比如还是回到50B这个参数下,大家可以看到对于存储的读写的带宽要求是比较高了。
单路的其实不仅仅是一亿大B,其实现在已经看到很多就冲到几G大B,甚至于十几G几十G大B这个规模再去冲刺,同样对于512卡的性能要求,最起码要能够达到在这个基金下能够提供25G大B的写的能力,提供112G大B的读能力。当然仅仅是读写的带宽,大家也不要忽略对于整个OPS,对于时延,延迟这些十九也是一样的。总而言之,你读写check point越快,GPU资源浪费就越少,训练的效果就会越好,整个性价比就会提升的越高。所以整个过程是完全是串在一起的。这个地方也给大家通过50B这种参数,AIGDP3这种模型下,可以去看一下这个AI训练,对于IO对于存储一些需求。
二、高性能文件存储 CPF S 加速 AI+HPC 智能创新
高性能文件存储CPFS其实是今天我们在这个AIGC场景,在AI场景,也包括自动驾驶AIGC,金融量化等等各种对于AI的资源,这个场景需求里边阿里云主推的一种高效的存储解决方案。在这个存储里面,其实非常关注的一点就是性价比。所以我们提出了存储的分层架构。
包括我们今天大家可以在图里面看到怎么通过一种本地的缓存,提供了CPFS client,去利用本地的内存和少量的磁盘,做到本地读写的缓存能力。另外可以通过阿里云存储自研的BIC技术这种存储网络加速通道,可以去加速在GPU侧到存储侧的带宽的能力,另外在底层的存储,大家可以看到提供的基于全闪的,全部都是这种NVME、SSD介质的全闪的资源池。
这样大家在做训练的时候,可以把自己的热数据例如今天这周或者这个月需要用到非常热的数据集,原始的数据集全部可以丢到CPFS全省的存储池里面。同时我也可以把今天要去保存check point,完全都写到全省的CPI by输入值里边。这样其实当我们再去加载数据集写check point的时候,以及当我们有必要的情况下,需要去回写回读check point的时候,都可以利用这用最高性能的全闪的资源池去满足对IO这种大带宽、低延迟LPS的一个需求。这一块都是CPFS的全闪存可以满足大家需求的。也是可以看到一个存储池就可以提供2T大变流量吞吐,提供3000万的LPS以及超低的亚毫秒级的延迟,全部都是在全闪存储池里边提供的,其实经常也会得到一些用户的反馈,如果全买全闪可能这个数据集没多大,几百个GB或者说TB级别的。但是check point可能会迅速增长到PD级别,不能全买全省的建设。所以说在这我们也搭配了让CPFS的回响存储池。完善存储池,全部采用了HDD的一个介质,结合了一部分SSD的原数据的一个介质。这样当大家的数据在SSD的一个全闪介质里边,已经有一个明显的特征。比如check point已经过这个两周了,或者说超过一个月了,大概率应该不会再去访问了,那可以通过数据流动,通过一些策略,把它流动到混闪存储池里边。这样你会释放全闪存储池的空间,比如保持在TB级别,几10个TB,或者PB规模,但是大容量的混散存储池可以保持在PB规模,甚至于10PB20PB这种规模,当然如果有更大的量的数据,我们进一步可以结合OSS提供这种大的数据库,把整个业务资源可能不仅仅是AI训练的一个场景,可能还有一些大数据相关的一些数据,其实全都可以在整个OSS里面作为一个大的海量数据库,把它整个存储起来。然后再通过数据流动的能力,把它流动到CPI上的存储,进一步流动到全闪存储进一步的去最高性能的能力,去满足今天AIGC应用需求。同时在今天的CPPI计算版的产品序列里面,完全是运行在高性能的RDMA这种网络里面,今天是100G,很快也会朝向200G甚至更高的RDA的网络去引进。这就是今天我们可以看到整体的CPFS给大家在AI和HPC这种计算领域带来了比较大的产品感觉。
三、阿里云提供专属智算平台
今天CDFS在去满足客户的需求的时候,用户在不同的需求的场景下,对于存储的或者说对于整个计算平台的需求还是有一定的差异化的。比如确实遇到很多客户,他需要一个专属的一个生产平台,它的训练的规模也许有一天或者今天已经达到万卡,未来可能会朝向10万卡集群去拓展。
通常对于存储的要求也比较大,他可能去存储的是PD甚至于几个PB,十几个PB的热数据,一直在这里面去比较高效的去访问。所以今天在智算平台也推出了一种所谓的专属模式。这种专属模式从GPU到存储CPU base,再到整个高性能网络,阿里云的网络全部都是专属于某一个特定的客户的。这样其实我们可以看到它是非常灵活的,可以满足客户的能力会更加的丰富。比如我们今天在存储CP的存储层面,我们既支持全闪的资源池,也支持混闪的资源池。右下角给大家举一个例子,它是怎么去更高效的去浏览这个数据的,比如正好今天这个时间可以看到,昨天我在7月5号写了一批check point放在这个目录里面,昨天7月4号写了一批,我上个月在6月4号也写了一批,就是在我的整个文件系统下面,其实有两种介质,我有全闪的介质,也有回闪的介质。
这时候通过这种策略的设定,我就可以把6月4号甚至于是更靠前的,也就是说一个月之前的数据,自动就把它存储到了混散的介质里边。
同样的今天比较近新的数据,像7月4号,7月5号的数据,也直接把它存储到了全闪的介质里面,这时候它一定会不变的吗,其实不是这样,可能下个月的时候来到8月5号的时候,可能看到7月4号数据它会自动的通过策略把它迁移到了混响的介绍里面。这样其实整个过程对于我们应用是完全是无感的,因为从CPU的角度来讲,它是一个统一的命名空间。你的应用不需要关心数据到底是在SSD的全程介绍里面,还是HSD这个回转介质大容量的介质里面,对于应用来讲,看到的目录永远结构是相同的,目录的层级并没有因为存储介质的变化而产生变化。这就是今天在这种专属的生产平台里面的CPFS文件系统,通过统一命名空间的方式给大家,或者说给用户带来一种最高性价比的方式。另外其实在这个里面也再一次重申一下,整个GPU的服务器,包括RDV的网络完全都是专属的,可以通过整个生态平台有专门的技术去打通公共云的VBC区域的OSS。
我们可以实现在OSS和CPFS之间的数据流动,GPU服务器或者一些训练的任务也可以直接去访问VBC内的nas 资源、OSS 资源,其实这些都是可以去直接访问的,这就是在领域智算平台里边给用户提供的第一种类型的资源池,就是这种专属的智能平台。
四、阿里云提供 Serverless 智算平台
第二个其实就是我们今天也针对于很多弹性训练资源需求的客户发布了servers 的这种智算平台。既然有servers ,其实可以理解是看不到物理服务器的。其实和上一个专属的智算平台形成一个鲜明的对比,就上一个专属的资源实实在在的是可以看到,是可以登录这台GPU服务器的。你可以触摸到它的操作系统。你可以登录到整个CPU face 的集群的物理机,你可以触摸到每一块磁盘。但是在servers 这种情况下,这个世界就变了,你看到的是服务,你拿到的存储是一个文件系统的实例,你不再需要去关注底层的硬件硬盘。
同样在GPU 层面,你也不需要再去关心怎么在操作系统,怎么去用哪个版本,要用哪个内核,这都不需要你来关心了,整个GPU 服务器也用细化的方式去对外提供的这种servers 的一个形态。你拿到的就是一个算力的单元,这个算力的单元,通过内部的高性能的RMV的网络,去连接了你专属的文件系统实例。
这样其实也在这种server list 情况下,帮你去打造了一个非常弹性的灵活的基础的训练平台,就是架构与训练平台。这样的话你的容器资源而且非常大的弹性的伸缩。比如可能今天我没有训练任务,或者没有推理任务,就把整个所有的容器都释放掉。但是我可预见的,明天一直到下个月,持续会有大量的训练任务。
这时候就可以去拉起大量的存容器资源,去启动自己的整个模型训练和推理的一个过程,同样存储也是一样的。另外的一点,一个很大的一个变化,就是在交互的一个界面,从我们今天裸的技术架构,比如是一个容器的入口,就是一个文件系统的挂载点,转变成了今天我们交互式的时候建模的DSW,PAI这个平台里面,你可以完全通过图形化的控制台的一个界面,去创建自己的训练的基础架构,去提交自己的训练任务,在我们的平台里面去完成你的建模和编码的工作,都是可以在DSW这种交互式建模平台里面去完成的。在训练的时候,可以选择通过DLC这种方式去触发一个大规模的GPU的训练集群,去启动自己的训练的任务。当然后面其实也会谈到怎么通过EAS再去部署自己的模型,达到推理的一个服务。这些都是在servers这个资产平台里面给大家提供到的。
那这样其实在这个平台里面,无论是GPU ,比如今天我们按台去销售,是不是可以按卡销售呢,甚至于可以按更小力度的方式去销售。另外就是存储,不再是通过一个集群销售,那是不是可以以GB 级别的能力销售,然后一路狂飙到PD级别的甚至于更大规模的训练数据集。
这些都是可以在server list 形态下满足大家需求的。它能做到一种对云化的极致的弹性。
所以回到这张图,大家可以看到在整个AI和机器学习的训练平台里面,我们又再一次的去回顾,从数据收集到模型训练,再到模型推理。它的CPU VS 中和连接计算统计搭配,大家可以看一下
从OSS 里面我们依然是通过OSS 去收集大量的数据集,或者沉淀海量的这些check point,或者说这些推理数据,通过高性能的智算CPI fast ,通过CPI fast OSS之间的数据流动,把数据拉取到CPI fast 的训练平台里面。然后在凝聚的高性能网络里面供给给平均智算的GPU 的商业平台。最终是由DSW和DLC通过这种图形化的界面去管理和控制整个算力平台,整个计算框架,然后去上传、下载数据,去构建自己的模型,去完成训练,进而最后一步达到一个模型可推理化交付,可以达到可分化的状态,那就是今天在AI 或者AIGC领域里面,在大模型领域推荐给大家的比较理想的一个架构。