完整文档索引见 llms.txt。 在任意 URL 后追加 `.md` 即可查看该页面的 Markdown 版本。
数据并行、张量并行、流水线并行、专家并行和混合并行
并行策略会将推理工作分布到多个设备上,以提升吞吐量、容纳更大的模型,并更高效地利用硬件。随着模型规模不断增大、复杂度持续提升,新的并行化策略也在不断出现。
数据并行
数据并行是加速计算的常见技术。在这种方法中,模型权重会在多个 GPU 设备之间复制,而输入数据的全局批次会被划分为更小的微批次。每个设备只处理分配给自己的微批次,并且这一过程会在所有设备上并行发生。这样可以通过同时处理更大的批次来实现更快的执行速度。
张量并行
张量并行会将模型中的单个层切分成更小的块。这些块会在不同设备之间独立并行计算。例如,在矩阵乘法过程中,矩阵的不同切片可以同时在不同 GPU 上处理。
这种方法既能加快计算速度,也能让服务运行那些无法装入单个设备内存的 LLM。不过,由于它会引入额外的设备间通信,因此你需要在性能收益和这部分开销之间做好权衡。
流水线并行
流水线并行 会将模型层划分为按顺序排列的多个块,每个块分配给一个独立设备。数据会像装配线一样流经这些块,一个设备的输出会成为下一个设备的输入。比如,在四路流水线中,每个设备会处理模型层的四分之一。
不过,由于每个设备都依赖前一个设备的输出,因此某些设备在某些时刻可能会空闲,这意味着资源利用不足。为了减少这些空闲时间,可以将输入批次拆分为更小的微批次。每个微批次会依次流经流水线,并在最后累积梯度。这种微批处理能够提升 GPU 利用率,尽管它并不能彻底消除空闲时间。
需要注意的是,由于不同流水线阶段之间存在通信,流水线并行可能会增加每个请求的总延迟。
专家并行
专家并行是一种专门用于 Mixture of Experts (MoE) 模型的并行策略。在这些模型中,每个 token 只会激活模型专家中的一个子集。与其在每个设备(例如 GPU)上复制所有专家,不如将专家本身拆分到不同设备上。
每个 GPU 只保存部分专家的完整权重,而不是全部专家的权重。这意味着每个 GPU 只处理分配给其所存储专家的那些 token。相比之下,如果你对 MoE 模型应用张量并行,它只是简单地切分所有专家的权重矩阵,并将这些切片分布到所有设备上。
通过使用专家并行,可以更高效地利用 GPU。与在每个设备上复制整个模型相比,这样能减少内存和计算开销。
混合并行
对于某些模型来说,仅依赖单一并行策略通常是不够的。混合并行会结合两种或更多并行技术,以实现更好的可扩展性、效率和硬件利用率。
一个典型的混合配置可能如下所示(结合数据并行和张量并行):
如果你有 8 张 GPU,可以先在前 4 张 GPU 上应用张量并行(TP=4),然后再用数据并行(DP=2)把这套配置复制到剩余 GPU 上。
需要注意,这只是众多可能组合中的一种,而且每种组合都有各自的优缺点。在上面的例子中,张量并行会在 GPU 之间引入通信开销,尤其是在推理阶段。因此,使用更高的 TP 度并不总能带来更好的性能。
另一种配置方式是降低张量并行程度、提高数据并行程度。例如,你可以设置 TP=2、DP=4:
这会减少跨 GPU 通信,因此可能有助于降低推理延迟。不过,这里有一个代价:模型权重会占用 GPU 内存中的很大一部分,尤其是在大模型场景下。降低张量并行意味着参与分担模型的 GPU 更少,留给 KV 缓存的空间也会更少。这可能会削弱前缀缓存等推理优化手段的效果。
这些权衡并不只存在于张量并行和数据并行之间。在设计混合并行方案时,必须基于你的具体模型大小、硬件配置和推理需求,对不同配置进行基准测试。不存在放之四海而皆准的统一方案。最优策略通常需要通过调优和实验才能找到。