由阿里云智能集团存储产品专家何邦剑先生分享并行文件存储在大模型训练中的探索与实践。
一、大模型训练的io特点
了解cps在大模型训练当中做了哪些创新或者实践。训练一个大模型需要考虑整个平台,考虑网络考虑存储。在计算方面,需要去看到规模不断扩大的情况下计算的故障率,包括计算架构的稳定性都是需要考虑的。
对于网络,可能需要去考虑考虑网络的延时,网络吞吐包括网络的一些优化。存储和大模型计算侧又有何种交互。简单的探索:对于他们训练,存储和计算的交互,可以分为三个阶段,训练之前是需要去把数据集加载到GPU当中,才能开始去训练,数据集它可能是一个百GB或Pb级的数据集。
特点:数据集会被切片,完成后会并行的加载到每一台gpu当中,加载完数据集之后,可以开始训练,对于每一个训练的迭代,训练完之后是需要把训练产生的结果进行存档,即写checkpoint,一个checkpoint包含模型checkpoint和状态checkpoint,模型的checkpoint只需要存入一份,并可以进行切片并行写入存储。
状态checkpoint是每一台GPU,可以写入自己的状态的这一部分,写完这再关再写入切换。完成之前GPU节点是不工作的,所以如果写入这部分的越快,GPU等待时间越短。要提供提升gpu的利用率,最简单如降低故障率,包括恢复的时间可能更加靠谱的方式写入是的时间越短,可能的利用率就会越高,写入checkpoint开始下一个迭代,如果对下一轮迭代产生的模型不是很满意,可以再加载上一次存入checkpoint,在加载模型checkpoint与写入checkpoint有区别。
加载模型checkpoint,每一台GPU都要去加载同一份模型。如果参数量很大,模型就会越大,时间也就越长,对于状态checkpoint,每一台GPU也需要加载自己的状态。不管是模型checkpoint还是状态checkpoint,都为单路大块顺序读。
二、大模型训练对存储的诉求
分析训练的IO的特点,针对IO特点了解相关存储需求。主要包括三点,包括性能和成本以及用户体验。对于性能,完全写入checkpoint前gpu不工作的,包括读数据集,加载checkpoint都是越快越好。对于低成本,理论上如果写入checkpoint频率和存入速度足够快,存档就会更加频繁,不用再重新去开始训练,或者再回到很前面的一个时间开始训练,这是一个平衡,写入的checkpoint越频繁,理论上有好处,所以有一些客户他们就会非常频繁写入checkpoint,但checkpoint可能不会用,整个训练周期里面都不会用,这节课实际上它是需要一个低成本的存储方案的,所以这里面也就衍生出对存储也会有一个低成本存储方案一个需求。
三、并行文件存储CPFS加速模型创新
对于大模型训练,分成好几个阶段,有数据的预处理,再确认之前就要对数据集处理,或者需要用一些方式去挂载,做数据迁移等等。不同的算力形态,可能用ecs egs acs等不同的平台挂载存储,预处理训练和推理。在该过程中希望有一个统一的存储平台来管理的,否则会发现模型数据在不同的平台之间不断的去做迁移流转,对客户的体验是有损的。不仅是平台,包括去训练的时候,协同的事情,有非常多工程师,工程师之间他们可能有各自的自己的目录,自己隐私文件和私密的数据,数据是需要被管理并且记录的。
从诉求来看,也不难设计,根据诉求设计出一款面向大模型训练的高性能的并行文件存储,cpfs就是专门面向一个场景的。提炼它有三个非常核心的一个特点,第一个就是性能,它的整个硬件的平台是基于全MNVme SSD搭配rdma的高速网络,软件架构是全闭型,全闭型不只是数据是可以并行存入每一台节点,包括数据和元数据,都可以并行去访问每一台存储节点,每一台的gpu上装的客户端,它也是可以同时去访问每一台存储节点,这就是全并行。
对于客户端,也会支持它利用gpu本地的一些资源去做缓存加速,除了性能之外,在成本上, GPS也支持和OSS的一个数据流动,在刚才产生的一些冷的checkpoint或数据,可以通过OSS数据流动,流转到oss。热的数据可以再从OSS加载到CPFS。除数据流动,cpfs还包括介质层还基于HDD的大容量层,俩个存储层之间可以去配置生命周期。冷的数据不仅可存储oss存储,也可存储大容量层。一些没高要求的训练,包括一些冷数据存储,可以直接存储到HDB的存储介质层里面。
在体验上,CPFS支持多个计算平台去共享访问这一个文件系统,也支持不同的目录之间去设计配额,并且有权限隔离。文件的审计上也会去记录每一个用户对文件的操作,达到文件的生命周期可以去追溯。
四、CPFS全IO链路性能提升
了解CPFS全IO链路性能提升以及所做的优化。可以去利用计算侧的本地盘和内存去做checkpoint和数据集的独家读。在刚才提到在加载模型结构的时候,每一台gpu都需要去加载同一份模型结构,功能,模型。假设计算节点非常多,可能有几百台或者是上千台,模型checkpoint很大,并行再乘以1000,实际上数量是非常庞大的,可以利用本地盘P2P加速实现只需要从存储到计算这边加载一份,而不加载1000份。加载一份之后,模型在计算端它会利用计算侧的高速的网络带宽去东西向的分发,所以就会节省存储到计算这一块的个时间,从而达成模型结构checkpoint加载的加速。
在对于客户端,除了缓存加速之外,还可以实现数据和元数据的读写的分流,包括IO的大小的分流以及公平性,实现关键业务数据的IO,不需要等待别的IO结束,即可进行写入。关键的业务的IO流没有阻塞,除了端上的一些io链路优化之外,对于网络通道有VSC的一个加速的技术, VSC的技术可以实现RDMA和多链接负载均衡的一个特点,vsc客户端可以直接装载在智能网卡中,所以它可以减少使用租户侧的资源,从而实现单个gpu节点到存储的带宽,可以做到225g大臂每秒。
五、CPFS存储分层降低数据存储成本
成本具有俩大特点:Oss数据流动以及生命周期。
数据流动:支持块级别的数据流动,也就意味着数据集不需要文件全部传入到GPU当中,就可以开始去训练。第二点有pre-load和lazy-load的能力,可利用pre-load能力先把文件系统购买,并且把需要训练数据包括一些其他的准备数据传到cpfs当中,再去开启计算的算力资源(算力资源成本较高),再去开始训练,可节省一部分的成本。
lazy-load能力好用,存在一种场景,爬虫爬一些预处理的数据用ECS处理,处理完了后,在OSS搭配当中一定会有新增的数据,如果不想在新建一个任务去手动的导入到cpfs当中,可以使用lazy-load的能力。CPFS和OSS一旦建立映射,原数据统一,两方数据都可同步去访问,除oss数据流动之外,也会有生命周期的 ssd的介质层和HD介质层。
对于一些热数据,如训练数据,可以直接设置目录,写入目录的数据,使用的SSD的介质,写入另外一个目录的数据,可把它设置为HDD直接访问。由此可以对热数据与冷数据进行划分。对于如日志的数据和不需高性能的一些训练任务的冷数据,可直接挂在hdd去做训练。
在SSD和HDD之间,支持一些迁移的生命周期策略,可以基于两个存储池之间的使用率,如ssd使用率满80%的时候,可以让数据自动的迁移到HDD介质层,不需要自己去感知与导入。可以设置最后访问的时间,对于热数据三天内访问的,需要保留在SSD介质层,三天内没有访问的数据,希望是沉降到HDD介质层实现数据的存储,降低的TCO。
所以从oss到生命周期,再到大容量层和高性能层生命周期为客户的一些训练任务去节省成本的。对于两层的生命周期,也是统一命名空间的HDD层和SDD层,它是一个文件系统,并且可以按需去配置它的容量。文件系统和OSS bucket也是统一的命名空间,原数据也是统一。
六、CPFS统一平台接入多种计算形态
客户的使用体验在大模型方面会有一定的优化。大模型步骤复杂,先有预处理,数据的迁移,需要用到很多算力的资源如ECS EGS。对于平台上的算力资源,期望是会访问同一个文件系统,对客户的体验是最简单的,不需重建另一文件系统进行管理。cpfs的优化体现在做了统一接入。
七、CPFS灵活数据管理能力提升使用体验
CPFS在用户体验和数据管理已做相关实践。做一个大模型训练过程当中会有非常多的人员参与,人员属于不同的部门,可能属于不同的组,人员可以分为两类到三类。第一类是一个超级管理员,第二类是直接去开发大模型的工程师,对于超级管理员工作是去购买资源,并且去分配资源,把资源分配给每一个工程师,对于工程师都会有自己专属的一个目录,他也会有组内共享的一个目录。目录需要去进行管理和记录。
CPFS是在这里面提供了目录的一个配额,超级管理员可以创建目录,把目录分配给每一个工程师,每个工程师目录也去设置一些配额,配额可以是容量配合,可以是文件数的配额,并且到设置一定的预警值,如80%的时候,可以去提醒到每一位工程师,工程师可以去选择提出扩容申请或删除旧数据,对于权限,Cpfs也做了一些实践,就会支持基于目录层面,去虚拟出一个挂载点,把挂载点把基于目录虚拟出的观点是命名为接入点,任何使用接入点来挂载目录的成员,权限都只局限在目录之下,它只能访问目录,别的目录包括上一层的目录无法访问,接入点也可以搭配RAM的权限嘛,来实现权限的管理。
综合目录配额和目录权限隔离来看,超级管理员他就可以去创建一些目录,并且为目录去设置权限,为目录去设置配额来实现对存储资源的精细化的管理。如果没有去设置权限,也会有日志审计的一个能力,看到访问记录包括在某一个时间,谁对文件做什么样的一个操作,都是可以做到的,所以这边是提供了非常方便的能力来做大模型,训练过程当中的一个数据管理。
八、零一万物使用CPFS加速模型训练
以零一万物使用CPFS加速模型训练为例,该应用对应的客户它是有千卡级别的一个规模也需要非常高的一个存储的吞吐和iops同时,它的业务也在不断的发展,需要存储具备非常高的容量和性能的扩展的上限,同时它的元数据它会放在OSs当中,用ECS挂载去做一些数据的预处理,处理完成之后的数据,会传到cpfs当中,再去做训练,所以过程为比较典型的大模型训练当中的一个场景,也跟客户offer了cpfs来做训练,给客户带去价值,就是整体搭配相关平台,支撑千卡级别的一个训练的集群。
cpfs在此过程当中也提供了超过百GB的一个吞吐,还有毫秒的延时,同时也具备非常高的一个扩展的上限,最重要的一点是cpfs可以提供到OS区间双向的100GB的数据流动的带宽,零一万物也正在使用功能,就是它一些训练完了之后的冷数据,预处理完成后从oss转移到cpfs。零一万物是阿云当中所有使用大模型客户当中的非常典型的,也感谢客户在过去时间提出的反馈。在和客户的不断交流当中,跟客户不断的去打磨产品,目标是提供一个性能成本包括用户体验都非常好的并行文件存储。