Scalability
可扩展性是指系统通过增加资源来处理更多数据、用户或计算量的能力。涵盖纵向扩展与横向扩展、阿姆达尔定律和多 GPU AI。
可扩展性是指系统通过增加资源来处理不断增长的工作量的能力,例如更多数据、更多用户、更多请求或更大的模型,同时保持可接受的性能和单位工作成本。如果系统的硬件翻倍后几乎能完成两倍的工作,就说明它扩展得很好;如果新增的机器大部分时间都在互相等待,则说明扩展效果很差。在人工智能中,可扩展性涉及三个方面:必须摄取大数据并对其进行预处理的数据流水线、需要分布到多台加速器上的训练任务,以及必须在不增加推理延迟的情况下处理更多请求的推理服务。
纵向扩展与横向扩展#
纵向扩展,也称向上扩展,是将工作负载迁移到更强大的机器上:增加 CPU 核心、RAM,或使用内存更大的 GPU。这种方式不需要修改代码,但受限于最大可用机器,并会留下单点故障。横向扩展,也称向外扩展,是增加机器并在机器间分配工作;这种方式没有固定上限,但要求软件能够划分工作、平衡负载并协调结果。如果 Web 服务和推理服务是无状态的,就能轻松横向扩展:会话和数据存放在共享存储中,因此任何副本都能响应任何请求;数据库则通过分片横向扩展,按键将数据拆分到多台机器上。
云平台会自动执行横向扩展。在 Kubernetes 中,Horizontal Pod Autoscaler 会将当前副本数乘以观测指标与目标值的比率,再向上取整,以此计算副本数:如果 4 个副本的 CPU 平均使用率为 90%,目标值为 60%,副本数就会变为 6。这种自动化就是云计算中的弹性;无服务器计算则进一步扩展这一能力,在流量停止时将副本数降至零。
扩展的限制#
每个并行任务都包含一些无法拆分的工作,例如读取下一个批次、同步结果或写入检查点。Gene Amdahl 于 1967 年指出,无论增加多少处理器,这部分串行工作都会限制加速比,这一结论如今称为 Amdahl 定律:
# Amdahl's law: speedup on n workers when a fraction p of the work runs in parallel
p = 0.95 # parallel fraction; the other 5% runs on one worker
for n in (1, 8, 64, 512):
speedup = 1 / ((1 - p) + p / n)
efficiency = speedup / n # share of the added hardware doing useful work
print(f"{n:>4} workers: {speedup:5.1f}x speedup, {efficiency:4.0%} efficiency")
print(f"Limit with unlimited workers: {1 / (1 - p):.0f}x")如果 95% 的工作可以并行,那么 8 个工作进程可带来 5.9 倍加速比,效率为 74%;64 个进程带来 15.4 倍加速比,效率为 24%;512 个进程带来 19.3 倍加速比,效率为 4%;无论有多少进程,加速比都无法超过 20 倍。John Gustafson 于 1988 年指出,现实用户会随着机器性能提升而扩大问题规模,因此并行部分会增加,串行部分所占比例会缩小。在固定问题上测量加速比称为强扩展;随着硬件增长而扩大问题规模称为弱扩展,大规模训练通常采用这种模式。通信也会进一步限制扩展能力:在数据并行训练中,每增加一块 GPU,每个步骤都必须与其他 GPU 交换梯度,因此网络带宽往往决定任务可以扩展到多大规模。
扩展训练与推理#
分布式训练会根据模型能否装入单个设备来选择并行策略。在数据并行中,每块 GPU 都保存一份完整模型副本,处理每个批次中分配给自己的数据切片,并通过 all-reduce 与其他 GPU 平均梯度,例如 PyTorch 的 DistributedDataParallel。对于无法装入单块 GPU 的模型,可以采用完全分片数据并行、张量并行或流水线并行进行拆分;梯度累积则可以让较少的设备达到较大的有效批次大小。
Ultralytics YOLO 使用多 GPU 训练进行数据并行:传入 device=[0, 1] 会通过 torch.distributed.run 启动 DistributedDataParallel 工作进程,并平均分配批次,因此在两张 GPU 上运行 batch=64 时,每张 GPU 每步会处理 32 张图像。
推理的扩展方式不同,因为每个请求都很小且相互独立。将请求组合成批次可以提高 GPU 利用率和吞吐量,同时只略微增加延迟;连续批处理则将同样的方法用于逐 token 生成 LLM;随着流量增长,模型服务系统会在负载均衡器后增加副本。模型量化和剪枝可以降低每个副本的成本,让相同硬件处理更多请求;边缘 AI则通过将推理分散到数千台设备上,而非集中在一个数据中心来扩展。
可扩展性与相关术语#
- 性能: 系统在给定负载下的速度或准确度,通常用延迟、吞吐量或准确度衡量。可扩展性描述随着负载和资源增加,这些指标能否保持稳定。
- 弹性: 随着一天中的需求变化自动增加和移除资源,最常见的做法是为横向扩展的服务增减副本。
- Scaling laws: 模型损失与模型参数、训练数据和计算量之间的经验关系。它们可以预测模型质量,而系统的可扩展性决定了这些定律所要求的计算资源能否得到高效利用。










