π0.5 和 SD3 的 MM-DiT 常被一句话打发:「都是 joint attention」。这话不错,但混了两件事:joint attention 描述算子形状——几套 QKV、一个共享 KV 池、一次 softmax;mask 描述权限——哪些 key 能被哪些 query 读。前者两边几乎逐行相同,后者一张是 3 段单向图,一张是 2 段全连通图。

joint attention 只管算子,mask 才管权限

一个 block 的接线:两条流各有自己的 norm、QKV、输出投影与 FFN,唯一的共享是一份拼起来的 KV 池和一次 softmax

openpi 的 gemma.py 逐专家算各自的 QKV,然后一行拼进同一个 KV 池:

1
q, k, v = (jnp.concatenate(y, axis=1) for y in zip(*qkvs, strict=True))

前提是头几何完全一致:π0.5 两个专家一个 2048 宽、一个 1024 宽,但都是 8 个 query 头、1 个 KV 头、head_dim 256——宽度不同不妨碍联合,头形状不同就联合不了。SD3 论文说得很直白:MM-DiT 的两套权重「等价于两个独立的 transformer,只把序列拼起来做注意力」。权重按流分开、norm 按流分开,共享的只有 softmax 的分母,剩下的自由度全在 mask。

π0.5:三段,两处看不到

可见性矩阵:左边 π0.5 分前缀、FAST、动作专家三段,块间因果;右边 MM-DiT 的文本与图像全双向

序列这样排:图像 patch + 指令 + 离散状态整数构成前缀;之后并排放两套动作表示——FAST 离散 token 和 50×32 的连续动作 chunk,同一份数据拿两份监督。权限表:

query ← key 权限 原因
前缀 ← 前缀 双向 patch 与指令没有先后
FAST ← 前缀、自己之前 因果 自回归监督,不能偷看后一位
专家 ← 前缀、专家 双向 chunk 并行去噪,同时成形
前缀 ← 动作 禁止 干净条件不能读带噪目标
专家 ← FAST 禁止 两种动作表示隔离

所以「π0.5 是 causal 的」要收窄:因果只在块边界和 FAST 块内部,50 步 chunk 内部全双向,和 MM-DiT 的图像 patch 一模一样。openpi 的实现也印证这是 prefix-LM 而不是 LLM 的 tril:make_attn_mask 一行 cumsum(m_a)_j ≤ cumsum(m_a)_i,「一块」可以是 1 个 token,也可以是 50 个 token。

MM-DiT:双向是免费的,因为它只有一种 target

图像 patch 是集合,没有顺序,互看不构成泄漏;文本只是条件——进了序列、有自己的权重、也能读图像,但模型从不预测下一个文本 token(文本侧连位置编码都不加)。双向于是白拿。

方向性真正的来源是多 target 共存。一旦一条序列里既要 AR 又要去噪——π0.5 的 FAST + flow,Cosmos 3 MoT 的 reasoner + generator——信息流就必须定向:generator 能读 reasoner,reasoner 读不到 generator。这和「前缀不看动作」是同一条原则:干净的条件可以被子孙读,子孙不能反过来改写条件。

对照与代价

π0.5 MM-DiT(SD3 8B / FLUX 前段)
序列 3×256 patch + 指令 + 状态 + FAST + 50×32 动作 4096 patch + 154 文本
mask 块间因果 + 块内双向,两处禁止 全双向
条件注入 adaRMS,逐层 adaLN modulation,逐层
目标 FAST 交叉熵 + flow matching rectified flow
采样 10 步 Euler,前缀 KV 只算一次 28 步,全序列每步重算

代价的差别也是 mask 给的:π0.5 先算一次前缀、存下 KV,之后 10 步只算 50 个 query,一条控制步约 1.2×10⁶ 对注意力;MM-DiT 的 4096 个 patch 每步换新 latent,KV 必须重算,28 步约 5×10⁸ 对——差 430 倍。这不是模型大小,是「待生成的东西只有 50 个 token」。

两个方向都不能翻转:给 patch 编光栅序、只许看前面,等于把二维协调压成一维链,得用层数补;让 π0.5 全双向,FAST 会读到 flow 分支的答案,自回归那一半的损失立刻失效。

看到一个新的 VLA,先问它有几个 target,再看 ar_mask 怎么切块——mask 图长什么样、KV 能不能缓存、实时性上限在哪,基本都能推出来。这比记「谁用了 joint attention」有用。


参考链接

  1. π0.5: a Vision-Language-Action Model with Open-World Generalization:https://arxiv.org/abs/2504.16054
  2. openpi(models/pi0.py、gemma.py、pi0_config.py、tokenizer.py):https://github.com/Physical-Intelligence/openpi
  3. Scaling Rectified Flow Transformers for High-Resolution Image Synthesis(SD3 / MM-DiT):https://arxiv.org/abs/2403.03206
  4. Mixture-of-Transformers: A Sparse and Scalable Architecture for Multi-Modal Foundation Models:https://arxiv.org/abs/2411.04996
  5. π0: A Vision-Language-Action Flow Model for General Robot Control:https://arxiv.org/abs/2410.24164