A0002: 基于3D-Torus的超大规模AI训练集群

随着GPT-3的发布和部分试用的场景泄露出来的Demo给了我们太多的震撼,似乎宣告着通用人工智能时代的到来,例如一句话让他自动设计一个网站

A0002: 基于3D-Torus的超大规模AI训练集群

更多的示例参考:《烧了微软10000张GPU,这伙人铁了心要砸大家的饭碗

而我们更需要关注背后的技术和差距,GPT-3使用了10000块nVidia V100,模型参数1750亿个,如何从工程上实现这么一个大规模的集群呢?假设以每个服务器8块GPU的配置,需要将1250台服务器连接起来。传统的做法就是接交换机咯,每个服务器可能需要2个100GE的接口那么就是2500个交换机端口,单个交换机肯定不支持呀,那么CLOS(FatTree)堆叠。

A0002: 基于3D-Torus的超大规模AI训练集群

这些都是我们常规的思路,学计算机网络的课程都是跟你讲交换机要防环,CLOS构建无阻塞矩阵。然后这种场景下由于交换机自身的原因,存在多个Node和一个node通信时产生一种叫incast的东西:

于是我们又开始做TCP的拥塞流控,各种流控算法的本质就是监测Buffer的使用情况,甚至不惜代价做到per transaction的测量,并且还搞了一堆算法来解耦交换机buffer和终端网卡buffer,或者又想着通过交换机Offload计算,例如把一些参数同步聚合的任务交给交换机实现来避免incast。

而这些前置的知识使得我们的思维惯性忽视了太多的东西,正好最近在看
一本群论的书<Visual Group Theory>,图上的Cyclic group直接给我了一些灵感,为什么不把交换机干掉:

这样天然的避免了incast同时又节省了不少钱,例如一个
36
x100GE的交换机大概
5
~10万左右,一个光模块接近1000?
那么2500个接口的集群加上光
模块多少钱?


为什么可以避免incast呢?因为所有的主机都直接连接了,在这种情况下通常是通过N维的Torus结构互联的,如下图所示:

然后我们在这样的一个拓扑下进行通信和参数的AllReduce不是更棒了么,正好Ring Allreduce也在广泛使用。
但是我们缺少什么呢?路由协议!

主机网络针对这样的情况路由表如何构建?可能我们以前就配一条默认路由就行了,主机上的动态路由协议似乎没有可以借鉴的地方。正好这个时候我在做的另一个研究,Ruta路由用上了,Ruta的初衷就是在复杂的互联网各种拓扑情况下,采用主机源路由并自动避免拥塞的机制实现的:

参考资料:Ruta?智能插座?重新发明路由器!

它基于UDP的
区段路由(
Segment Routing)
实现,用户可以通过标准的UDP Socket编码通信即可。你可以理解为在主机上内嵌的路由器容器。
针对Torus结构,直
接将
节点地址编码为
x.y.
z.1即可

然后根据源目的地址的dx,
dy,dz做路由就好,
这是基于目的地址的路由实现
.

而添加了Segment Routing以后,可以直接使用它对环状拓扑路径指定,只要指定路径经过>N/2的节点作为第一个Segment,让数据在1->2->3->4的路径上采用标准的目的地址路由,而4上灌入下一跳1的标签然后继续完成红色短弧部分。

这样的做法结合分布式机器学习中的Ring Allreduce,同时最终把数据包流回1节点完成了同步确认的工作,编码效率非常高,转发结构也非常简单。

例如我们以10000个GPU为例,单台机器8个GPU的配置,3D-Torus的规模仅为11x11x11. 参数进行AllReduce时,节点内8个GPU做组内的Scatter,然后在X/Y/Z三个环上分别进行11个节点的Ring AllReduce,然后再组内8个GPU broadcast一下,解决问题~计算效率上相对于传统的CLOS结构高出不少,如果你还需要更大的规模,继续提升Torus维度,例如到六维空间,每个机柜内部构建3D-Torus,然后大量的机柜间构建3D-Torus,同样的在每个维度构建Ring Allreduce即可。

A0002: 基于3D-Torus的超大规模AI训练集群》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:http://www.bookhoes.com/266.html