77 lines
2.7 KiB
Markdown
77 lines
2.7 KiB
Markdown
---
|
||
title: "Thinker-Performer Pipeline"
|
||
created: 2026-06-25
|
||
updated: 2026-06-25
|
||
type: concept
|
||
tags: [inference, streaming, pipeline, kv-cache, flow-matching]
|
||
sources:
|
||
- "[[wan-streamer]]"
|
||
---
|
||
|
||
# Thinker-Performer Pipeline
|
||
|
||
**Thinker-Performer Pipeline** 是 Wan-Streamer 的推理部署架构,将统一的端到端模型拆分为两个协作进程,通过 [[kv-cache|KV-cache]] 交换维持统一因果状态,实现感知和生成的流水线重叠。
|
||
|
||
## 架构
|
||
|
||
```
|
||
Thinker (GPU 0) Performer (GPU 1)
|
||
───────────────── ─────────────────
|
||
编码用户观测 uk 接收 KV slice
|
||
更新 KV cache 全历史 flow-matching 求解
|
||
解码前帧响应 y_{k-1} → 发射 生成 clean latents yk
|
||
发送当前 KV slice → ← 返回 clean latents
|
||
```
|
||
|
||
## 两个角色的职责
|
||
|
||
### Thinker(思考者)
|
||
- 消费当前流式单元的**用户音视频观测**(文本、语音、视频帧)
|
||
- 运行因果编码器进行编码
|
||
- 运行 Transformer 的短 token-causal pass(语言预测 + 状态更新)
|
||
- 生成新 KV-cache slice(当前交互状态)
|
||
- 解码 Performer 返回的前一帧潜变量为可发射的音频/视频输出
|
||
- **不运行**昂贵的 flow-matching solver
|
||
|
||
### Performer(执行者)
|
||
- 接收 Thinker 发送的 KV-cache slice
|
||
- 将 KV slice 追加到自己的全历史缓存中
|
||
- **只运行** flow-matching solver 生成下一帧的音视频潜变量
|
||
- 将 clean latents 保持在 Performer 侧
|
||
- 在下一个流式步返回给 Thinker
|
||
- **不运行**解码器或编码器
|
||
|
||
## 流水线重叠
|
||
|
||
关键洞察:相邻流式单元之间的工作可以重叠:
|
||
|
||
| 时间片 | Thinker | Performer |
|
||
|--------|---------|-----------|
|
||
| 时刻 k 前半 | 编码 u_k,更新 KV_k | — |
|
||
| 时刻 k 中 | 解码 y_{k-1},发射 | — |
|
||
| 时刻 k 后 | 发送 KV slice → | ← 接收 KV slice,求解 y_k |
|
||
| 时刻 k+1 前 | 编码 u_{k+1} | 求解 y_k(继续) |
|
||
| 时刻 k+1 中 | 更新 KV_{k+1} | ← 返回 y_k |
|
||
|
||
这样,感知/状态更新、前帧解码、KV/潜变量通信、下一帧去噪在连续流式单元间重叠执行。
|
||
|
||
## 实时性条件
|
||
|
||
系统能实时运行的条件是:
|
||
> Performer wall time + KV-cache/latent 通信开销 < 160ms(一个流式单元)
|
||
|
||
这**不同于**模型侧响应延迟(从接收用户输入到发射对应响应的时间,约 200ms)。
|
||
|
||
## 关键优化
|
||
|
||
- CUDA graph capture 减少 kernel launch 开销
|
||
- 编译优化
|
||
- 优化的 KV-cache 交换格式
|
||
|
||
## 参考
|
||
|
||
- [[wan-streamer]]
|
||
- [[kv-cache]]
|
||
- [[flow-matching]]
|
||
- [[streaming-inference]]
|