Nvlink对大模型推理的速度有多大提升?

LLM所有细分领域群、投稿群从这里进入!

知乎:Uranus

链接:https://www.zhihu.com/question/654832546/answer/71647384740

先放结论,NVlink 对推理速度的提升非常大,非常非常大!

这可能和高赞答案的结论不一样,且听我娓娓道来 :D

最近在分析 RTX4090 上用 FP8 tensor core 跑 70B 模型的性能瓶颈,发现大模型推理过程中,很多时候通信是非常昂贵的一件事儿。NVLink,甚至 P2P,都会对推理有很大的加速效果。

以 Llama 3 70B TP4 为例,模型共有 80 层,每一层中有 2 次 all reduce 通信,数据量是 batch 中token 的数量乘以 hidden dim (8192)。

在 FP16 下,一个 token 的数据量是 16384 bytes。通信延迟会是什么样的呢?我用 nccl-tests 测了一下单次 all reduce 的延迟和 token 数量之间:

170f91eaa13402a49b793661483916d7.jpegNVLink 3.0 vs PCIe 4.0

如果我们的输入是 4096 个 token,单次 all reduce 的延迟分别是 603 us 和 11369 us。乘上 80 (num layers)和 2(每层 2 次 all reduce)后,NVLink 3.0,PCIe 4.0 的开销则分别是 96.48ms 和 1819.04 ms。

在推理优化尝试榨干 GPU 每一份算力的时候,1819.04 ms 的通信成本是一个非常非常夸张的数字,宝贵的 GPU 计算资源在通信的时候几乎是闲置!

为验证这个数据,我用 vLLM v0.6.6 在 4xA100 的环境实测了一下,一个 4379 tokens 的输入,只跑 prefill。我们通过 NCCL_P2P_DISABLE=1 关闭 NVLink:

NCCL_P2P_DISABLE=1 vllm serve /mnt/resource/public_models/Meta-Llama-3-70B-Instruct-hf -tp 4

在关闭 NVLink 前,latency 是 878.57ms 左右;关闭后,prefill 的 latency 是 2740.17ms。Bang!

考虑到 NVLink 打开时通信开销很小,我们可以大致认为 compute 的时间是 800 ms 左右,那么关闭 NVLink 后,纯通信的开销大概是 1900 ms 左右,和我通过 nccl-test 测出来的 1819 ms 基本相符。

到这里,NVLink 对大模型推理的加速效果可见一斑。其实我们对 latency 也取对数的话,会发现 NVLink 和 PCIe 的 latency 随数据量是线性的,但 PCIe 的斜率明显较大,这是受带宽制约:

65ff7c3d15ce9deccbd6f96789dfc608.jpegNVLink 3.0 vs PCIe 4.0

当输入为 4096 个 token 的时候,实验中 all reduce 传输的数据量是 N * 2 * (D - D / N),其中 D 为 64 MB,N 为 4(GPU 的数量),那么总的通信量为 384 MB。

NVLink 能够达到的带宽是 384 MB / 603 us,约为 631.58 GBps;PCIe 能够达到的带宽是 384 MB / 11369 us,约为 33.77 GBps。

这和 NVLink 3.0,PCIe 4.0 的规格也是相符的。原本应该测测 PCIe 5.0,奈何手头没有合适的机器,后面如果有机会再补充数据吧。

最后放一张带 P2P over PCIe 数据的图作为结束吧。总结一下:在 GPU 越来越快的当下,我们也需要越来越快的通信,否则宝贵的算力是发挥不出来滴!

af5b480fa291ecfc4dc4ceb7ab74c521.jpegNVLink 3.0 vs P2P vs PCIe 4.0


备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群

4e49b39ac33cb9a3d97737068afc9c08.png

id:DLNLPer,记得备注呦

### 服务器端部署大模型的关键方法与工具 #### 一、分布式计算框架的选择 为了应对大模型的超高参数规模,分布式计算框架是必不可少的。常见的分布式计算框架包括PyTorch Distributed[^3] TensorFlow Distribution Strategy[^1]。这些框架提供了灵活的支持,允许开发者通过数据并行张量并行流水线并行等方式优化模型训练推理过程。 对于规模模型而言,DeepSpeed 是一种高效的解决方案,它不仅支持 PyTorch 框架下的混合精度训练 (Mixed Precision Training),还引入了 ZeRO (Zero Redundancy Optimizer)[^2] 技术以减少内存开销。ZeRO 可以将梯度、权重其他中间变量分布在不同的设备上,从而降低单个 GPU 的显存压力。 #### 二、GPU 支持与优化方案 在 Linux 系统中实现 GPU 资源的有效利用涉及项关键技术。NVIDIA 提供的 NCCL 库专门用于加速节点之间的通信效率[^1]。此外,CUDA Streams 则可以进一步提升异步操作的能力,使得不同任务能够在同一间运行而不互相干扰。 针对特定场景下可能出现的带宽瓶颈问题,可以通过调整 AllReduce 算法中的分片小来改善性能表现;同也可以尝试启用 NVIDIA NVLink 或 InfiniBand 网络作为更高吞吐率选项之一[^2]。 #### 三、CPU 虚拟化与容器编排平台的应用 除了强的 GPU 加速外,在实际生产环境中还需要考虑到 CPU 资源调度灵活性的重要性。KVM/QEMU 组合提供了一种成熟的虚拟机管理方式,而 Docker 容器则因其轻量化特性更受青睐于快速迭代开发周期内的服务构建工作流之中[^1]。结合 Kubernetes 进行自动化扩展服务发现,则能极简化跨数据中心范围内部署流程。 最后值得注意的是安全性稳定性方面的考量——定期更新依赖库版本号以及实施严格的访问控制策略都是保障长期稳定运营不可或缺的部分。 ```python import torch.distributed as dist from deepspeed import DeepSpeedConfig, init_deepspeed config = { "train_batch_size": 8, "gradient_accumulation_steps": 4, "fp16": {"enabled": True}, } model = YourModel() optimizer = torch.optim.AdamW(model.parameters(), lr=0.001) engine, optimizer, _, _ = init_deepspeed(config=config, model=model, optimizer=optimizer) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值