<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Pipeline Parallel on Jiangwan&#39;s Blog</title>
        <link>https://jiangwan.ink/tags/pipeline-parallel/</link>
        <description>Recent content in Pipeline Parallel on Jiangwan&#39;s Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Mon, 24 Aug 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://jiangwan.ink/tags/pipeline-parallel/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>双卡部署大模型：TP、PP、DP 和 Layer Split 到底有什么区别？</title>
        <link>https://jiangwan.ink/p/multi-gpu-llm-tp-pp-dp-layer-split/</link>
        <pubDate>Mon, 24 Aug 2026 10:00:00 +0800</pubDate>
        
        <guid>https://jiangwan.ink/p/multi-gpu-llm-tp-pp-dp-layer-split/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;📚 &lt;strong&gt;双 RTX 5060 Ti 部署 Qwen3.8 系列 · 2/6&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;导读&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;模型单卡放不下以后，“再加一张 GPU”并不是完整答案。Layer Split、Pipeline Parallel、Tensor Parallel 和 Data Parallel 看起来都是多卡推理，实际解决的却是容量、单实例加速和并发吞吐三个不同问题。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;上一篇先把显存问题算清楚了：双 16GB 能不能跑 27B，首先取决于权重能不能装下，以及装完以后还剩多少运行空间。&lt;/p&gt;
&lt;p&gt;但模型单卡放不下以后，“加一张 GPU”并不是一个完整答案。&lt;/p&gt;
&lt;p&gt;多卡部署至少有几种完全不同的思路：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer Split
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Pipeline Parallel（PP）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Tensor Parallel（TP）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Data Parallel（DP）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;它们表面上都是“多张 GPU 跑一个模型服务”，实际解决的问题却不一样。&lt;/p&gt;
&lt;p&gt;先记住一个最简单的结论：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer Split / PP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;主要解决：模型装不下
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;主要解决：模型装不下 + 单个模型实例的计算并行
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;主要解决：并发吞吐
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;下面继续以这套硬件为例：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;2 × RTX 5060 Ti 16GB + Qwen3.8-27B&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;1-layer-split最直观的多卡切法&#34;&gt;1. Layer Split：最直观的多卡切法
&lt;/h2&gt;&lt;p&gt;假设模型有 64 层。&lt;/p&gt;
&lt;p&gt;最简单的办法就是按层拆：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 0 ~ 31
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 32 ~ 63
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;原本一张 16GB GPU 放不下整个模型，现在变成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GPU0 放一部分权重。&lt;/li&gt;
&lt;li&gt;GPU1 放另一部分权重。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两张卡的容量都被利用起来了。&lt;/p&gt;
&lt;p&gt;llama.cpp 的多 GPU layer split，可以先把它理解成这一类思路。&lt;/p&gt;
&lt;p&gt;它最大的优势是灵活。&lt;/p&gt;
&lt;p&gt;如果两张卡容量甚至不一样，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GPU0：16GB&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GPU1：12GB&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;就可以让 GPU0 多放一些层，GPU1 少放一些。&lt;/p&gt;
&lt;p&gt;对于消费级硬件、GGUF、混合显存容量，这种模型放置方式非常实用。&lt;/p&gt;
&lt;h3 id=&#34;layer-split-的问题&#34;&gt;Layer Split 的问题
&lt;/h3&gt;&lt;p&gt;一颗 token 在 Decode 时仍然要依次经过整套模型：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Token
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0 上的前半模型
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU1 上的后半模型
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;输出
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;GPU0 没完成前面的层，GPU1 后面的层就拿不到对应的 Activation。&lt;/p&gt;
&lt;p&gt;所以它首先解决的是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Capacity Scaling——容量扩展。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而不是自动获得：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2× Single-stream Decode Performance。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这也是整个系列里一个很重要的区分：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;模型成功分到两张卡，不等于两张卡会同时为同一层工作。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;2-pipeline-parallel也是按层切但它是一套执行策略&#34;&gt;2. Pipeline Parallel：也是按层切，但它是一套执行策略
&lt;/h2&gt;&lt;p&gt;Pipeline Parallel，简称 PP。&lt;/p&gt;
&lt;p&gt;双卡 PP2 可以画成：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Stage 0              Stage 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0                 GPU1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 0~31   ─────→  Layer 32~63
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;从模型切分上看，它和 Layer Split 很像：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;不同层位于不同 GPU。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;但 PP 不只是“把哪些层放哪张卡”的问题。&lt;/p&gt;
&lt;p&gt;推理框架还会显式管理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pipeline Stage&lt;/li&gt;
&lt;li&gt;Stage 间通信&lt;/li&gt;
&lt;li&gt;Micro Batch&lt;/li&gt;
&lt;li&gt;Pipeline Scheduling&lt;/li&gt;
&lt;li&gt;分布式 Runtime&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以我更倾向于这样区分：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Layer Split 更像模型放置方式；PP 是完整的并行执行策略。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;pp-能不能让单请求快一倍&#34;&gt;PP 能不能让单请求快一倍？
&lt;/h3&gt;&lt;p&gt;对于单条请求、单 token Decode，通常不能这么理解。&lt;/p&gt;
&lt;p&gt;因为它仍然有：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0 Stage
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU1 Stage
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样的前后依赖。&lt;/p&gt;
&lt;p&gt;但当 Batch 或并发增加后，可以让不同请求处于不同 Stage：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;时间 T1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0：请求 A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU1：空闲
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;时间 T2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0：请求 B
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU1：请求 A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;时间 T3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0：请求 C
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU1：请求 B
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这时候 Pipeline 才真正“流动”起来。&lt;/p&gt;
&lt;p&gt;因此 PP 对吞吐和多请求调度的价值，通常比对单流 Decode 延迟更明显。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;3-tp不是切-layer而是切-layer-里面的矩阵&#34;&gt;3. TP：不是切 Layer，而是切 Layer 里面的矩阵
&lt;/h2&gt;&lt;p&gt;Tensor Parallel，简称 TP。&lt;/p&gt;
&lt;p&gt;它和前面两种方式最大的区别是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;两张 GPU 会同时参与同一层的计算。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              Layer N
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ┌───────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        │               │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ↓               ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      GPU0            GPU1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Matrix Part 0   Matrix Part 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        │               │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        └──────┬────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          通信 / 聚合
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            Layer N+1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;假设一个 Linear 是：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Y = XW&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;可以把 W 切开：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;W0 → GPU0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;W1 → GPU1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两张卡同时计算：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GPU0：X × W0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GPU1：X × W1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然后再通过 Collective 把结果组合成下一步需要的形式。&lt;/p&gt;
&lt;p&gt;在 TP2 下，从第一层到最后一层，两张 GPU 都会持续参与。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;为什么-tp-更可能让双卡的单流-decode-变快&#34;&gt;为什么 TP 更可能让双卡的单流 Decode 变快？
&lt;/h3&gt;&lt;p&gt;RTX 5060 Ti 16GB 单卡显存带宽约：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;448 GB/s&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Layer Split 时，一颗 token 更接近：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0 读前半权重并计算
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU1 读后半权重并计算
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;而 TP2 更接近：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0 读取这一层的一部分权重
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU1 读取这一层的另一部分权重
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;同时进行
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;于是两张卡的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;显存带宽&lt;/li&gt;
&lt;li&gt;计算单元&lt;/li&gt;
&lt;li&gt;Tensor Core&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;都有机会同时参与同一个 Layer。&lt;/p&gt;
&lt;p&gt;这也是为什么 TP 是这几种方案里，最值得拿来讨论&lt;strong&gt;单个模型实例加速&lt;/strong&gt;的一种。&lt;/p&gt;
&lt;p&gt;但 TP 不是免费的。&lt;/p&gt;
&lt;p&gt;每层的局部结果需要通过：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AllReduce&lt;/li&gt;
&lt;li&gt;AllGather&lt;/li&gt;
&lt;li&gt;ReduceScatter&lt;/li&gt;
&lt;li&gt;NCCL&lt;/li&gt;
&lt;li&gt;PCIe / P2P&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;等方式交换或聚合。&lt;/p&gt;
&lt;p&gt;所以 TP 的收益实际上是一笔账：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;并行计算节省的时间
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;跨卡通信时间
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;同步与调度开销
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;最终 Scaling
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;到这里先不展开通信量。&lt;/p&gt;
&lt;p&gt;因为第三篇就专门回答一个最容易凭直觉判断错的问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;没有 NVLink、甚至没有 CUDA P2P 的消费级双卡，TP 到底还值不值得？&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;4-tp-和-pp-最本质的区别&#34;&gt;4. TP 和 PP 最本质的区别
&lt;/h2&gt;&lt;p&gt;可以直接看图。&lt;/p&gt;
&lt;h3 id=&#34;pp2&#34;&gt;PP2
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 31
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 32
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 33
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 63
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每个 Layer 基本只属于一个 Stage。&lt;/p&gt;
&lt;h3 id=&#34;tp2&#34;&gt;TP2
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 0  → GPU0 + GPU1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 1  → GPU0 + GPU1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 2  → GPU0 + GPU1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Layer 63 → GPU0 + GPU1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每一层，两张卡都参与。&lt;/p&gt;
&lt;p&gt;所以最简单的一句话就是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;PP 是切 Layer，TP 是切 Layer 里面的矩阵。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这也是理解二者单流性能差异的关键。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;layer-split-和-pp-为什么看起来那么像&#34;&gt;Layer Split 和 PP 为什么看起来那么像？
&lt;/h3&gt;&lt;p&gt;因为从外面看，它们都可能是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前半模型 → GPU0&lt;/li&gt;
&lt;li&gt;后半模型 → GPU1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;区别更像是关注点不同。&lt;/p&gt;
&lt;h3 id=&#34;layer-split&#34;&gt;Layer Split
&lt;/h3&gt;&lt;p&gt;重点是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;权重怎么放。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;典型问题是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这张卡放多少层？&lt;/li&gt;
&lt;li&gt;那张卡放多少层？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;pipeline-parallel&#34;&gt;Pipeline Parallel
&lt;/h3&gt;&lt;p&gt;重点是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;模型如何被划成 Stage，并按 Pipeline 方式运行。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;它会进一步涉及 Stage、Micro Batch 和调度。&lt;/p&gt;
&lt;p&gt;所以二者虽然都按层切，但不能完全当成同一个概念。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;5-dp根本不是用来解决单模型显存的&#34;&gt;5. DP：根本不是用来解决单模型显存的
&lt;/h2&gt;&lt;p&gt;Data Parallel，简称 DP。&lt;/p&gt;
&lt;p&gt;最简单的 DP2：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;完整模型
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 请求 A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;完整模型
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 请求 B
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;两张 GPU 各放一份完整模型。&lt;/p&gt;
&lt;p&gt;所以如果一个模型本身需要：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;23GB VRAM&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;而单张 5060 Ti 只有：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;16GB&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;单纯开 DP2 没有帮助。&lt;/p&gt;
&lt;p&gt;它不会把：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;16 + 16&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;变成一个 32GB 的模型实例。&lt;/p&gt;
&lt;p&gt;因为每个 DP Replica 都需要自己完整的一份权重。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;dp-解决的是并发吞吐&#34;&gt;DP 解决的是并发吞吐
&lt;/h3&gt;&lt;p&gt;假设单个 Replica 能稳定处理一批请求。&lt;/p&gt;
&lt;p&gt;DP2 相当于：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GPU0：Replica A&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GPU1：Replica B&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两张卡可以独立服务不同请求。&lt;/p&gt;
&lt;p&gt;因此 DP 的核心目标是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Throughput Scaling。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而不是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Single Request Speed。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;请求 A 不会因为 DP2 就自动从 30 token/s 变成 60 token/s。&lt;/p&gt;
&lt;p&gt;但服务可以同时让另一个 Replica 去处理请求 B。&lt;/p&gt;
&lt;p&gt;这和 TP 的目标明显不同。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;6-tpppdp-可以组合&#34;&gt;6. TP、PP、DP 可以组合
&lt;/h2&gt;&lt;p&gt;真实的大规模部署往往不会只使用一种并行方式。&lt;/p&gt;
&lt;p&gt;例如 8 张 GPU 可以做：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;TP4 × DP2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;也就是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0~3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ TP4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ Replica 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU4~7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ TP4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ Replica 2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TP4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;负责一个模型实例内部的并行
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DP2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;负责复制两个服务实例扩展并发
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也可以做：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;TP2 + PP2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;四张 GPU：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Stage 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU0 + GPU1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TP2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Stage 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GPU2 + GPU3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TP2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也就是层之间用 PP，层内部用 TP。&lt;/p&gt;
&lt;p&gt;所以 TP、PP、DP 并不是互斥选项，它们是在不同维度切模型和请求。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;7-一个表看懂四种方式&#34;&gt;7. 一个表看懂四种方式
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;方式&lt;/th&gt;
          &lt;th&gt;怎么切&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;扩展单实例显存&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;单请求加速潜力&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;并发扩展&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Layer Split&lt;/td&gt;
          &lt;td&gt;按层放到不同 GPU&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;✅&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;较弱&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;一般&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;PP&lt;/td&gt;
          &lt;td&gt;按 Stage 分模型&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;✅&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;有限&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;✅&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;TP&lt;/td&gt;
          &lt;td&gt;每层内部切矩阵&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;✅&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;✅&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;间接&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;DP&lt;/td&gt;
          &lt;td&gt;复制完整模型&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;❌&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;❌&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;✅✅&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果换成实际问题：&lt;/p&gt;
&lt;h3 id=&#34;模型单卡放不下怎么办&#34;&gt;模型单卡放不下怎么办？
&lt;/h3&gt;&lt;p&gt;优先看：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Layer Split / PP / TP&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;想提高单请求-decode-速度&#34;&gt;想提高单请求 Decode 速度？
&lt;/h3&gt;&lt;p&gt;优先研究：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;TP&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;模型单卡已经能放下只想扩大并发&#34;&gt;模型单卡已经能放下，只想扩大并发？
&lt;/h3&gt;&lt;p&gt;优先考虑：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;DP&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;模型特别大单一-tp-或-pp-都不够&#34;&gt;模型特别大，单一 TP 或 PP 都不够？
&lt;/h3&gt;&lt;p&gt;就会进入：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;TP + PP&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这样的组合。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;8-为什么消费级双卡特别值得测试-tp&#34;&gt;8. 为什么消费级双卡特别值得测试 TP？
&lt;/h2&gt;&lt;p&gt;数据中心 GPU 的多卡环境往往拥有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NVLink&lt;/li&gt;
&lt;li&gt;NVSwitch&lt;/li&gt;
&lt;li&gt;高带宽 GPU 互联&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;消费级 GPU 的现实则经常是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PCIe&lt;/li&gt;
&lt;li&gt;没有 NVLink&lt;/li&gt;
&lt;li&gt;P2P 甚至可能不可用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这就出现了一个很自然的担心：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TP 每层都要同步，PCIe 这么慢，是不是直接把双卡并行收益吃光？&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;但这里不能只拿：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;GPU 本地显存带宽：几百 GB/s&lt;/code&gt;，而 &lt;code&gt;GPU 间通信：个位数或十几 GB/s&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;直接下结论。&lt;/p&gt;
&lt;p&gt;因为 TP 的收益来自两张卡同时处理自己的权重分片，而跨卡同步的也不是“把几十 GB 模型权重来回传”。&lt;/p&gt;
&lt;p&gt;到底通信量有多大、为什么没有 P2P 也还能跑出不错的 Scaling，必须结合实际模型 hidden size、Collective 次数和实测带宽一起算。&lt;/p&gt;
&lt;p&gt;这就是下一篇的主题。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;9-双-5060-ti我会怎么选&#34;&gt;9. 双 5060 Ti，我会怎么选？
&lt;/h2&gt;&lt;p&gt;如果模型单卡能放下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;单用户 / 单请求
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ 单卡就可能够用
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;大量并发
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ DP 才开始有意义
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果模型单卡放不下，又是 llama.cpp / GGUF、希望兼容不同显存容量和 CPU + GPU：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Layer Split&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;通常很自然。&lt;/p&gt;
&lt;p&gt;如果使用 vLLM，希望一个模型实例同时利用两张 GPU 的计算与显存带宽：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;TP2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;更值得优先测试。&lt;/p&gt;
&lt;p&gt;如果 TP 不适合当前模型、并行维度受限，或者通信条件实在太差：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PP&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;则可以回到容量优先的方向。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;10-结论&#34;&gt;10. 结论
&lt;/h2&gt;&lt;p&gt;多 GPU 推理不能简单理解成：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;多一张卡
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;多一倍性能
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;不同并行方式解决的是不同问题：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Layer Split&lt;/strong&gt;：按层分权重，重点解决容量。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PP&lt;/strong&gt;：按 Stage 分模型，重点解决超大模型和 Pipeline 吞吐。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TP&lt;/strong&gt;：切分每一层内部的矩阵，重点解决单实例模型并行和计算性能。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DP&lt;/strong&gt;：复制完整模型，重点解决多 Replica 并发吞吐。&lt;/p&gt;
&lt;p&gt;其中最值得先记住的一句话还是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;PP 是切 Layer，TP 是切 Layer 里面的计算，DP 是复制整个模型。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;对于双 RTX 5060 Ti，真正有意思的问题也从这里开始：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TP2 确实能让两张 GPU 同时工作，但消费级显卡又没有 NVLink。PCIe 通信到底会损失多少性能？&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下一篇直接用实测回答：&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://jiangwan.ink/p/rtx-5060-ti-tp2-pcie-p2p/&#34; &gt;《两张 RTX 5060 Ti 为什么没有两倍推理速度？显存带宽、PCIe 与 P2P》&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;系列导航：&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://jiangwan.ink/p/dual-rtx-5060-ti-27b-vram/&#34; &gt;← 上一篇：2× RTX 5060 Ti 16GB 能跑 27B 大模型吗？先把显存算清楚&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;https://jiangwan.ink/p/rtx-5060-ti-tp2-pcie-p2p/&#34; &gt;下一篇：两张 RTX 5060 Ti 为什么没有两倍推理速度？显存带宽、PCIe 与 P2P →&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
