ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ATC‘26五篇论文:大模型系统研究的四个风向

ATC‘26五篇论文:大模型系统研究的四个风向

1. 从ATC'26的五篇录取看系统研究的四个风向

先说结论:IPADS这次在ATC'26上拿了五篇论文,分布在长上下文训练、智能体执行、安全推理和软件质量保障四个方向,这个配比本身就很有意思。ATC(USENIX Annual Technical Conference)在系统领域一直以“硬核工程”著称,不欢迎只有调参优化的表面工作,也不喜欢纯idea但落不了地的空想。五篇录取放在一起,透露出的信号是:系统研究正在跟大模型应用做深度绑定,而且不是简单“给模型加个外围”,是在底层并行机制、运行时调度、安全边界治理这些根子上动刀。

我平时接触这类工作比较多,拿到这个消息第一反应是:这四个主题恰好对应了从训练到部署再到维护的完整链路。长上下文训练解决的是“模型能不能练得动、练得长”,智能体执行解决的是“模型用起来能不能跑得稳”,安全推理解决的是“模型在不可信环境里敢不敢用”,软件质量保障解决的是“系统迭代过程中怎么不翻车”。它们不是零散的热点,而是大模型基础设施走向成熟时必须补上的短板。

这篇文章不替IPADS做具体的论文解读,我没那个内部信息;但基于对这些方向长期跟踪和踩坑经验,我会把每一个技术点背后的核心矛盾、常规解法、公认难点以及值得借鉴的工程思路拆开讲清楚。对正在做相关方向的同学,尤其是搞系统、搞AI Infra、搞大模型应用开发的人,应该比单纯看录取列表更有嚼头。

2. 长上下文训练:显存墙、通信墙与序列维度上的并行革命

2.1 为什么长上下文不是“把batch调大”那么简单

现在各家模型都在卷上下文窗口,从128K到1M甚至更长,但真正卡住的不只是注意力计算的复杂度,更多是训练和推理时的显存和带宽。Transformer处理序列时,KV Cache的大小随序列长度线性增长,但激活和中间结果在某些计算模式下会随平方关系膨胀。我以前跟人解释这个问题时常用一个比方:短序列训练像在桌面上摆棋子,桌子够大就行;长序列训练等于把棋子排成几万米的长队,你不仅要找地方放,还要保证每个棋子能被按顺序处理,中间不能断档。

如果只是把输入长度加长,再按老的并行策略切分,最直接的问题就是显存溢出。这是一个纯资源墙的问题,解决思路无非两条:要么让单卡能装下更多(算子级优化、显存复用),要么把活分给更多卡(并行策略调整)。但长序列场景下,通信代价和计算代价的比值会发生剧变,导致传统的张量并行、流水线并行、数据并行组合不再最优。

从系统研究的角度,长上下文训练的核心痛点可以拆成三个层面:

  • 显存层面:序列维度过长时,切分序列的Sequence Parallelism以及Activation Checkpointing等策略成为必需品,但怎么切、在哪切、切完怎么合并,每步都影响吞吐。
  • 通信层面:All-to-All通信在稀疏注意力、MoE这类结构里非常频繁,长序列下通信量和频率同步上升,网络拓扑一旦不支持,计算只能空转。
  • 数值与调度层面:动态长度下负载不均衡严重,一个mini-batch里不同样本的sequence长度可能差异巨大,静态切分必然浪费算力。

2.2 主流方案的“最优解只是局部解”

业界目前处理长上下文训练的常用手段,我梳理下来基本是这几种:

方案核心思想典型成本适用场景
Sparse Attention + 局部窗口降低计算量需要额外mask管理,评估语义损失文本、长代码
Sequence Parallelism把序列维度切到多卡需要配套通信原语,不能直接套DeepSpeed大规模稠密模型
Ring Attention / Zigzag块循环计算注意力,减少峰值显存通信开销不低,调度复杂超长序列(≥1M)
重计算与Offload以算换显存训练时间变长单卡/小规模集群

这里说句实话:单个方案往往只能解决单点瓶颈。比如Activation Checkpointing能把激活量降下来,但代价是约30%-50%的额外重算开销;Ring Attention能把峰值显存压到很低,但跨设备通信如果没和计算重叠好,整体吞吐反而更差。真正的系统优化是在这几个方案之间做“组合拳”,先用profiler定位瓶颈在哪张卡、哪类算子、哪段通信,再针对性调整。

2.3 从这届论文标题中可以读出的“系统动作”

这类长上下文作品通常会在三个点上做文章:第一,改造注意力计算流程,使其适配新型并行范式;第二,设计更优的内存调度模块,把KV Cache和中间结果的存储位置动态编排;第三,降低长序列带来的通信同步开销,甚至让通信在计算过程中间“无缝渗入”。

具体工程上,我曾经做过的优化流程类似这样:

  1. 先建一个长序列的benchmark,包含1K、32K、256K、1M几档长度,不用真实模型,用一个类似架构的dummy model测每层算子和通信耗时。
  2. 用Nsight或Tracy抓kernel流水,区分出:load-bound是显存带宽问题,comp-bound是计算密度问题,sync-bound是通信等待问题。
  3. 根据瓶颈选策略:如果瓶颈在通信,优先改Tensor Parallel的切分方式,让序列并行尽量在单机内部解决;如果瓶颈在激活显存,就引入选择性重计算,只对高体积低耗时的算子做重算。
  4. 动态长度场景下,用varlen API或自己排布bucket,让同一batch内长度方差尽量小。

我对长上下文训练最深的感受是:工程细节多于算法创新。有时候把re-materialization的schedule从“每层都做”改成“每两层做一次”,配合更聪明的all-gather时机,吞吐就能涨一截,而这些微小改进拼起来才是系统论文的核心贡献。

3. 智能体执行:从“模型会想”到“系统能落地”

3.1 智能体不是应用层玩具,而是新型计算范式

LLM Agent现在很火,但多数人关心的是prompt怎么写、工具怎么调,很少有人认真把它当成一个“执行体”来设计。一个Agent生命周期里会发生大量计算密集、I/O密集、状态敏感的操作:多轮推理、函数调用、环境交互、权限切换、资源申请与释放。如果只靠外部业务代码去编排,一旦并发上来,问题就全面暴露。

举一个很常见的例子:一个Agent在一个任务里需要调用外部搜索、操作内部数据库、写代码执行并读结果。每一步之间都有依赖,而每一步的耗时又是高度不确定的,可能100ms也可能10s。这种“长尾延迟”和“动态依赖”用传统微服务架构去编排会很别扭:你不可能为每个Agent任务开一个线程池,也不可能预知需要多少内存。

所以从系统角度,智能体执行要解决的核心矛盾就是:不确定的计算流如何在有限的物理资源上高效、稳定地调度。这就像操作系统的进程调度,只不过这里的“进程”是Agent的一次run,它随时会fork、会等待、会退出。

3.2 执行引擎的三大关键能力

考察现在做得比较好的Agent Runtime或Agent Execution Engine,往往具备三样能力:

  • 有状态调度:每个Agent Step之间保留上下文状态,可暂停、可恢复、可迁移。这背后需要一个独立的State Store,而不是把状态留在Python进程里。
  • 安全工具边界:Agent要调外部工具,但这个权限来自哪里?怎么审计?传统应用里“权限”是静态的,Agent场景里工具选择可能是模型在推理时动态决定的,所以需要通过沙箱、策略引擎、动态预检去做边界控制。
  • 可观测与可追溯:一旦Agent行为异常,要能回放每步推理、每次调用,并把它跟资源消耗联动分析。没有可观测性,Agent系统出了问题只能瞎猜。

3.3 调度策略与资源感知:怎么避免“一脚油门一脚刹车”

我之前实现过一个轻量Agent执行框架,刚开始做得像爬虫一样简单:每个任务一个goroutine,任务里顺序跑模型、跑工具。结果并发一高就出问题——有的Agent因为等一个慢工具调用,白白占用模型worker;有的Agent疯狂重试,把工具的限流打爆。后来改成事件驱动型调度,把Agent的每次“推理-执行-观察”当作一个事件周期,用带优先级的状态机去管理,实测比原来的并发模型吞吐提升了快两倍,而且尾巴延迟明显收敛。

这个过程中最大的教训就是:不要让Agent自己决定资源消耗。模型输出是概率性的,它可能一次推理就完事,也可能陷入循环。系统必须在外部用硬性约束去保护:为每个Agent设置最大步数、最大token消耗、单步超时,工具调用的并发数要由全局信号量来控制,而不是由prompt去祈祷。

现在我们再看IPADS在智能体执行方向上的录取,大概能想到他们会在这个抽象层做文章。典型切入点包括:为Agent动态配置隔离环境、把Agent状态持久化并实现跨节点迁移、开发专用的调度器以匹配模型推理与工具I/O的混合负载。这些方向不是想象中“写个Agent框架”这么简单,而是要跟底层内核、虚拟化、容器技术结合。

4. 安全推理:大模型部署中“不敢提但必须解决”的硬骨头

4.1 安全推理的两种味道:隐私保护与内容安全

安全推理这个词在不同语境下的含义能差出十万八千里。在IPADS这类系统所的环境里谈安全推理,大概率偏向下面两类:一是机密推理,即模型权重和用户输入都要在可信环境里跑,防止推理时泄露模型参数、用户prompt;二是输入输出边界控制,即推理链路里需要嵌入安全过滤器、防注入、防数据外带机制。

当前大模型推理服务的部署形态通常是:模型owner把权重放到GPU服务器上,用户通过网络API调用。那么问题来了,这个拥有GPU的服务器运营商能不能看到模型?如果用户传了敏感数据,运营商能不能偷走?更进一步,当多个租户共享一台GPU时,模型和用户数据如何互相隔离?

传统TEE(可信执行环境)主要面向CPU,而大模型推理的主要算力在GPU。Intel TDX和AMD SEV-SNP都支持从CPU向GPU扩展可信边界,但性能损耗和兼容性问题仍然突出。NVIDIA最近在推的Confidential Computing for GPUs(即H100/H200的机密计算模式),本质上是把GPU显存也纳入加密保护范围,但代价是有额外的加解密开销和显存占用。

4.2 系统研究如何把“安全”和“推理性能”做大做小

纯粹把整个推理过程放入TEE里,性能损失可能是数倍,这在生产环境根本没法用。所以安全推理的系统优化就变成了一个“以最小代价覆盖最大攻击面”的透镜问题。

实际实现上,有几个常规打法:

  • 混部模式:只在模型加载、权重解密、密钥交换等关键环节使用TEE,大部分矩阵运算仍然走原生GPU路径,只是将中间结果进行加密或扰动,保证即使物理设备被攻破也无法恢复完整模型。
  • 分层推理协议:部分注意力层在TEE内计算,线性层在普通环境用同态加密或秘密共享,虽然通信开销增大,但能提高性能。
  • 可验证推理:不隐藏模型,而是让推理节点附加一个证明(如zkML或基于承诺的方案),让用户能验证返回结果的正确性,而不泄露中间信息。

对IPADS来说,他们的优势在于对操作系统内核、虚拟化、设备驱动层面的深刻理解。安全推理如果只停留在算法层,会非常单薄,真正硬核的是如何在内核模块里安全地管理GPU上下文、如何在不被恶意驱动干扰的情况下处理DMA、如何在多租户场景下做密钥调度。

4.3 部署安全推理时的几个实战问题

我自己在一款推理服务里尝试过给用户prompt加密、然后通过安全通道传给GPU再做推理,当时遇到几个坑:

  1. 密钥管理与模型加载解耦:如果密钥只在CPU侧,GPU没法直接解密模型权重,需要在加载阶段用安全API把权重从密文还原到显存,这个阶段如果做不好,模型直接就裸奔了。
  2. 防止侧信道:GPU的DMA可以访问系统内存,如果不做I/O隔离,攻击者可以通过DMA读走其他进程的数据。必须配置IOMMU或使用可信覆盖页表。
  3. 性能和安全的平衡:一次解密全模型可能就要几秒钟,这在低延迟场景不可接受,可以考虑按层流式解密,用流水线掩盖解密时延。

安全推理的最终目标是让用户“敢用一个不可信的GPU”,而系统论文的价值正是把这种大胆的想法变成可部署的代码。

5. 软件质量保障:在AI时代重构测试与验证

5.1 为什么传统测试在大模型系统上失效了

软件质量保障原本是相对成熟的话题,但大模型系统出现后,一系列“传统经验失效”的现象值得每个从业者警醒。过去我们测一个函数、一个API,输入是确定的,输出是确定的,写断言很容易;现在拿大模型做模块,输入是自然语言,输出是采样出来的,同一个prompt两次调用结果都可能不同,你怎么写断言?

再往下,大模型系统通常不是单一模型,而是由多个模型组件+传统代码+外部工具协作组成,中间还涉及不可复现的调度顺序。测试时本地能过,一到线上就崩,大概率是数据漂移或环境副作用带来的,而不是代码逻辑错误。

IPADS这五篇里出现软件质量保障方向,说明系统社区已经意识到:大模型应用不能靠“调一调prompt就是好”这种玄学态度,必须用系统的测试、验证、运行时代码分析手段来保障可靠性。

5.2 四类行之有效的质量保障手段

我根据自己在大模型应用开发中的试错经验,把有效的质量保障手段排了个序:

排序手段解决的问题要注意的坑
1数据漂移检测线上输入分布变化导致效果下降需要建立基准集,定期回放
2回归测试套件多次重构后原有能力被破坏Agent场景下要测完整轨迹而不是单点输出
3混沌工程外部工具超时、挂掉、乱序返回故障注入不能干扰线上正流量
4形式化验证/模型检查死锁、资源竞争、状态非法建模成本高,需要抽核心组件做

对于Agent执行系统,质量保障的重点应当放在状态一致性检查和故障恢复验证上。比如Agent在step N写入了一个临时文件,step N+1却忘了清理;或者Agent在等待工具响应时,进程被重启,状态丢了。这种问题普通的单元测试完全发现不了,需要做故障注入和状态快照对比。

5.3 高效率覆盖率分析与模糊测试的再应用

传统软件测试里的覆盖率分析和模糊测试,在大模型系统里也没有消失,而是换了一种形态。

  • 代码侧覆盖率照常分析,但新增模型侧“prompt空间覆盖率”的概念。对同一个API,要覆盖不同语气、不同隐私级别、不同语义复杂度的请求,否则某些分支可能永远执行不到。
  • 模糊测试可以用来生成极端输入,让Agent的意图解析模块崩溃或兜底逻辑被跳过。可以直接用模型本身生成对抗样本,也可以像传统fuzzing那样通过变异种子来试。
  • 在大模型应用链路中加“结构化日志断言”,比单纯看模型输出靠谱得多。比如记录每一步的input token数、延迟、工具返回码、重试次数,一旦超出阈值立即告警。

这类系统论文的贡献点不在于提出新的理论,而在于把测试与验证跟大模型runtime深度融合,做到低成本自动化和可量化评估。

6. 几条共通的工程经验与个人心得

把四个方向都过了一遍之后,我想说几句在系统领域折腾这些年最有体感的经验。

第一条:系统调优就是做权衡,不要追求面上最优。长上下文训练里,频繁使用重计算和稀疏化会让显存好看,但吞吐可能下降;安全推理里全链路加密产线肯定过不了性能测试。每个声称“无损”的方案都要在心里画个问号,自己benchmark才是真理。

第二条:给不确定性留出边界。大模型系统的非确定性是本质属性,系统设计时不能假设“模型一定会按预期输出”。要为超时、重试、幂等、降级都做好机制,像设计分布式系统一样设计Agent执行链路。

第三条:可观测性不是事后补,而是第一设计原则。无论长上下文训练还是智能体执行,没有精细的profiling,你连性能瓶颈在哪都不知道;没有完整trace,出了问题只能靠猜。开发展板一开始就要埋好metrics、logs、traces三个面。

第四条:系统研究要选真实的硬问题。IPADS这五篇为什么能中ATC?因为选题都踩真实痛点:长上下文训练跑不动是行业共识,智能体执行不可控是业务方天天骂,安全推理不敢用是甲方最头疼,软件质量没法测是研发流程里的黑洞。系统研究如果只做“新鲜概念”而不指向真实场景,最后只能停留在demo阶段。

每次看到这类论文列表,我都会拿来对照自己手头的项目问一句:这里面解决的技术难题我是不是也遇到过?我的解决姿势是不是够系统化?如果还只是在打补丁,那就说明距离高质量的工程研究还有距离。论文列表不会直接告诉你怎么做,但它像一面镜子,提醒你行业最聪明的一批人正在哪些石头上磨刀。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进