当前位置: 首页 > 科技观察

惊人:内存池和分布式AI集群优化

时间:2023-03-18 01:27:17 科技观察

分布式机器学习的原因很简单。一方面是训练数据越来越多,另一方面是模型本身的规模越来越大。因此,必须使用多台机器。RoCE之类的通信协议自然是用到了,这其实也是nVidia要收购Mellanox的根本原因,而并行的方式主要有两种:数据并行好解释,主要是如何存储训练样本,以及多机之间的传递混淆samples,基本上大家都在用SSD和分布式存储来解决这些问题,当然也有内存池化的需要。另一个问题是模型并行性。当单个工作节点无法存储时,需要自行更新模型段。当每一轮分布式训练迭代完成后,需要同步参数。通常,将每个模型对应的参数相加,然后取平均值。这种通信称为AllReduce。一开始搭建了一个中心化的参数服务器(ParameterServer),但是很快发现它成为了整个集群的瓶颈,后来出现了一些环形拓扑All-Reduce。对于nVidia来说,他们想尽办法扩展了NVLink的带宽,也迅速迭代了NCCL,都是为了解决这个AllReduce问题,但这些都只是在单机或者极紧耦合的集群内。另一方面,主机之间的通信自然会选择RDMAROCE,这在超算中很常见。但即便如此,AllReduce的延迟已经大大影响了整个训练集群的规模:Allreduce算法的介绍可以参考鹅厂的总结:腾讯机智团队分享--AllReduce算法的前世今生[1]另工作:EFLOPSAliinApaper发表在HPCA2020上。阿里其实看得很清楚这个问题。PCIe拥塞、内部调度拥塞、网卡拥塞:那么解决就很简单了。反正钱也不少。一块GPU配一块网卡,然后网口就太多了,切换网络也改成了两套Fat-Tree。阿里的文章中有一个结论,即使使用HDRM,带宽也只有40Gbps。那我给大家讲一个NetDAM的结论,100Gps可以轻松跑满。单个AlveoU55N可以跑到200Gbps,送你一句话:Inmetigersniffstherose。NetDAM首先实现了AllReduce,更不用说AllReduce的算法和对应的拓扑结构了。在一定带宽条件下,约束条件是通信延迟和计算延迟。如果用RoCE的话,一台机器的读写都要经过一次PCIe,所以这个问题的根源是内存前端,延迟不就下来了吗?通讯延迟下来了,再来看计算延迟,传统方式如何添加:在计算域,CPU,AVX512可以添加,用Cache很难控制延迟和抖动,多一个MemoryCopy即使直接使用GPU-Direct也需要。你考过一次PCIe吗?所以你运行低于100Gbps是正常的。直接在网卡上放置大量的ALU。收到数据包时,数据包还在SRAM缓冲区中。此时ALU可以根据包头中的NetDAMInstruction同时使用多个ALU。加载本地DRAM,然后添加到相应的SRAM。添加后,整个数据包在改变IP头后直接转发。这样一个9000B的消息可以携带2048个float32s,相当于AVX(32*2048)SIMD-Add,所以我当然比你的CPU快,而且add没有DRAM存储的时候,只会存储最后一跳,而节省了多少?另外,对于AI训练的场景,有很多方法可以直接通过NetDAMALU进行过滤,比如当一个SIMD内部的2048个float32有一半以上的0时,我可以很简单的使用。在AllGather阶段,也就是计算出来的数据需要重新分配的时候,RoCE组播似乎只是一个概念上的东西,这个阶段可以使用NetDAM来充分发挥以太网组播或者广播的能力。当然,具体的丢包重传可以在NetDAM之间完成。FPGA检测到Seq丢失,直接生成READ报文给source。根本不需要CPU。参与,具体内容明天讲拥堵控制的时候再详细说。关键还不止于此,它里面还有一个SegmentRoutingheader,可以做连锁反应,就像原子弹一样~轰~~~连锁反应还有一个特点就是开辟了一个新的空间通往3D-Torus拓扑毕竟连交换机的延迟都省了,用RingAllreduce跑满带宽就不用考虑incast了。是不是很美?是吗?事实上,在可扩展性方面,Non-Blocking成本很高,临时扩大或缩小集群规模需要增加额外的设备组成FatTree,Incast不易控制。Torus虽然是阻塞的,但是可以通过通信方式进行通信。以免阻塞。即使你使用胖树数据中心,我们也为流量工程准备了Ruta解决方案。相比PortRank,哪里不拥塞就去哪里更简单直观~拥塞控制,明天给你安排~NetDAM实现内存池NetDAM是一个标准的UDP协议,NetDAM可以独立于主机部署,所以它可以形成一个非常大规模的内存池:因此,普通主机的用户模式不需要任何特殊的开发包,一个UDPSocket就可以直接控制整个内存集群,是不是很酷?而当你的主机有NetDAM卡时,你可以玩更高的,分区的全局地址空间(partitionedglobaladdressspace:PGAS)来理解,在这种场景下,我们可以将一个switchchip转换成一个MMU,提供一个虚拟IP地址和UDP端口对外,然后形成一个大的虚拟化池,隐藏内部拓扑。每个netDAM报文访问的内存地址通过交换芯片查找表转换为最终的NetDAM。在这种情况下,switchMMU也可以使用Interleave寻址来解决内存局部过热的问题……继续从分布式AI训练集群的角度,对内存池的需求主要是训练数据集的分布和混乱,另一个是参数和梯度的更新。所以这次HotChip中的Cerebras提供了Memory-X套件:针对计算任务,MemoryX还加入了Optimizer,得出结论NetDAM也可以实现这个功能:)Preview....EFLOPS说完了,说说HPCC?当延迟是确定性的时候,只需要考虑Buffer的深度,那么算法就更简单了:参考[1]腾讯机智团队分享——AllReduce算法的前世今生:https://zhuanlan.知乎.com/p/79030485