想象一座城市里住着上万名快递员(GPU 核心),他们每天需要把一大堆包裹(训练数据)从城东仓库(GPU 0 显存)运到城西仓库(GPU N 显存)。如果走普通街道——就像传统以太网——包裹要经过无数次红绿灯、绕行、转手(CPU 参与拷贝),一趟要几十微秒甚至更久。而 InfiniBand 网络,就是城市为快递员专门修建的“超级物流专线”:全封闭高架、无红绿灯、送货员一脚油门直达目的地。这条专线的铺设质量,直接决定整座城市的物流效率——在 GPU 集群里,就是训练吞吐量。本篇文章将带你从零认识这条专线:如何选“装卸平台”(IB网卡)、规划“高架桥网”(拓扑)、请“交通指挥总局”(子网管理器)上岗、安装“调度大脑”(HCCL),以及遇到故障时怎么巡检排障。
对 AI 从业者而言,读懂 IB 网络是搭建大规模分布式训练的必备基建能力。掌握它,你就能在集群规模翻倍时快速定位通信瓶颈,在训练卡死时高效排障,成为团队里最懂“物流专线”的那个人。
目录
可视化演示
展示IB Fat-Tree拓扑(Core→Edge→GPU三层无阻塞互联)、RDMA零拷贝通信(GPU→HCA→Switch→HCA→GPU绕过CPU)、IB带宽代际演进(FDR→EDR→HDR→NDR→XDR),三模式切换理解GPU集群高速网络全貌。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+C1+'
认识 IB 网络:超级物流专线
想给城市修一条专线,首先要明白它跟普通街道的区别。普通街道上,快递员送一个包裹,要经历“手动接单→填写单据→出仓库→过红绿灯→中转多次→收货方签字”的冗长流程——这是传统以太网:数据要从 GPU 显存拷贝到 CPU 内存,再经软件协议栈层层封装,耗时自然高。而 InfiniBand 专线的核心是“远程直接内存访问(RDMA)”:快递员从发送方仓库直达收货方仓库,中途无需任何中转签字,协议处理全部由网卡硬件完成。
这套专线其实是一套完整的网络协议体系:物理层负责用铜缆或光缆搬运比特流;链路层负责把数据切成“报文”并保证不出错;网络层用全局 ID(GID)和本地 ID(LID)给每台设备编地址。相比 TCP/IP,IB 把大部分协议逻辑“卸载”到网卡上,CPU 根本不参与数据搬运,这正是它快一个量级的根本原因。
在 GPU 集群里,这趟专线的意义尤为重要。大模型训练每个迭代结束,上千张 GPU 需要互相交换几十到几百 MB 的梯度数据。如果走以太网,排队等待就要好几秒;走 IB 专线,几毫秒就能完成。衡量专线品质的两个核心数字是带宽(单位时间内能运多少数据)和时延(单个包裹从出发到到达的时间),两者共同决定了训练快不快:
把数据从显存搬到显存,就像在“封闭专线”上运货:带宽决定高速公路有多宽,时延决定过收费站有多快。IB 用硬件直通取代 CPU 转手,省掉了每一站的“签字盖章”,这就是它比普通以太网快一个量级的根本原因。
- T(总耗时)一个数据包从源 GPU 显存到目标 GPU 显存的总时间,单位秒。
- S / B(传输时间)S 是数据量(字节),B 是链路带宽(字节/秒),相除得到纯传输耗时。
- t0(固定开销)哪怕只传 1 字节也要花的起步时间,包括编码延迟、交换转发延迟等。IB 的 t0 极小,大约只在微秒量级。
HCA 网卡选型:挑选装卸平台
专线修好了,快递车从哪儿进高速?答案是“装卸平台”——IB 网卡,行业里叫 HCA(Host Channel Adapter,主机通道适配器)。每台 GPU 服务器必须装上 HCA,才能把服务器内部的数据搬上 IB 专线。选装卸平台不是越贵越好:平台太窄,车流量一大就堵在门口;平台太多,钱包先受不了。
HCA 的关键参数有三个:端口速率、端口数量和 PCIe 接口代际。速率上,主流有 EDR(100Gbps)、HDR(200Gbps)、NDR(400Gbps),数字越大代表每个端口的吞吐能力越强。端口数量上,一块卡有单端口和双端口之分。而 PCIe 接口决定了服务器内部给网卡喂数据的能力——PCIe 4.0 x16 提供约 32GB/s 的搬运能力,PCIe 5.0 x16 翻倍到 64GB/s。
选型时最容易被忽略的是“匹配”二字。假设一张 A100 GPU 的显存带宽高达 2TB/s,但训练中真正跨节点交换的通常只有梯度,量级在几十 GB/s。用一张双端口 NDR 卡(2×400Gbps ≈ 100GB/s)往往绰绰有余。计算公式很简单:拿训练峰值需要跨节点传输的总带宽除以单卡提供带宽,向上取整,再预留 30% 余量应对多任务并发和突发流量:
选装卸平台的关键不是“最贵就是最好”,而是让平台宽度略大于车流峰值。老师傅的经验是:先用公式算出理论值,再用实际带宽测试工具验证,最后留 30% 余量。这样专线两侧才永远不会出现“车到了、平台接不上”的尴尬。
- N_HCA(所需网卡数)一台服务器需要安装的 IB 网卡数量,结果只能取整数。
- B_need(需求带宽)训练任务跨节点通信的峰值带宽,单位 Gbps,通常由实测或理论估算得到。
- ×1.3(安全余量)预留 30% 带宽余量,避免梯度尖峰时队列溢出、延迟飙升。
- ⌈⌉(向上取整)网卡只能整块购买,算出 2.3 张也得按 3 张准备。
网络拓扑设计:规划高架桥网
专线不可能只从城东到城西——成百上千台 GPU 服务器之间,需要一张四通八达的高架桥网。最常见的修法是 Fat-Tree(胖树):像一棵倒着长的树,底层是架顶交换机(ToR),往上逐层汇聚,直到最高层的核心交换机。
Fat-Tree 的精髓在“胖”字:越往上,需要的链路数量越多,保证每一层都有足够的“上行匝道”。理想情况下,任意一台服务器到任意另一台服务器的路径,带宽都不打折——这叫无阻塞网络。衡量它是否无阻塞的指标叫收敛比(Oversubscription Ratio):所有上行链路的聚合带宽除以所有下行链路的聚合带宽。
收敛比 R=1 表示上下行等宽,任意节点之间通信都不拥堵,这是大规模训练最理想的模型。R=2 表示上行只有下行一半,8 台服务器同时向上发数据时,每台只能分到一半带宽。实际部署中,为了省钱,R=1.5~2 的“半阻塞”网络很常见;但对千卡级训练,强烈建议 R=1。分层结构上,三层 Fat-Tree(边缘层/汇聚层/核心层)支持数百上千端口,二层结构更适合小规模集群:
修高架桥网的心法,就是保证“进城匝道总数 ≥ 出城匝道总数”。只要某个匝道口的吞吐小于车流,高峰时期必然堵车。Fat-Tree 和 R=1 的黄金组合,正是让每一次梯度交换都像跑在空无一人的高架上。
- R(收敛比)上行与下行可聚合带宽之比,是网络阻塞程度的标尺。
- B_up(上行带宽)所有从接入层通向核心层的链路带宽之和。
- B_down(下行带宽)所有连接 GPU 服务器的链路带宽之和。
- L_rate(单链路速率)一条 IB 链路的最大端口速率,比如 HDR 为 200Gbps。
子网管理器:交通指挥总局
路网修好了,谁来指挥成千上万的车辆?这就是子网管理器(SM,Subnet Manager)的职责——它是 InfiniBand 子网的交通指挥总局。每个 IB 子网里至少有一个 SM,它不参与数据搬运,却控制着每辆车的行驶路线。没有它,交换机甚至不知道自己的端口该往哪转。
SM 的工作分三步:启动时,它像交警一样“点名”,网内所有交换机、HCA 依次上线报到并拿到自己的 16 位编号 LID;然后根据拓扑信息为每一对节点计算转发路径,把路由表下发到每台交换机的转发表;之后持续监控网络状态,一旦有链路断开或设备加入,立刻重新计算路由。
生产环境必须配置主备双 SM(甚至一主多备):主 SM 挂了,备用 SM 会在秒级接管指挥权,保证训练不中断。性能调优方面,最常用的旋钮是 LMC(链路多路径计数):把 LMC 从 1 调到 2 或 4,SM 会为同一目的地址计算多条等价路径,数据就能分多条路走,充分利用带宽。路由算法也有讲究:最短路径路由(SPR)简单但容易让某些链路过载;自适应路由(AR)会实时避堵,是 HDR/NDR 时代的推荐配置。SM 选路的本质是一条路径成本最小化问题:
交通指挥总局看起来不显山露水,但一旦它失联,整个物流网就会陷入瘫痪——所有车辆不知道该走哪条路。配置好主备双 SM 并开启自适应路由,你就拥有一个 7×24 小时不休不眠的“AI 交警”,把每辆车都导向最畅通的高架。
- C(p)(路径总成本)从源到目标第 p 条路径的总开销,SM 据此选出最优路线。
- e ∈ p(路径上的链路)一条路径由若干首尾相连的链路组成,遍历求和。
- D_e(链路时延)单条链路的固有传输时延,与链路长度和介质有关。
- W_e(链路权重)基于当前拥塞状态动态调整的惩罚项,越堵权重越高,让 SM 自动绕行。
HCCL 集成:安装调度大脑
高速公路和交通指挥都有了,物流公司还需要一整套“调度大脑”来统一指挥成千上万辆快递车:哪辆车运哪块包裹、先在哪个仓库汇合……在 NVIDIA 生态里这个大脑叫 NCCL,而在昇腾(Ascend)集群里,它叫 HCCL(Huawei Collective Communication Library,集合通信库)。
HCCL 解决的是“多卡协同干活”的问题。训练大模型时,每张 GPU 各自算完一小块,需要把结果汇合起来形成全量梯度。这种“先各自汇总、再全员分发”的操作叫集合通信(Collective Communication),最经典的是 allreduce。HCCL 把这项复杂任务抽象成几行 API 调用,底层自动选路、分包、超时重传,让普通工程师不用面对裸 IB 协议。
但“调度大脑”不是装上就完事。生产环境通常要设置环境变量:HCCL_CONNECT_TIMEOUT 控制建连超时,默认 120 秒,小规模集群可调小以加速启动;HCCL_DETERMINISTIC 决定算法是否确定性执行,调试时开启、性能优先时关闭;HCCL_BUFFSIZE 控制通信缓冲区大小,调大有助于小消息吞吐。通信模式上,HCCL 支持 ring(环形)、tree(树形)等算法。N 个节点的 ring allreduce,总耗时近似为 2(N-1) 步,每步传输 1/N 的数据量。这个公式直接揭示了大集群扩展的代价:节点越多,单步数据越小,但步数线性增加:
有了 HCCL 这个调度大脑,快递车们不再没头苍蝇般乱转:每辆车按固定路线轮流到每个仓库装一份货,最后一圈跑完,所有仓库都凑齐了完整包裹。Ring 模式像接力赛,节点多了虽然交接次数变多,但每条链路都吃得满满当当——这,就是大规模训练通信效率的秘密。
- 2(N-1)(总步数)Ring AllReduce 分 scatter-reduce 和 all-gather 两个阶段,每阶段 N-1 步。
- D / B(单步传输时间)D 是每个节点每步传输的数据块大小(即总数据 ÷ N),B 是链路带宽。
- L(单跳时延)数据每经过一台交换机增加的固定时延。
- 总步数 × 单步耗时把每步的传输时间和跳变时延相加,再乘以总步数得到总耗时。
故障诊断:路网巡检手册
专线跑得久了,难免出现各种问题:某段桥面破损导致车速骤降、某个匝道的信号灯失灵让车辆排队……InfiniBand 网络同样需要一套巡检手册。最常见的故障是链路层异常:光纤被意外拔松、光模块信号劣化、交换机散热不良导致端口闪断,表现出来就是训练时不时卡住或掉点。
诊断思路遵循“先看车、再看路、最后看指挥”三层:先确认 GPU 和驱动健康(nvidia-smi、hccl_tests 工具),再检查物理链路状态(ibstatus 看端口速率和链路层是否 ACTIVE),最后查网络层与转发细节(ibdiagnet 做全网拓扑一致性检查、ibping 测试任意两端连通性)。
几个关键指标要盯紧:端口物理状态(PORT_STATE)、链路误码率(链路层 CRC 错包计数)、丢包率(期望收到但没收到的包占比)。丢包率是网络健康最直观的度量:正常无损 IB 网络里接近 0,一旦超过 1e-6 就要警惕。此外,SM 日志里的错误记录、接收端队列溢出计数也值得每周巡检:
维护超级物流专线的最佳实践是:固定巡检节奏(每周跑一遍 ibdiagnet)、给每根线缆贴上标签(拓扑文档化)、关键链路留备用光缆(冗余链路)、SM 端配好告警通知。做到这四条,你就拥有了一个稳定可靠的 IB 网络——这也是千卡集群稳定训练的最后一块拼图。
- P_loss(丢包率)网络传输中丢失数据包的比例,是衡量链路健康的核心指标。
- N_loss(丢失包数)发送方已发出、但接收方未收到的包数量。
- N_total(总发包数)发送方累计发出的所有数据包总数。
- 结果解读正常无损网络该值接近 0;超过 1e-6 要排查链路,超过 1e-4 必须停训练处理。
AI 应用场景
大模型分布式训练的网络选型与部署
阶段:模型训练(基础设施搭建)
解决的问题:千卡集群训练中,传统以太网带宽不足导致 GPU 空转。只靠调大 batch size 掩盖通信开销,会拖慢收敛速度。采用 IB NDR 网络 + Fat-Tree 无阻塞拓扑 + 双端口 HCA 接入,通信效率可提升 5-8 倍。
具体案例:某大模型团队 512 卡集群,每节点 8×A100,配置 1×双端口 NDR HCA(2×400Gbps),网络收敛比 1:1。HCCL ring 模式下 15GB 梯度 allreduce 耗时从以太网时代的 12 秒降到 0.6 秒,训练吞吐提升 3 倍以上。
训练任务通信故障快速定位
阶段:模型训练(运行监控与运维)
解决的问题:训练跑到第 3 天突然每 20 分钟卡顿一次。传统排查靠重启任务,白白浪费算力。使用 ibstatus 发现某节点端口降速到 40Gbps,再用 ibdiagnet 定位到光纤模块劣化,更换后立即恢复。
具体案例:某推理团队训练 7B 模型时 loss 周期性尖刺,最终定位是 IB 交换机一个 200G 端口 CRC 错误率飙升,导致 HCCL 持续重传。更换光模块后,训练恢复平稳。
多任务共享集群的网络质量保障
阶段:资源调度与多租户管理
解决的问题:多个团队共享同一套 IB 网络,A 团队的大任务把带宽吃满,B 团队任务性能骤降。通过 SM 的 QoS 配置对不同服务等级设置带宽上限,并结合 HCCL 拥塞控制参数,保障高优先级任务。
具体案例:某智算中心给付费用户分配高优先级服务等级,带宽超卖时高优任务流量走低延迟通道,任务劣化从 70% 降到 5% 以内,顺利满足了商业化 SLA。
Python 演示
"""IB 网络带宽与 Ring AllReduce 通信耗时估算工具""" IB_SPECS = { "EDR": 100, # Gbps "HDR": 200, # Gbps "NDR": 400, # Gbps} def calc_bandwidth(link_rate, num_links, oversubscription): """计算有效总带宽(GB/s)""" return link_rate * num_links / 8 / oversubscription def calc_allreduce_time(data_size, bandwidth, latency, n_nodes): """估算 Ring AllReduce 总耗时(秒)""" steps = 2 * (n_nodes - 1) per_step_data = data_size / n_nodes return steps * (per_step_data / bandwidth + latency) def main(): data_size = 64 * 1024 * 1024 # 64MB 梯度数据 n_nodes = 8 latency = 2e-6 # 2 微秒 print("IB规格 | 链路数 | 有效带宽(GB/s) | RingAllReduce耗时(ms)") print("-" * 78) for name, rate in IB_SPECS.items(): for links in (8, 16): bw = calc_bandwidth(rate, links, oversubscription=1.0) t_ms = calc_allreduce_time(data_size, bw, latency, n_nodes) * 1000 print(f"{name:6s}| {links:5d} | {bw:15.3f} | {t_ms:10.3f}") print("-" * 78) print("结论: 链路速率和链路数翻倍, 通信耗时几乎线性下降;") print(" 收敛比越高(阻塞越严重), 有效带宽越低.") if __name__ == "__main__": main()
return link_rate * num_links / 8 / oversubscription将 Gbps 转为 GB/s(除以 8),再除以收敛比得到真实可用带宽,收敛比越大可用带宽越低。steps = 2 * (n_nodes - 1)Ring AllReduce 的总步数公式,前半程做数据归并、后半程做全员分发,各 N-1 步。per_step_data = data_size / n_nodes每步每个节点只需传输总数据的 1/N,这是 Ring 模式能打满带宽的关键设计。calc_allreduce_time(data_size, bw, latency, n_nodes) * 1000将秒换算为毫秒输出,便于直观对比各规格下的通信延迟。
常见误区
误区“IB 和以太网都是网嘛,只是速度不同,配置方法应该差不多。我在服务器上装个 IB 驱动,再把 IP 配好不就行了?”
正解两者底层机制完全不同。IB 专为高性能计算设计了 RDMA 硬件直通、无损网络(链路层流控)、子网管理器等机制,数据搬运不经过 CPU 和内核协议栈。配置上 IB 需要单独的子网管理器、LID 寻址和专用路由计算,远不止“配个 IP”那么简单。把 IB 当以太网用,性能发挥不出三成。
为何常见:都叫“网”,都有交换机、网线和端口速率的概念,表面相似性容易让人忽略协议本质的差异。
误区“直接上最新的 NDR 400G 旗舰卡准没错,贵有贵的道理,一步到位省得以后升级。”
正解网卡选型要匹配 GPU 数量、通信模式、PCIe 代际和预算。如果你的训练通信量只有 100Gbps 需求,配四张 NDR 卡也是闲置。更关键的是,老旧服务器的 PCIe 3.0/4.0 接口可能喂不饱新网卡的吞吐,出现“好马配破车”的瓶颈。正确的做法是先测通信峰值,再按公式计算张数并留 30% 余量。
为何常见:硬件消费习惯让人直觉认为“最贵=最好”,忽略了系统匹配和性价比。
误区“SM 配置文件写好、主备部署完,它自己会跑,我半年都不用管它。”
正解SM 是持续运行的守护者,需要定期巡检。链路新增、设备替换、路由重算、LMC 调整、告警日志分析,都是日常运维事项。主备切换后要确认是否自动恢复;集群扩容后要验证新路由是否生效。放任不管的 SM 可能在关键时刻“掉链子”,导致全网失联。
为何常见:配置完成后集群“看起来”稳定运行,容易让人产生“无事可做”的错觉,忽略了后台状态变化。
误区“我看了监控,丢包率一直是 0,所以网络肯定没问题,不用再查别的指标了。”
正解丢包率是网络病变的“最终症状”,而非早期信号。链路降速(端口协商失败掉到低速率)、CRC 错包计数升高、时延抖动、队列溢出等指标往往先于丢包出现异常。正确做法是把 ibstatus 的端口速率、SM 日志错误数、端口接收错误计数和丢包率一起纳入巡检看板,才能提前发现隐患。
为何常见:丢包率最直观、最好理解,容易成为唯一的心理安慰指标,忽略了其他更隐蔽的退化信号。
误区“装了 HCCL 库,驱动加载了,所有通信应该自动用上全部 IB 带宽,我什么都不用配置。”
正解HCCL 提供的是通信原语和算法骨架,但运行参数需要人工调优:HCCL_BUFFSIZE 决定缓冲区大小、HCCL_CONNECT_TIMEOUT 影响建连节奏、通信模式(ring 还是 tree)要按集群规模选择。不调参直接跑,可能在多节点拥塞时严重掉速,甚至出现初始化超时失败。
为何常见:现代库的“自动配置”宣传容易让人误以为开箱即满速,忽略了分布式通信的复杂性和调参空间。
面试题
Q1. InfiniBand 网络相对传统以太网的核心优势是什么?
- A.采购成本更低
- B.低时延高带宽← 正确答案
- C.配置更简单
- D.兼容性更广
答案:B。IB 的核心优势是通过 RDMA 硬件直通实现低时延和高带宽,数据不经过 CPU 拷贝,时延比以太网低一个量级。A 错在 IB 成本远高于以太网;C 错在 IB 配置复杂度更高;D 错在两者协议不兼容,IB 不能替代所有以太网场景。
Q2. 一张 NDR 规格 IB 网卡的单个端口速率是多少?
- A.100Gbps
- B.200Gbps
- C.400Gbps← 正确答案
- D.800Gbps
答案:C。NDR 单端口速率为 400Gbps(4×100Gbps 通道),是当前主流高性能规格。A 对应 EDR(100Gbps),B 对应 HDR(200Gbps),D 是 XDR 的规划目标,尚未规模商用。
Q3. Fat-Tree 拓扑中,收敛比 R=1 表示什么?
- A.上下行带宽相等← 正确答案
- B.上行带宽大于下行
- C.下行带宽大于上行
- D.不需要核心层
答案:A。收敛比 R = 上行聚合带宽 ÷ 下行聚合带宽。R=1 表示上下行等宽,任意节点间通信无阻塞,这是大规模训练最理想的网络模型。B、C 分别对应 R>1 和 R<1 的阻塞场景,D 与收敛比概念无关。
Q4. InfiniBand 子网管理器(SM)的职责包括哪些?
- A.发现网络节点← 正确答案
- B.分配节点LID← 正确答案
- C.计算转发路由← 正确答案
- D.编译训练代码
答案:ABC。SM 是 IB 子网的“交通指挥总局”,负责发现网内节点、为每个节点分配 16 位 LID、计算节点间路径并下发转发表。编译训练代码属于开发工具链的职责,与 SM 无关,因此 D 错误。
Q5. 在 4 节点 Ring AllReduce 通信中,总共需要多少步传输?
- A.3步
- B.4步
- C.6步← 正确答案
- D.8步
答案:C。Ring AllReduce 分 scatter-reduce 和 all-gather 两个阶段,每阶段 N-1 步,总步数为 2×(N-1)。4 节点时 2×(4-1)=6 步,即 3 步归并 + 3 步分发。其余选项均不符合公式。
Q6. 以下哪些命令是 IB 网络故障排查的常用工具?
- A.运行ibstatus← 正确答案
- B.运行ibdiagnet← 正确答案
- C.运行netstat
- D.运行nvidia-smi
答案:AB。ibstatus 查看端口速率和链路状态,ibdiagnet 做全网拓扑与健康检查,两者是 IB 专属工具。netstat 属于 TCP/IP 协议栈工具,不查 IB 链路;nvidia-smi 是 GPU 状态查看工具,也不直接反映 IB 网络健康。
Q7. 某训练任务跨节点通信峰值带宽需要 600Gbps,使用单端口 HDR(200Gbps)网卡,至少需要几张?
- A.2张
- B.3张← 正确答案
- C.4张
- D.6张
答案:B。600 ÷ 200 = 3 张,这是满足需求的理论下限。但按最佳实践,还应预留 30% 余量,即 600×1.3÷200 = 3.9,向上取整为 4 张。题目问“至少”所以选 B,实际生产建议选 C 4 张。
Q8. GPU 集群中 HCCL 的主要作用是什么?
- A.集合通信库← 正确答案
- B.显存管理器
- C.编译器工具
- D.驱动升级器
答案:A。HCCL 是昇腾集群的集合通信库,提供 allreduce、broadcast 等分布式通信原语,屏蔽底层 IB/以太网差异。显存管理由 CUDA 或驱动负责,编译和驱动升级也都不是 HCCL 的职责,因此 B、C、D 错误。
Q9. 根据 Ring AllReduce 耗时公式,影响总耗时的因素包括?
- A.数据块大小← 正确答案
- B.链路带宽← 正确答案
- C.网络时延← 正确答案
- D.风扇转速
答案:ABC。公式 T = 2(N-1)×(D/B+L) 显示,耗时受每步数据量 D、链路带宽 B 和单跳时延 L 影响。风扇转速最多通过散热间接影响硬件降频,不直接进入通信公式,因此 D 错误。
Q10. 4 节点 Ring AllReduce 中,总数据量 32MB,链路带宽 25GB/s,单跳时延 2μs,总耗时最接近?
- A.1.34ms
- B.2.03ms← 正确答案
- C.2.87ms
- D.4.06ms
答案:B。每步传输数据 D = 32MB ÷ 4 = 8MB = 8.39×10⁶ 字节;每步耗时 = 8.39e6 ÷ 25e9 + 2e-6 ≈ 0.3376ms;总步数 2×(4-1)=6 步;总耗时 6×0.3376 ≈ 2.03ms。A 只算了单步耗时,C 误用总数据量一次传完,D 是重复累加了时延项。