在前几期,我们提到英伟达为了将GPU Direct拉远到机箱外,收购了芯片厂商Mellanox。那么,Mellanox拥有什么样的黑科技,才能够加入NVidia引领的高性能计算战团呢?
Mellanox掌握了两大黑科技:InfiniBand,RoCE。
实际上,这二者都是RDMA传输的载体。
在上一期我们讲到,RDMA是没有类似TCP-IP的丢包重传机制的,这就意味着,网络层必须保证数据包不丢失。
我们知道,数据包在网络中传输的时候,链路层会使用130b/128b等编码方式,增加冗余数据位来避免单bit错误导致错包。那么,为什么还会出现数据包丢失呢?
这是因为,网络中有可能出现所谓的incast现象。
如图,switch 0 和 switch 1都通过万兆以太网向switch 2发送数据,switch 2查找转发表后发现,这两条数据流的出接口是同一个,也是万兆以太网。那么,当switch 0和switch 1发送的速率之和,超出了switch 2出方向的万兆以太网线速能力的时候,switch 2就不得不丢弃一部分数据包。这就是所谓的incast导致网络拥塞丢包。
话分两头。
小H在一次被人带去吃麻辣小龙虾以后,打开了通往新世界的大门,第二天又去吃。第三天,小H遇到了一些难以启齿的困扰。这是因为,出方向的QoS需要从入方向着手,如果我们期望出方向避免拥塞等问题,就要管控入方向的流量。
在Infiniband网络中,采用的是类似802.5 (Token Ring)的方式来避免拥塞,上游如果想发送数据包,首先要拥有向下游发送的Credit,发送后会消费Credit,而下游只有在处理完数据包后才会返还Credit给上游。
但是,基于以太网的RoCE中,以太网缺乏这种流控机制。以太网与Token Ring的一大差异,就是没有内建这种Credit机制,在传统的以太网中也无法避免这种数据包丢失。而以太网之上的网络层IP协议,也是个“尽力而为”的传输协议,也没有流控机制。
也就是说,以太网+IP的链路层和网络层,原始设计是公路,而Mellanox需要把它改造为承载RDMA重载列车的重载铁路!
在国铁的每个站段,都高挂着“严守速度,确认信号”的标语。当列车前方连续三个闭塞区间内没有车辆的时候,信号机为绿色,指示列车可以按规定速度运行。但如果前方闭塞区间内有车辆,信号机就会变为黄色,指示列车减速,或变为红色灯光指示列车在该信号机前停车。
Mellanox借鉴了这一机制,为以太网增加了信号机,将其改造成为了“无损以太网”。
首先是增加了PFC反压机制。PFC是Priority-based Flow Controld的缩写,指的是基于优先级的流量控制。PFC可以将以太网链路分为8个优先级不同的虚拟通道,当以太网交换机内部缓存达到水位线时(类比铁路上列车前方闭塞区间有车),设备会向上游方向发出Pause帧(类比信号指示列车降速或停车)。上游设备接收到Pause帧的时候就会暂停发送。
但是,PFC反压机制只能缓解网络拥塞。这是因为,上游网络设备的缓存也是有限的,一般在16-64MB的级别。如果以太网接口速率为100Gbps(相当于12.5MBps),在不到50ms的时间内就可以打爆缓存引起丢包。因此,我们还需要让发送数据的服务器降低发送速率,这一机制就是ECN。ECN是在交换机检测到缓存超过水线时,在发送的数据包中增加ECN标志,而最终接收数据的操作系统协议栈检测到该标志,就直接向发送端反馈(反压),要求发送端降低发送速率,从而彻底解决拥塞问题,避免拥塞恶化。
除此之外,RoCE还需要ETS和DCBX两个特性的配合。ETS用于防止“大象流”踩死“老鼠流”,也可以避免交换机丢弃ECN反压信令。而DCBX为网络中各交换机提供一个互相通知网络接口能力的协议。
在这四个协议,特别是PFC和ECN的加持下,以太网被从公路改造为重载铁路,就可以无损地实现大块数据的搬运了。
在大模型的计算中,还会涉及一个问题:存储。一个典型的场景是,海量图片数据保存在NVMe SSD中。有没有好的办法实现GPU高速访问NVMe SSD中的数据呢?
请看下期。