问题:资源翻倍,等待却未减半
企业希望缩短 AI 响应时间。计算似乎可以分工:一台用十二毫秒,两台应当用六毫秒。然而设备需要交换中间结果、相互等待并组合答案,这可能耗尽全部收益。本文问一个具体问题:工作量多大时,把模型分到两个设备才会加快同一操作?
先构造可分计算,再列时间账本,最后求临界点。不逐项推算公式,也可跟随三个问题:拆什么、传什么、到底节省多少时间?以下时间都是 Python 算术模型的假设参数。没有运行双 GPU、测量网络或复现基准,不是 EL-AI 产品或部署结果。
划分模型不等于复制模型
数据并行让模型副本处理不同样本,训练还需协调更新。模型并行则把同一操作涉及的网络部分分散。这里研究矩阵层面的划分,即张量并行。张量是多维数值数组,矩阵是二维情况。每秒处理更多请求,不等于缩短单个请求等待。
取最小网络:行向量 x,经 A 产生四个中间值,ReLU 将负数置零,再经 B 输出两个值。它不是训练后的语言模型,只用于观察通信来源。形状为 x:1 × 2,A:2 × 4,B:4 × 2;数字无物理单位。
将 A 前两列与后两列分开,同时划分 B 对应的前后两行。设备 1 计算 ReLU([1,1]),最终贡献 [1,1];设备 2 计算 ReLU([0,4]),贡献 [−4,8]。相加得 [−3,9],与原输出一致。求和必须发生;若下一步两设备都需完整输出,两者均要接收。all-reduce 集体操作合并贡献,并让每个参与者得到结果。
求和不能任意穿过非线性函数:ReLU(2 − 3) 为零,而 ReLU(2) + ReLU(−3) 为二。因此行列划分决定强制通信点。Python 整数示例验证代数等价;浮点精度与求和顺序可能造成数值差异。分布实现既需计时,也需检查输出质量。
明确单位的时间账本
转而建模较大工作阶段。S 是不可分时间,C 是单设备可分时间。两个相同设备的理想可分时间为 C/2。引入局部效率 η:η = 0.8 表示每部分达到假定理想效率的 80%,于是时间为 C/(2η)。η 不是概率,也不是面板 GPU 利用率;它汇总计算形状和实现影响,不含单独计入的通信。
Q 为阶段内串行通信次数,ℓ 为每次启动成本,V 为每次有效关键路径传输字节,B 为有效字节每秒。H 是总通信时间。V 未必等于张量逻辑字节,集体算法可能分块或多轮传输。Q、V 应来自实际配置。公式假设通信相同、不与计算重叠、无竞争者、无请求队列。
| 假设参数 | 值 |
|---|---|
| S | 0.8 ms |
| C | 12 ms |
| η | 0.8 |
| Q | 4 |
| ℓ | 0.03 ms |
| V | 2 000 000 bytes |
| B | 10 GB/s = 10¹⁰ bytes/s |
使用十进制 GB:每秒一百亿字节,不是比特或 GiB。每次传输 2,000,000 / 10,000,000,000 秒,即 0.2 毫秒,加启动 0.03 毫秒。四次 H = 0.92 毫秒。并行计算为 12/(2 × 0.8) = 7.5 毫秒。故 T₁ = 12.8、T₂ = 9.22 毫秒,加速约 1.388 倍,并非两倍。这是在评价表中假设,不描述真实显卡。
推导盈亏平衡点
判断分工是否有益,要求 T₂ 小于 T₁。两边 S 抵消,剩下计算节省与 H。移项得到下式:节省的计算时间必须大于新增通信时间。
η = 0.8 时括号为 0.375,阈值为 0.92/0.375 = 2.45333 毫秒。等于阈值时耗时相同,超过才获益。若 C = 1 毫秒,其余不变,单设备为 1.8 毫秒,双设备为 2.345:资源越多反而越慢。η 不超过 0.5 时分母非正,拆分连计算时间都没省,正通信成本使该模型无法加速。
C 保持 12 毫秒而有效带宽降至 1 GB/s 时,H = 8.12、T₂ = 16.42 毫秒,大任务也变慢。50 GB/s 时 H = 0.28、T₂ = 8.58 毫秒。无限带宽消除 V/B,却不消除四次启动成本。大消息常受带宽影响,小消息很多时固定成本可能主导。合并消息可能有益,也可能推迟数据可用时间,并非免费优化。

延迟、吞吐量与效率不同
加速比为 T₁/T₂,双设备并行效率再除以二,基例约 0.694。不表示浪费了 30.6% 能量,因为比较的是时间和资源数量,并未测功率。两设备共同占用。若单卡能容纳模型且请求独立,两副本可能提高服务容量;与拆分比较还需负载、队列、内存约束,本计算未涉及。
S 也重要。相同的 S 在阈值比较中抵消,却降低相对收益。S = 100 毫秒、C = 12 毫秒、10 GB/s 时,总时间为 112 与 108.42 毫秒,仅约 1.033 倍加速。优化总等待中很小一部分,用户可能几乎无感。若分布新增串行工作,需加进 T₂,阈值会恶化,不能当作共有成本抵消。
重叠不等于通信消失
系统可边传一部分结果边做其他计算。假设 C/(2η) 与 H 两块完全重叠,则合并耗时不能低于较长一块,得乐观下界 S + max[C/(2η),H],基例为 8.3 而非 9.22 毫秒。这不是预测:依赖未到结果的计算仍需等待,通信还可能竞争内存或执行资源。
增大批量,即一起处理更多样本,可能提升局部计算效率,也改变通信量和凑批等待。若 V、η 同变,只放大 C 而固定其余就不成立。两设备增至四设备也会改变集体算法、拓扑、消息数、局部形状。图中固定其他参数只变 C,是隔离原因,不是承诺真实负载都沿此曲线。
从推导走向可验证测量
附件不使用分布库:用整数列表计算完整与拆分网络,检查相等,再计算时间公式。末尾片段输出 [−3,9] 和 JSON 的六个案例。曲线为确定网格,无随机种子。没有把 Python 执行耗时冒充 GPU 时间,那会是不同且误导的比较。
硬件验证应固定模型、精度、输入形状、设备、互连、驱动与软件版本。区分启动预热和稳定重复,等待异步操作真正完成,查看计算通信轨迹。均值、中位数、百分位回答不同问题,较低均值可能掩盖长尾。该协议用于使分析可检验,尚未执行。
Megatron-LM 的 arXiv 第 4 版(2020 年 3 月 13 日)描述协同矩阵划分与 Transformer 通信。其扩展实验还改变模型大小,并非本文固定工作量比较,因此不移用其性能百分比。
PyTorch 文档介绍 all-reduce 和通信性能分析工具,可指导观察真实实现,但不证明本公式涵盖全部后端,也不证明异步调用消除依赖。
同一公式也能提出网络要求
先前问需要多少计算,现在反问:工作固定时,最低有效带宽是多少?从不等式隔离 V/B。这里 C、ℓ 用秒,V 用字节,B 用字节每秒。结果针对具体通信的有效带宽,不是端口宣传值。
D 是支付启动成本后,每次字节传输可用时间。C = 0.012 秒和基例参数下,D = 0.001095 秒,带宽需超过约 1.82648 GB/s。若 D 非正,则任何有限带宽都不够,启动已耗尽余量。因此理论更宽的链路不能解决所有减速,需按同消息大小和算法测完整路径。
也可求 η:当 C 大于 H 时,需要超过 C/[2(C − H)]。C = 12、H = 0.92 毫秒时阈值约 0.54152;C = 1 毫秒时变成 6.25,在效率至多为一的假设下不可能。即使消除全部局部低效也无益。两个阈值从不同角度描述同一账本,识别即使完美实现也无法改变决策的优化。
回答最初问题
只有计算节省超过新增成本,双设备才加快同一阶段。在声明假设下,可分计算须超过 2.45333 毫秒;12 毫秒时加速约 1.388 倍。带宽、启动、效率、依赖都会改变阈值。拆分也可能只是为了让模型装入内存,并不加速,那是另一目标。选基础设施需区分容量、响应时间和成本,测量用户真正关心的路径。
参考文献与可复现性
PyTorch — Distributed communication package: all_reduce and profiling collective communication.
from experiment import run
r = run()
print(r['matrix']['full'])
for case in r['cases']:
print(round(case['one_ms'], 6), round(case['two_ms'], 6),
round(case['speedup'], 6))
代码、数据与说明 · JSON. 教学计算使用 Python 3.14.0,图使用 Matplotlib 3.11.2。分析由 AI 辅助,不声称经过同行评审或人工审核。原创 ImageGen 封面仅作示意,不记录 EL-AI 人员、场所或实际安装。来源查阅于 2026 年 10 月 4 日。

