Cursor团队:大规模强化学习中的隐藏Bug
AI Coding

Cursor团队:大规模强化学习中的隐藏Bug

U
Unknown Guest (Cursor)
2026年6月2日YouTube - Sequoia Capital
返回首页

金句精选

When we ship back generations of the model to the trainer, we have to rerun that forward pass because we are doing asynchronous training.

Even with the same model version you get slightly or sometimes very different log probability values for the same tokens. So this is often called numerical mismatch for inference.

Hopefully next composer versions are going to be our own model instead of basing it off an open source base.

估值狂飙的Cursor,为何被一个“幽灵Bug”死死卡住?揭秘大模型强化学习的致命死穴

你以为Cursor这种神级AI编程工具,底层运转完美无缺?错。在光鲜亮丽的百亿估值和丝滑的“Cmd+K”体验背后,它的顶尖开发团队每天都在和一个“幽灵”搏斗。这不是普通的语法错误,而是一个藏在所有大规模强化学习(RL)训练中的致命Bug——“数值不匹配”。今天,我们就扒开Cursor的底层逻辑,看看这个让顶尖AI工程师头疼到准备“彻底抛弃开源大模型”的终极难题,到底是什么。

一、 繁华背后的暗礁:Cursor与稀疏大模型的“爱恨情仇”

如果你是一个程序员,或者经常使用AI工具,你绝对绕不开Cursor

相比于在网页端缓慢敲字的ChatGPT,Cursor直接嵌入了你的代码编辑器。你只需要按下快捷键,唤醒Composer功能,它就能跨越多个文件,自动帮你重构代码、找Bug、甚至从零写出一个完整的项目。

Cursor为什么这么懂写代码?

答案是:强化学习(RL,Reinforcement Learning)

为了让AI不仅能“说话”,还能“说正确的话”,Cursor的团队在底层进行了极其庞大的RL训练。而在最近的访谈中,Cursor团队透露了一个核心信息:他们正在使用一种“超大规模的稀疏模型(Large Sparse Model)”。

什么是稀疏模型?你可以把它理解为MoE(混合专家模型)架构。 它就像一个拥有十万员工的超级大厂。当你要写一段Python代码时,只有“Python专家”部门被激活;当你要写C++时,只有“C++专家”部门被激活。这种设计让模型能在不增加计算延迟的情况下,拥有极高的参数量和知识储备。

但问题,恰恰就出在这个“庞大且稀疏”的架构上。

当Cursor试图用强化学习来训练这个庞然大物时,一个深藏在系统底层的“幽灵Bug”出现了。它不报错,不崩溃,却在悄无声息地毁掉模型的智商。

二、 训练场上的“时空错乱”:异步训练的代价

要理解这个Bug,你必须先搞懂大模型是怎么进化的。

在Cursor的强化学习流水线中,有两个核心动作:推理(Inference)训练(Training)

第一步:推理(做卷子)。 模型会进行一次“前向传播(Forward Pass)”。这就像是一个极其聪明的打字机,采用自回归(Auto-regressive)的方式,一个词一个词地往外蹦代码。在这个过程中,模型不仅输出了代码,还会为每一个生成的Token(词元)计算出一个对数概率(Log Probabilities)。 简单来说,这就是AI在生成代码时的“自信程度”。比如它写下“print”这个词时,它的内心OS是:“我有99.9%的把握,这里应该用print”。

第二步:训练(改卷子)。 Cursor的系统会把模型生成的这一大堆代码(Generations),打包送回给后端的训练器(Trainer)。训练器会根据代码的质量(比如是否能跑通、是否高效)给出奖励或惩罚,从而调整模型的参数。

关键的冲突来了:这整个过程,是异步(Asynchronous)的。

什么是异步? 为了追求极致的效率,Cursor不可能让生成代码的机器停下来,干等着训练器改完卷子再继续。 所以,前面生成代码的AI在疯狂“做卷子”,后面训练的AI在疯狂“改卷子”。

这就导致了一个极其尴尬的时空错位: 当训练器拿到一批代码准备进行评分时,生成这批代码的模型版本,已经落后于当前训练器里的模型版本了。

打个比方:学生(推理模型)在周一做完了卷子交上去,但老师(训练模型)到了周三才开始批改。而在这两天里,老师的评判标准(模型参数)已经发生了微调。

为了解决这个问题,训练器必须做一件事:重新跑一次前向传播。 它需要用当前的参数,把学生周一写的卷子重新看一遍,重新计算一次那些Token的“对数概率”。

理论上,只要模型版本一致,或者差距极小,这个重新计算出的概率,应该和当时生成时的概率一模一样,对吧?

错。这就是噩梦的开始。

三、 致命的“幽灵”:推理数值不匹配(Numerical Mismatch)

Cursor团队在实操中发现了一个令人毛骨悚然的现象:

哪怕是完全相同的模型版本,输入完全相同的Token,在重新计算前向传播时,得到的对数概率竟然会不一样!

有时候是极其微小的差别,有时候,差距大得离谱。 在AI工程界,这个现象被称为**“推理数值不匹配”(Numerical Mismatch for Inference)**。

你可能会问:这怎么可能?计算机不是最严谨的吗?1+1不永远等于2吗?

在普通的软件开发里,是的。但在大规模强化学习和稀疏模型的世界里,1+1真的可能等于2.0000001,下一次又变成了1.9999998。

为什么会产生这种“幽灵Bug”?主要有三大元凶:

  1. 浮点数计算的“蝴蝶效应”: 大模型的计算涉及到海量的矩阵乘法。在GPU(图形处理器)中,为了追求速度,通常使用混合精度(如FP16或BF16)。当你在不同的硬件节点上,或者以不同的批次大小(Batch Size)重新计算时,底层CUDA算子的执行顺序可能会发生微小改变。在浮点数的世界里,(A + B) + C 并不总是严格等于 A + (B + C)。这种微小的舍入误差,在经过几百层神经网络的放大后,就会导致最终输出的概率值发生偏移。

  2. 稀疏模型的“路由抖动”: 还记得前面说的MoE(混合专家)模型吗?在计算过程中,有一个“路由器(Router)”负责把任务分发给不同的专家。哪怕概率只有0.001的微小变化,都可能导致路由器在重新计算时,把原本该分给“专家A”的任务,错误地分给了“专家B”。这一错,整个后续的计算结果就全变了。

  3. 分布式系统的通信延迟: Cursor的训练规模极大,横跨成百上千张GPU。在异步通信中,张量(Tensor)在不同节点间传递,任何微小的同步差异,都会让这个“幽灵”显形。

这个Bug有多致命?

强化学习的本质,是基于概率变化来更新参数(比如PPO算法中的重要性采样比例)。如果你的基准概率(Log Probabilities)本身就在随机抖动,那你的奖励机制就彻底乱套了。 AI会变得极其困惑:“我明明写出了好代码,为什么你给我的奖励信号是错乱的?” 最终的结果就是:模型训练崩溃,或者智商停滞不前,Cursor的自动编程质量出现断崖式下跌。

四、 破局之战:Cursor的终极杀招——抛弃开源

面对这个藏在GPU算子深处、甚至可以说是硬件底层的“幽灵Bug”,Cursor团队是怎么做的?

在无数个熬夜调试、试图对齐数值的夜晚后,他们得出了一个极其硬核的结论:

“希望在下一个Composer(Cursor的核心多文件编程功能)版本中,我们将使用我们自己从头训练的基础模型,而不是再基于任何开源模型进行微调。”

这句话,信息量巨大,也极其震撼。

一直以来,很多AI应用层公司都是拿着开源模型(比如Meta的Llama系列,或者Mistral)作为底座(Base Model),然后在上面做微调。

但Cursor发现,走不通了。

当你把强化学习推向极致,当你需要榨干模型的最后一滴性能来生成完美代码时,开源模型的“黑盒”属性就成了最大的绊脚石。

你无法控制开源模型底层的算子实现逻辑,你无法为了彻底消除“数值不匹配”而去重构它的稀疏路由机制。只要你还在用别人的地基,你就永远无法彻底干掉这个“幽灵Bug”。

所以,估值暴涨后的Cursor,做出了最昂贵但也最正确的决定:自己造轮子。

通过构建属于自己的基础模型,Cursor团队可以从第一行代码、第一个CUDA算子开始,严格控制精度,彻底对齐推理和训练的数值。他们要把命运,死死捏在自己手里。

五、 结语:从“算法魔法”到“工程泥沼”

Cursor踩过的这个坑,揭示了当前AI行业一个残酷的真相:

大模型的竞争,早就已经不是白板上画画算法架构那么简单了。真正的壁垒,藏在极其肮脏、极其底层的“工程泥沼”里。

当你惊叹于Cursor按一下快捷键就能写出千行代码的“魔法”时,你看不见的是,有一群顶尖工程师,正在为了小数点后第6位的浮点数对齐,跟显卡的底层逻辑死磕。

“数值不匹配”只是冰山一角。在通往AGI(通用人工智能)的路上,还有无数个这样的幽灵Bug在潜伏。

但这也正是技术的迷人之处。正如Cursor团队所展现的魄力:

真正的颠覆者,从不抱怨地基不稳。他们只会亲手砸碎旧地基,用钢铁和算力,浇筑出一座属于自己的新王座。

下次当你打开Cursor,看着它丝滑地为你补全代码时,或许你可以会心一笑:这短短几行代码背后,可是击败了无数个“底层幽灵”才换来的胜利。