动态分块流水线并行#

备注

设计细节和数学模型请参见设计文档。部署教程请参见动态分块流水线并行教程

概述#

动态分块流水线并行(CPP)是一种基于性能分析的动态分块策略,用于优化流水线并行(PP)场景中长序列的预填充性能。

使用场景#

  • 变长序列服务:PP对短序列不会引入性能退化,并通过长序列的动态分块获得收益。

  • 超长序列推理:对于超出单机内存容量的序列(如1M tokens),动态分块可显著减少流水线空闲时间。

支持场景#

目前CPP主要专注于预填充阶段的优化,建议在PD分离场景中使用。支持的功能如下:

Eager

Graph

前缀
缓存

分块
预填充

CPP

启用方法#

在线服务#

vllm serve <model_path> \
    --pipeline-parallel-size 2 \
    --enable-chunked-prefill \
    --additional-config '{"profiling_chunk_config": {"enabled": true}}'

离线推理#

from vllm import LLM

llm = LLM(
    model="<model_path>",
    pipeline_parallel_size=2,
    additional_config={"profiling_chunk_config": {"enabled": True}},
)

配置参数#

参数

类型

默认值

描述

enabled

bool

False

启用/禁用动态分块流水线并行

smooth_factor

float

1.0

平滑因子(0 < x ≤ 1.0),值越大越信任动态预测

min_chunk

int

4096

动态计算的最小分块大小

need_timing

bool

True

启用/禁用在线校准

参数调优#

  • smooth_factor:控制对动态预测的信任程度

    • 1.0:严格遵循模型预测

    • 0.6~0.85:平衡动态调整与调度开销

    • 0.0:无动态调整(退化为固定分块)

  • min_chunk:通常无需调整,应小于max-num-batched-tokens

性能#

详情请参见使用AISBench进行性能评估

为评估动态分块流水线并行在长序列LLM推理场景中的效果,我们使用DeepSeek-V3.1-W8A8Qwen3-235B,在Ascend Atlas A3推理产品*64G(A3)上部署P实例,配置和性能数据如下。

固定长度请求,并发数=1

  • DeepSeek-V3.1-W8A8:

    配置

    CPP
    (动态分块,
    分块大小=32k)

    PP
    (静态分块,
    分块大小=32k)

    输入长度 128k

    TTFT:22.5s

    TTFT:27.0s

  • Qwen3-235B:

    配置

    CPP
    (动态分块,
    分块大小=32k)

    PP
    (静态分块,
    分块大小=32k)

    输入长度 256k

    TTFT:53.5s

    TTFT:61.4s

变长请求,并发数=4

  • DeepSeek-V3.1-W8A8:

    配置

    4k~64k输入,均值=32k,标准差=32k
    前缀命中率=99%

    CPP2TP8

    输入吞吐量:22424 tps/卡

    DP2TP8

    输入吞吐量:16150 tps/卡

    PCP2TP8

    输入吞吐量:18197 tps/卡

    TP16

    输入吞吐量:18875 tps/卡

约束条件#

  • 需要流水线并行--pipeline-parallel-size > 1

  • 需要分块预填充--enable-chunked-prefill

  • 与均衡调度不兼容:无法启用VLLM_ASCEND_BALANCE_SCHEDULING

  • 启动开销:性能分析增加约64次前向传播(数十秒)