精读笔记
Problem Setting
《WarpMPC: Large-Batch MPC on GPU via ADMM with Unrolled LDL^T Factorization》(arXiv preprint / 2026)处理的不是传统意义上“更快求一个 MPC”的问题,而是机器学习管线里一次性求 10k 到 100k+ 个同结构 MPC/SQP iteration 的吞吐问题。这里真正困难的是稀疏结构和 GPU 执行模型之间的错配:MPC KKT 系统极稀疏、块带状、stage-local,但通用 sparse solver 在 GPU 上会产生大量分支、变长循环和非合并访存;而为 GPU 友好的 CG/PCG 又把问题转成迭代线性求解,容易在硬约束精度、迭代数和闭环稳定性之间做交换。以前方法卡在两个端点:CPU direct sparse solve 稳但无法大批量吞吐;GPU iterative / iLQR 快但对 general hard inequality constraints 和 sensitivity 支持不足。关键矛盾是:大批量 MPC 的 symbolic structure 完全共享,但现有 solver 往往仍按每个 instance 独立解释稀疏图。
Motivation
作者真正抓住的缺口是 fixed structure batch optimization 没有被充分利用。学习场景需要大量 MPC rollouts、policy distillation 或 differentiable MPC,而这些任务通常不是单个 online solve 的 latency bottleneck,而是大规模数据生成和梯度计算的 throughput bottleneck。已有 GPU MPC 要么牺牲硬约束,把约束放进 penalty/barrier;要么用 PCG 规避 sparse direct solve,但精度和约束违反会进入闭环表现;要么依赖 cuDSS 等通用 sparse routine,在大 batch 时仍受通用接口和内存布局限制。作者的核心观察是:同一 MPC formulation 下,P、A、KKT 的非零位置不变,变化的只是数值。因此 sparse factorization 中大量控制流其实可以离线静态化。这是论文出发点。
Core Idea
核心思想可以概括为:把 MPC-QP 的 sparse direct solve 从通用数值线性代数问题,改写成固定稀疏模式上的批量数值程序。离线阶段做完 reordering、symbolic factorization、column reach set、scatter/backsolve schedule;在线阶段只对大 batch 的数值执行同一套展开后的 LDL^T arithmetic。这样 GPU 不再需要处理稀疏算法的动态性,而是对同一 symbolic operation 在 batch 维度上做高吞吐执行。
这和 prior 的本质区别不是“用了 ADMM”或“用了 LDL^T”,这些都是老东西;区别在于 execution model。PCG/iLQR 路线为了 GPU 并行性改变求解近似或约束处理方式,WarpMPC 则保留 OSQP-like ADMM + sparse direct factorization 的数值结构,通过编译期 specialization 把它变成 GPU-friendly。它引入的 inductive bias 是固定 MPC 时间结构、固定 constraint sparsity、固定 KKT graph;它 scalable 的前提也正是这个 bias。
Method
方法层面最重要的是三件事。
第一,ADMM 被用作把 QP solve 组织成“一次 factorization + 多次 backsolve”的外壳。它解决的是 SQP 子问题中需要重复求解但 KKT 矩阵在 ADMM iteration 内不变的问题。相比 interior-point,它减少了重因子化频率;相比 PCG,它给硬约束和固定精度提供更直接的线性求解路径。
第二,unrolled sparse LDL^T 是核心机制。传统 sparse LDL^T 在数值阶段仍包含 elimination tree walk、索引查找、插入指针、变长 column loop 等 GPU 不友好的工作;这里把这些全部基于固定 sparsity pattern 预计算并展开。核心变化是 online solver 不再“发现”稀疏结构,而是直接执行已知稀疏结构上的算术。
第三,GPU 吞吐优化围绕内存和并行依赖展开。symbolic-major layout 让同一 symbolic instruction 在 batch 维度连续访存;segmented padding 避免所有 column 按全局最大 work length 填充导致大量无效算术;dependency-level backsolve 把 triangular solve 中可并行的列按依赖层调度。它们解决的不是数学问题,而是把 fixed-pattern direct method 的瓶颈从 irregular memory/control flow 转成 GPU 可吞吐的 regular batched arithmetic。
Key Insight / Why It Works
最关键的 insight 是:在 large-batch MPC 中,稀疏直接法的“稀疏不规则性”大部分是 symbolic,不是 numerical。只要 batch 内结构固定,这些不规则性可以提前消除;GPU 真正执行时只需要对不同 batch element 重复相同数值指令。这相当于把 sparse solver 从 runtime interpreter 变成 ahead-of-time compiled kernel。
最可能的核心贡献是 fixed-pattern unrolled LDL^T 加 memory layout,而不是 ADMM 本身,也不是 SQP 本身。ADMM 只是提供了一个适合复用 factorization 的问题分解;line search、CasADi-to-JAX、sensitivity 是增强工具链完整性的工程层。segmentation 和 dependency-level scheduling 是重要优化,但属于让核心想法跑满 GPU 的 engineering;其中 dependency-level solve 的收益还明确依赖 GPU 是否未饱和,大 batch 下边际收益下降。
这篇的收益本质上主要来自 memory reuse、symbolic reuse、batch scaling 和 test-time compute reorganization,而不是新的 control theory 或 optimization convergence insight。它没有改变 MPC 的建模能力,也没有让 QP 更容易;它改变的是同一结构下大量 QP 的执行方式。所谓 generality 也要限定在“general constraints under fixed sparsity pattern”,不是任意优化问题的 generality。
我会把这篇看成一个很强的 systems/numerical optimization paper:它的价值在于证明 sparse direct MPC 在 GPU 上并非天然不可行,只要放弃通用 sparse solver 的动态抽象层。这个判断比单纯的速度数字更重要。
Relation To Prior Work
它最接近 OSQP-style ADMM、GPU MPCGPU/DiffMPC/TurboMPC、MPAX、MPX/iLQR 以及 CusADi/JAX-based differentiable control 工具链。和 OSQP 的关系是继承求解框架,但放弃通用 CPU sparse solver 执行模型;和 PCG-based GPU MPC 的差异是不用迭代线性求解换并行性,而是把 direct solve 静态展开;和 iLQR/MPX 的差异是保留 general hard inequality constraints,而不是依赖 penalty/barrier 调参;和 TurboMPC/cuDSS 的差异是从通用 sparse library 转向问题专用 unrolled kernels。
看似新的部分里,ADMM、SQP、LDL^T、filter line search、implicit differentiation 都不是新思想;真正新增的信息是:对固定 MPC sparsity 的 symbolic factorization 程序化展开,以及围绕 batch-major/symbolic-major layout、segmented padding、dependency-level solve 的 GPU 执行组织。它属于“domain-specialized compiler for numerical optimization”的谱系,而不只是一个 MPC solver。
Dataset / Evaluation
评估覆盖了 linear MPC、cartpole、quadrotor、humanoid whole-body MPC,以及一个 Crazyflie policy distillation 真机例子。任务覆盖从低维长 horizon 到高维复杂 dynamics,足以支撑“固定结构大批量 constrained nonlinear MPC throughput”这个核心 claim。尤其 humanoid 和硬约束对比能说明该方法不是只在 toy QP 上有效。
但 evaluation 的边界也很清楚:所有主实验都围绕同结构批量问题,正好匹配方法假设;这验证了 specialization 的强项,但没有检验结构变化、多 contact mode 模板切换、在线小 batch latency 或跨 formulation 泛化。Crazyflie 实验主要证明它能快速生成 imitation 数据并训练小网络,不证明 learned controller 的泛化来自 MPC reasoning;核心能力可能主要来自数据覆盖和任务相对受限。benchmark 没有明显 leakage 问题,但评估设计天然偏向 large-batch throughput claim,这一点合理但应明确。
Limitation
最大限制是 fixed-pattern 假设。只要 KKT sparsity pattern 变化,离线 symbolic work、unrolled kernels、segment schedule 都需要重建或切换模板。很多 robotics MPC,特别是 contact-rich locomotion、hybrid modes、changing obstacle sets、adaptive constraint activation,表面上可以 padding 成固定结构,但这会增加无效计算并侵蚀优势。
第二个限制是它把一部分复杂度转移到编译和代码生成。文中展示了编译可缓存,但对于频繁变模型、调 horizon、调 constraint set 的研究工作流,JIT/code size/segment budget 可能成为实际摩擦。文中未充分说明 generated code size、不同 GPU 架构、JAX/XLA/Warp 版本变动对稳定性的影响。
第三,数值鲁棒性还不完整。作者自己提到 Hessian regularization 等 CPU MPC 常见功能仍缺失;single precision 大批量吞吐很好,但对 hard constraints、ill-conditioned QP、degenerate active set、敏感度质量的系统分析不够。sensitivity 的加速来自同样的 unrolled factorization 复用,但梯度是否足够可靠用于复杂 end-to-end learning,文中证据有限。
第四,增益归因有一部分可能主要来自 scaling / data layout。与 cuDSS、MPAX、PCG 的差距在大 batch 下显著,但这并不意味着算法在单个 solve 上更优;它说明通用 solver abstraction 在该 workload 下付出了太多 overhead。
Takeaway
- 第一,large-batch MPC 的关键不是再发明一个 QP algorithm,而是把固定稀疏结构暴露给 compiler/runtime;未来高性能优化器很可能越来越像 domain-specific compiled solvers。
- 第二,GPU 上 sparse direct method 不是不可行,问题在于通用 sparse linear algebra 的执行模型不适合固定结构大批量 workload。
- 对控制、SLAM、bundle adjustment、contact planning 等固定图结构问题,这个 insight 可迁移。
- 第三,硬约束和可微分性在 GPU MPC 中不一定要通过 iLQR/penalty/CG 妥协;如果结构固定,direct ADMM 路线可以同时保留 constraint handling 和 throughput。
一句话总结
WarpMPC 的位置不是新的 MPC 理论,而是把固定结构 constrained MPC 的 sparse direct ADMM 求解编译成大批量 GPU 程序,代表了从通用求解器走向 problem-specialized numerical compiler 的方法演化。
