文章正文
上次写了一篇PCIe降级排查实录,说三台GPU服务器全部跑在PCIe 1.0上小半年,改完BIOS以后GPU终于恢复到PCIe 4.0满速了。本以为性能问题告一段落,结果一看多机推理的benchmark,网络才是下一个瓶颈——两台服务器之间走的万兆网,跑235B的大模型TP=4跨节点通信,万兆的带宽明显不够用。
于是趁热打铁,又把网络从万兆升级到了100GbE(十万兆)。跑的是235B的MoE大模型(AWQ量化后~116GB),跨两台服务器4张4090魔改48G做张量并行(TP=4,就是把模型切成4份分别放到4张卡上同时算)。
本来以为换个网卡、线速到了就完事。结果又折腾了两天,中间还翻了个大车——升级完反而更慢了。
先说下后面会用到的几个指标:
- 吞吐量(tok/s):每秒生成多少个token,越高越好。64并发吞吐量就是64个请求同时跑,每秒总共出多少token
- TPOT(Time Per Output Token):每生成一个token要多久,越低说明每个请求响应越快。比如TPOT=42ms,就是每个token平均42毫秒出来
- TTFT(Time To First Token):用户发出请求到收到第一个token的时间,主要受prefill阶段影响
第一天:100G网卡装上了,速度反而崩了
装好Mellanox 100G双口网卡,跑ib_write_bw(测试RDMA裸带宽的工具),带宽到91.75 Gb/s,接近线速,心里挺美。
然后跑benchmark——单请求吞吐直接从22 tok/s掉到7.1 tok/s,TPOT从45ms飙到141ms。
100G的卡跑出比万兆还差的效果。
排查了一圈,踩了好几个坑:
网卡接口要绑对:服务器上有管理口、万兆口、100G口三个网卡,通信框架默认不一定选对,必须手动指定走100G口。
RoCEv2有个参数容易设错:RoCEv2是让以太网跑RDMA的协议,设错了会fallback到更慢的模式,你看着带宽够了但延迟还是高。具体哪个参数就不说了,ibv_devinfo能查。
Linux内核网络缓冲区太小:默认就几百KB,100G网络高并发时根本不够用,改成128MB后改善明显。
第二天:找到真正的性能杀手
上面那些调完,高并发好多了,但单请求TPOT还是131ms,没回到万兆的水平。
最后发现是一个调试参数背锅——之前为了方便调试加了个参数,会禁用CUDA Graphs(CUDA Graphs是NVIDIA的优化技术,把多个GPU操作打包成一个图一次性提交,避免CPU逐个发起kernel launch的开销)。单机无所谓,但多机TP的时候,每个token生成都要跨节点做AllReduce(把4张卡的中间结果汇总),没有CUDA Graph的话每次都是CPU单独发起操作,延迟堆起来了。
去掉这个参数,启动时自动捕获了67个shape的CUDA Graph,耗时约32秒。之后所有推理都走graph。
单这一个改动,TPOT从131ms降到42ms,3倍提升。
最终性能对比
235B MoE模型,TP=4,max_tokens=256:
| 阶段 | 网络 | CUDA Graphs | 单请求吞吐 | 单请求TPOT | 64并发吞吐 |
|---|---|---|---|---|---|
| 万兆基线 | 10GbE | 关 | 22.0 tok/s | 45.0ms | — |
| 100G TCP | 100GbE | 关 | 7.1 tok/s | 141.2ms | 245 tok/s |
| 100G RDMA | 100GbE | 关 | 7.6 tok/s | 131.1ms | 430 tok/s |
| 最终优化 | 100GbE RDMA | 开 | 23.5 tok/s | 42.1ms | 497.5 tok/s |
从万兆基线到最终优化,单请求TPOT从45ms降到42ms,64并发从135 tok/s(万兆的16并发峰值)直接干到497 tok/s,高并发吞吐提升接近4倍。
中间那个"升级反而更慢"的阶段,纯粹是那个调试参数挖的坑。
给要做类似升级的人几点建议
- 先跑ib_write_bw确认物理层没问题,带宽不到线速说明驱动或线缆有问题
- 100G网卡TCP本身就有开销,最终还是要上RDMA才能在高并发场景跑满
- 多机部署注意CUDA Graphs是否真的开了,没开的话延迟会非常离谱
- 内核网络缓冲区要改,具体改多大看并发需求,128MB是个保险值
- 做完所有优化后再看效果,单独改某一个可能不明显,组合起来效果很大
有问题欢迎私信交流,踩过的坑可以帮你避一避。
顺便说一句,这次升级之前还踩过一个大坑——三台GPU服务器全部PCIe降级到1.0跑了小半年,性能一直在打折。感兴趣的可以看我这篇:三台4090服务器GPU全部PCIe降级到1.0——排查实录
我方向是电力行业AI落地,自建GPU集群,大模型私有化部署。踩坑经验持续分享。