玩AI推理的都知道,现在大模型推理动不动就成千上万用户同时请求,再加上每个请求的输入长度都不一样,这服务器压力山大!为了扛住这压力,多GPU并行成了标配,但GPU之间的通信延迟一直是个让人头疼的问题,严重拖性能后腿!
传统方法使用基于环的算法,其中部分值围绕 GPU 环传递。每个 GPU 贡献其值并将结果传递给其邻居。这个过程重复 2N-2 次,其中 N 是一起工作的 GPU 的数量,到该过程结束时,每个 GPU 都具有相同的总和值。需要对环进行第二次传递,以将总和值从最后一个 GPU 传播到其余 GPU
环形 AllReduce 算法描述如下:
环形算法:GPU-1 → GPU-2 → … → GPU-N → GPU-1 → GPU-2 → … → GPU-(N-1)
传统的Ring AllReduce算法,说白了就是让数据在所有GPU之间轮流传递,就像击鼓传花一样。这方法虽然看着公平,但问题是GPU数量越多,这“花”转的圈数就越多,但随着 GPU 数量的增加,步骤数量也会增加。这会增加延迟,因为所有 GPU 都需要在环的每一步保持同步。这些同步延迟显着增加了延迟开销,并且很难满足更严格的延迟目标
这次,英伟达祭出了新的大杀器——TensorRT-LLM MultiShot!它巧妙地利用了NVSwitch的硬件加速特性——“多播”(Multicast),就像广播一样,每个GPU只需发送一次数据,就能同时把数据发送给所有其他GPU
关键就在这里,传统的Ring AllReduce需要N个GPU之间进行N次点对点通信,而Multicast只需要一次广播,就能让所有GPU收到数据。这就相当于把N倍的通信时间压缩成了一次,效率提升自然显著
这一下,通信步骤直接从原来的 2N-2 步(N是GPU数量)减少到了只有2步!延迟直接暴降三分之一!
更牛的是,MultiShot算法在小消息、高并行场景下效果尤其出色,而这恰好是大模型推理最常见的场景!这意味着不仅延迟更低,吞吐量也更高了
具体来说,MultiShot把AllReduce操作拆成了两步:ReduceScatter和AllGather
首先,ReduceScatter让每个GPU负责计算结果张量的一部分,然后,AllGather利用NVSwitch的组播功能,让每个GPU把自己的计算结果广播给其他所有GPU,最终每个GPU都获得了完整的计算结果。由于NVSwitch自身具备数据放大能力,每个GPU只需要发送1/N的数据,就能接收到完整的张量,进一步降低了通信带宽需求。这整个过程,无论多少个GPU参与计算,都只需要两次通信!
图1的测试结果也证明了MultiShot的强大实力,利用 TensorRT-LLM MultiShot,AllReduce 的延迟时间最多可缩短 3 倍
实现最佳推理性能需要仔细的工作负载分析和对性能瓶颈的深入了解。通过内部工程工作以及与外部开发人员和研究人员的密切合作获得这种理解
参考:
https://developer.nvidia.com/blog/3x-faster-allreduce-with-nvswitch-and-tensorrt-llm-multishot/?ncid=so-twit-405097
⭐星标AI寒武纪,好内容不错过⭐
用你的赞和在看告诉我~