<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Pp on Wilson Wu</title><link>https://wilsonwu.me/zh/tags/pp/</link><description>Recent content in Pp on Wilson Wu</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Wed, 24 Dec 2025 00:00:00 -0500</lastBuildDate><atom:link href="https://wilsonwu.me/zh/tags/pp/index.xml" rel="self" type="application/rss+xml"/><item><title>大语言模型推理并行策略全景解析：TP / DP / PP / EP 原理与 vLLM 实战性能验证</title><link>https://wilsonwu.me/zh/blog/2025/llm-inference-parallelism-in-vllm/</link><pubDate>Wed, 24 Dec 2025 00:00:00 -0500</pubDate><guid>https://wilsonwu.me/zh/blog/2025/llm-inference-parallelism-in-vllm/</guid><description>&lt;p&gt;当大语言模型的参数规模跨过几十亿门槛之后，一个事实变得不可回避：&lt;strong&gt;单卡时代已经结束&lt;/strong&gt;。无论是训练还是推理，模型本身的参数规模、KV Cache 的增长速度，以及真实业务中并发请求带来的显存与算力压力，都决定了大模型必须运行在多 GPU、甚至多节点的环境中。&lt;/p&gt;</description><content:encoded><![CDATA[<p>当大语言模型的参数规模跨过几十亿门槛之后，一个事实变得不可回避：<strong>单卡时代已经结束</strong>。无论是训练还是推理，模型本身的参数规模、KV Cache 的增长速度，以及真实业务中并发请求带来的显存与算力压力，都决定了大模型必须运行在多 GPU、甚至多节点的环境中。</p>
<p><img alt="分布式推理趋势" loading="lazy" src="/zh/blog/2025/llm-inference-parallelism-in-vllm/1-overview.png"></p>
<p>然而，<strong>用多张卡跑模型</strong>并不是一个简单的资源堆叠问题。在实践中，工程团队很快会发现：<strong>不同的拆分方式，带来的性能表现差异可能是数量级的</strong>。有的配置 TTFT 极低，却在高并发下迅速失速；有的方案吞吐惊人，却难以满足在线服务对延迟的要求；还有一些组合在理论上看似合理，却在真实硬件拓扑下被通信成本完全吞噬。</p>
<p>在训练与推理阶段，业界逐步沉淀出四类核心并行策略：</p>
<ul>
<li><strong>TP（Tensor Parallelism，张量并行）</strong></li>
<li><strong>DP（Data Parallelism，数据并行）</strong></li>
<li><strong>PP（Pipeline Parallelism，流水线并行）</strong></li>
<li><strong>EP（Expert Parallelism，专家并行，主要用于 MoE）</strong></li>
</ul>
<p><img alt="alt text" loading="lazy" src="/zh/blog/2025/llm-inference-parallelism-in-vllm/2-parallelism.png"></p>
<h2 id="大语言模型四种核心并行策略基础">大语言模型四种核心并行策略基础</h2>
<h3 id="tensor-parallelismtp算子级拆分">Tensor Parallelism（TP）：算子级拆分</h3>
<p>核心思想：将单层内部的矩阵计算（如 Linear / Attention）沿维度切分到多张 GPU 上并行计算。</p>
<p>典型拆分方式：</p>
<ul>
<li>Linear 层按 <code>hidden_size</code> 或 <code>num_heads</code> 切分</li>
<li>Attention 的 Q / K / V 或 FFN 的中间层拆分</li>
</ul>
<p><img alt="alt text" loading="lazy" src="/zh/blog/2025/llm-inference-parallelism-in-vllm/3-tp.png"></p>
<p>优点：</p>
<ul>
<li>单层显存占用显著下降</li>
<li>单 token 延迟较低（适合推理）</li>
</ul>
<p>代价：</p>
<ul>
<li>每一层都需要 <strong>All-Reduce / All-Gather</strong></li>
<li>通信频繁，对 NVLink / IB 依赖高</li>
</ul>
<p>适用场景：</p>
<ul>
<li>单模型过大但层数不多</li>
<li>对 <strong>TTFT（Time To First Token）</strong>敏感的在线推理</li>
</ul>
<h3 id="data-parallelismdp请求级复制">Data Parallelism（DP）：请求级复制</h3>
<p>核心思想：模型完整复制到多张 GPU，每张 GPU 处理不同请求或 batch。</p>
<p><img alt="alt text" loading="lazy" src="/zh/blog/2025/llm-inference-parallelism-in-vllm/4-dp.png"></p>
<p>优点：</p>
<ul>
<li>实现简单</li>
<li>无模型内部通信</li>
<li>吞吐线性扩展</li>
</ul>
<p>代价：</p>
<ul>
<li>显存需求最高（每卡一整模型）</li>
<li>单请求延迟不变</li>
</ul>
<p>适用场景：</p>
<ul>
<li>模型能放进单卡</li>
<li>离线推理 / 高并发吞吐</li>
</ul>
<h3 id="pipeline-parallelismpp层级切分">Pipeline Parallelism（PP）：层级切分</h3>
<p>核心思想：将模型按层切分到多张 GPU，请求在 GPU 间<strong>流水线式</strong>流动。</p>
<p><img alt="alt text" loading="lazy" src="/zh/blog/2025/llm-inference-parallelism-in-vllm/5-pp.png"></p>
<p>优点：</p>
<ul>
<li>几乎无层内通信</li>
<li>显存效率高（比 DP 好）</li>
</ul>
<p>代价：</p>
<ul>
<li>pipeline bubble（气泡）带来空转</li>
<li>小 batch 下延迟显著升高</li>
</ul>
<p>适用场景：</p>
<ul>
<li>超深模型（如 70B+）</li>
<li>长序列推理或训练</li>
</ul>
<h3 id="expert-parallelismepmoe-专属并行">Expert Parallelism（EP）：MoE 专属并行</h3>
<p>核心思想：在 MoE（Mixture of Experts）模型中，不同 Expert 分布在不同 GPU 上，仅被激活的 Expert 参与计算。</p>
<p><img alt="alt text" loading="lazy" src="/zh/blog/2025/llm-inference-parallelism-in-vllm/6-ep.png"></p>
<p>优点：</p>
<ul>
<li>参数规模大但计算稀疏</li>
<li>性能/参数比极高</li>
</ul>
<p>代价：</p>
<ul>
<li>Token 路由与负载不均</li>
<li>通信模式复杂</li>
</ul>
<p>适用场景：</p>
<ul>
<li>MoE 模型（如 Mixtral、DeepSeek-MoE）</li>
<li>高参数规模、可接受一定调度复杂度</li>
</ul>
<h2 id="并行策略并非互斥而是可组合的">并行策略并非互斥，而是可组合的</h2>
<p>在真实系统中，并行策略通常<strong>组合使用</strong>：</p>
<table>
	<thead>
			<tr>
					<th>组合方式</th>
					<th>典型用途</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>TP × DP</td>
					<td>推理最常见组合</td>
			</tr>
			<tr>
					<td>TP × PP</td>
					<td>超大模型训练 / 推理</td>
			</tr>
			<tr>
					<td>TP × EP</td>
					<td>MoE 推理</td>
			</tr>
			<tr>
					<td>DP × EP</td>
					<td>高吞吐 MoE 服务</td>
			</tr>
			<tr>
					<td>TP × PP × DP</td>
					<td>大规模分布式集群</td>
			</tr>
	</tbody>
</table>
<p>问题不在于<strong>能不能用</strong>，而在于：<strong>不同组合，在真实推理负载下，性能表现差异极大。</strong></p>
<p>这正是 vLLM 非常适合做验证的原因。</p>
<h2 id="vllm-中的并行能力概览">vLLM 中的并行能力概览</h2>
<p>vLLM 是一个面向<strong>高性能 LLM 推理</strong>的引擎，其核心优势包括：</p>
<ul>
<li>高效 KV Cache 管理（PagedAttention）</li>
<li>原生支持 <strong>TP / PP</strong></li>
<li>对 DP 友好（多实例、多副本）</li>
<li>MoE 模型中支持 EP（依赖模型实现）</li>
</ul>
<p>在 vLLM 中，并行配置主要通过<strong>启动参数 + 资源拓扑</strong>控制。</p>
<h2 id="基于-vllm-的并行策略配置示例">基于 vLLM 的并行策略配置示例</h2>
<h3 id="tensor-parallelismtp">Tensor Parallelism（TP）</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vllm serve meta-llama/Llama-2-70b-hf <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span>  --tensor-parallel-size <span style="color:#ae81ff">4</span>
</span></span></code></pre></div><p>含义：</p>
<ul>
<li>模型每一层被拆分到 4 张 GPU</li>
<li>适合单请求低延迟验证</li>
</ul>
<h3 id="pipeline-parallelismpp">Pipeline Parallelism（PP）</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vllm serve meta-llama/Llama-2-70b-hf <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span>  --pipeline-parallel-size <span style="color:#ae81ff">2</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span>  --tensor-parallel-size <span style="color:#ae81ff">2</span>
</span></span></code></pre></div><p>含义：</p>
<ul>
<li>2-stage pipeline</li>
<li>每 stage 内 2-way TP</li>
<li>总 GPU 数 = 4</li>
</ul>
<h3 id="data-parallelismdp">Data Parallelism（DP）</h3>
<p>vLLM 本身不显式声明 DP，而是通过<strong>多实例部署</strong>实现：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># GPU 0-3</span>
</span></span><span style="display:flex;"><span>CUDA_VISIBLE_DEVICES<span style="color:#f92672">=</span>0,1,2,3 vllm serve ...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># GPU 4-7</span>
</span></span><span style="display:flex;"><span>CUDA_VISIBLE_DEVICES<span style="color:#f92672">=</span>4,5,6,7 vllm serve ...
</span></span></code></pre></div><p>再通过上层负载均衡（如 Kubernetes / Gateway）实现 DP。</p>
<h3 id="expert-parallelismep">Expert Parallelism（EP）</h3>
<p>对于 MoE 模型（如 Mixtral）：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vllm serve mistralai/Mixtral-8x7B-Instruct <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span>  --tensor-parallel-size <span style="color:#ae81ff">4</span>
</span></span></code></pre></div><p>vLLM 会自动将 Expert 分布到 TP 组内 GPU（模型内部实现 EP）。</p>
<h2 id="如何在-vllm-中验证并行组合的真实性能">如何在 vLLM 中“验证”并行组合的真实性能</h2>
<h3 id="核心评测指标">核心评测指标</h3>
<p>建议至少关注以下指标：</p>
<table>
	<thead>
			<tr>
					<th>指标</th>
					<th>含义</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>TTFT</td>
					<td>首 token 延迟</td>
			</tr>
			<tr>
					<td>Tokens/s</td>
					<td>生成吞吐</td>
			</tr>
			<tr>
					<td>GPU 利用率</td>
					<td>并行效率</td>
			</tr>
			<tr>
					<td>KV Cache 命中率</td>
					<td>长上下文效率</td>
			</tr>
			<tr>
					<td>通信开销</td>
					<td>TP / EP 成本</td>
			</tr>
	</tbody>
</table>
<h3 id="推荐对比实验矩阵">推荐对比实验矩阵</h3>
<p>以 8 GPU 为例：</p>
<table>
	<thead>
			<tr>
					<th>方案</th>
					<th>TP</th>
					<th>PP</th>
					<th>DP</th>
					<th>适用目标</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>A</td>
					<td>8</td>
					<td>1</td>
					<td>1</td>
					<td>最低延迟</td>
			</tr>
			<tr>
					<td>B</td>
					<td>4</td>
					<td>2</td>
					<td>1</td>
					<td>显存均衡</td>
			</tr>
			<tr>
					<td>C</td>
					<td>2</td>
					<td>2</td>
					<td>2</td>
					<td>吞吐优先</td>
			</tr>
			<tr>
					<td>D</td>
					<td>1</td>
					<td>1</td>
					<td>8</td>
					<td>最大并发</td>
			</tr>
	</tbody>
</table>
<p>通过固定输入长度与请求并发，对比上述方案即可得到清晰结论。</p>
<h3 id="实际经验结论常见规律">实际经验结论（常见规律）</h3>
<ul>
<li><strong>TP 越大，TTFT 越低，但通信越重</strong></li>
<li><strong>PP 提升显存利用率，但对小 batch 极不友好</strong></li>
<li><strong>DP 是吞吐的唯一线性放大手段</strong></li>
<li><strong>MoE 的 EP 在低并发下可能反而变慢</strong></li>
</ul>
<h2 id="总结">总结</h2>
<p>并行策略没有<strong>最优解</strong>，只有<strong>最适解</strong>，TP / DP / PP / EP 并不是竞争关系，而是：</p>

<blockquote>
  <p><strong>在模型规模、请求模式、硬件拓扑三者约束下的工程权衡。</strong></p>

</blockquote>
<p>vLLM 提供了一个极其适合做<strong>并行策略验证与对比实验</strong>的平台。真正有价值的工作不是“支持了什么并行”，而是：</p>
<ul>
<li>在你的模型</li>
<li>在你的硬件</li>
<li>在你的真实请求负载下</li>
</ul>
<p><strong>验证哪种组合，才是最优解。</strong></p>
]]></content:encoded></item></channel></rss>