缓存时间:
2026/08/19 15:36
# 为定制化而生的新型美国AI模型
来源:https://blog.bytebytego.com/p/the-new-american-ai-model-designed
[](https://fandf.co/4x4kICp)
AI编程代理能快速生成代码,但持续集成检查通常在其完成工作后才进行。Sonar Vortex改变了这一模式。它在代理的编程循环内部运行,在代理编写代码前提供架构上下文,并在代码生成过程中实时验证输出。内部测试发现,令牌消耗降低了36%,缺陷减少了92%。
探索Sonar Vortex (https://fandf.co/4x4kICp)
Thinking Machines于2026年7月15日发布了一款名为Inkling的模型。其介绍中提到了几个有趣的要点:
- Inkling拥有66层,每层包含256个专家,但对于任意给定的令牌,只有其中六个被激活[2]。
- 大多数层只能访问最近的一小段文本窗口,而少数层则可以访问全部文本[1]。
- 词位置编码采用了一种多年前大多数实验室已弃用的方法。
由Mira Murati(OpenAI前CTO)创立的Thinking Machines,将其使命描述为构建扩展人类意志和判断力的AI。该公司列出了四个工作方向:训练强大模型、构建让人们用自身知识定制模型的工具、开发拓宽人机沟通渠道的接口,以及发布关于模型如何构建的研究[3]。
在Inkling之前,公司推出了Tinker,一项用于微调开源模型的服务[4]。Inkling是该公司首款从头训练的模型[1]。其权重在Hugging Face上以Apache 2.0许可证发布[2],因此任何人都可以下载并在自己的数据上重新训练模型。
在本文中,我们将探讨Thinking Machines在构建Inkling过程中做出的各种选择。以下是我们将涵盖的内容:
- 混合专家模型,以及9750亿参数与410亿参数之间的差距。
- 支撑百万令牌上下文窗口的局部与全局注意力层组合。
- 位置编码,以及Thinking Machines选择的、早于当前标准的旧方法。
- 图像和音频如何在没有独立预训练编码器的情况下进入模型。
- 思考努力度,一个介于0和1之间的设置,用于调整模型在回答前的推理程度。
*免责声明:本文基于来自多个来源的公开分享信息。参考资料列于文末。如发现任何不准确之处,请评论指正。*
下图展示了这五项内容在模型内部的位置。
[](https://substackcdn.com/image/fetch/$s_!Btgc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a3ec64-dd86-41e8-b95f-2efe63b53321_2834x2942.png)
让我们先理解四个对理解架构至关重要的关键术语:
- **令牌:**令牌是文本的一个片段。模型处理比句子更小的单元,通常比单词还小一点。例如,句子“Inkling was released in July”可能变成六个令牌,常用词各占一个,不常见词则可能被拆分为两三个。
- **参数:**参数是存储在模型内的一个数值,在训练过程中学习得到。当你读到一个模型有9750亿参数时,它就是文件中单个数值的数量。每个参数最初都是随机噪声,经过数百万次调整,直到模型能产出合理的文本。
- **训练:**训练过程是向模型展示文本,让它预测下一个令牌,将该预测与实际出现的下一个令牌进行比较,然后朝着能使预测更好的方向微调每个参数。每次调整的大小和方向称为梯度,一次性计算所有梯度的过程称为反向传播。通过在数万亿令牌上重复此过程,参数稳定在能产生有用预测的数值上。
- **层:**层是令牌处理旅程中的一个阶段。Inkling有66个层按顺序堆叠[2]。令牌的表示进入第1层,被转换,传递到第2层,依此类推,直到第66层,之后模型预测下一个令牌。每层都有相同的两部分:一个注意力步骤,从序列中的其他令牌中拉取信息;一个前馈步骤,转换结果。
Inkling将存储模型的成本与运行模型的成本分离开来。这就是如此大的模型依然能负担得起使用的原因。
在普通Transformer中,每层的前馈步骤是一个单一网络,每个令牌都通过整个网络。如果该网络包含50亿参数,那么处理每个令牌都涉及全部50亿参数。
Inkling用256个更小的网络(称为专家)取代了那个单一网络。对于每个令牌,选择步骤从256个专家中选出6个。只有这6个运行,其余250个在该令牌处理期间保持空闲,转而处理其他令牌[2]。这种设计模式称为混合专家模型,Thinking Machines表示他们的版本在很大程度上遵循了DeepSeek发表的方法[1][8]。
请看下图:
[](https://substackcdn.com/image/fetch/$s_!LGyB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1d2fc17-29cf-4f2f-901c-54590d0c22cc_2834x2324.png)
让我们通过一个简单例子来理解:
- 假设你构建了一个层,包含10个专家,每个专家有10亿参数,并且每个令牌运行其中2个。
- 磁盘上的文件包含所有100亿参数,要运行模型,必须先将所有参数加载到内存中。
- 处理单个令牌涉及20亿参数,因此每个令牌的成本大约是普通同规模层的五分之一。
Inkling在大规模上实现了这一点。整个模型的总参数为9750亿,处理任何单个令牌涉及的参数数量约为410亿[1]。这意味着每次只有约4%的模型在运行。
硬件需求使情况更加清晰。检查点是保存所有训练参数的文件。Inkling的全精度检查点需要至少2TB的组合GPU内存,模型卡说明为八块NVIDIA B300卡或十六块H200卡[2]。
Thinking Machines还提到了量化检查点。这意味着相同的参数以更低的数值精度存储,大致类似于用3.14代替3.14159265以节省空间,但牺牲了一些精度。该版本需要约600GB内存,可以在四块B300卡上运行[2]。
[](https://go.bytebytego.com/Ontologize_081526FDE)
优秀的候选人对模糊的前沿部署工程师职位描述持怀疑态度,仅凭头衔无法赢得他们的信任。
**《2026前沿部署工程师职位状况报告》(https://go.bytebytego.com/Ontologize_081526FDE)** 解释了候选人看重什么、市场如何发展以及雇主如何使这些角色更易于理解。
正在招聘?您也可以将职位发布到 forwarddeployedengineer.com (https://go.bytebytego.com/Ontologize_081526),这个专注于前沿部署工程师的招聘平台。
探索招聘板块 (https://go.bytebytego.com/Ontologize_081526)
从256个专家中选出6个听起来简单,但实则不然。选择过程如下:
- 一个称为路由器的小型组件为每个专家生成一个分数。
- 每个专家都有自己的一组数字列表,在训练过程中学习得到。
- 路由器将输入令牌的表示与每个列表进行比较,得到一个原始数值,匹配度越高,数值越大。
- 这些原始数值可以是任意大小,因此它们通过一个sigmoid函数传递。sigmoid是一个数学函数,将任何数字转换为介于0和1之间的值。例如,输入8,得到约0.9997;输入0,得到恰好0.5;输入-4,得到约0.018。非常大的数接近1,非常负的数接近0,其他数则介于两者之间。Inkling的路由器使用sigmoid生成专家分数[1]。
- 评分后,得分最高的六个专家运行,它们的输出使用这些相同的分数作为权重进行组合。得分0.9的专家比得分0.4的专家对结果的贡献更大。
这种方法使一种特定类型的故障更容易发生。要理解这种故障,考虑在数百万训练步骤中发生的事情。假设由于运气,专家47在早期被选中的频率略高于平均水平。它接收到更多令牌,因此获得更多梯度更新,改进速度比邻近专家更快。由于它更好,路由器给它更高的分数。因为它得分更高,它被选中的频率就更高。
如果我们让这个循环运行足够长时间,我们最终可能得到一个256专家的层,其中大约20个专家处理几乎所有事务,而其他236个专家则发展不足。这被称为路由崩溃。换句话说,虽然我们花钱存储了256个专家,但得到的只是20个专家的能力。还有第二个代价。由于专家通常分布在不同机器上,一个拥有四个热门专家的机器可能成为瓶颈,而其邻居却闲置[9]。
传统的修复方法是在训练目标中增加一个惩罚项,当专家使用不均衡时惩罚项会增大。这意味着同时训练模型的两件事:正确预测下一个令牌,以及保持专家使用平衡。
问题是这两个目标产生的梯度指向不同方向。预测梯度可能说“增加这个参数”,而平衡惩罚则说“减少它”。其中一个会胜出,无论哪种情况,模型都被拉离了你真正想要的方向。如果我们将惩罚强度设置得太高,文本质量会下降。如果设置得太低,专家仍然会崩溃[9]。
Thinking Machines使用了一种由Wang及其同事提出的方法,DeepSeek也采用了该方法[1][8][9]。该方法通过为每个专家保留一个独立的偏差值来完全消除冲突,这个偏差值只是添加到该专家分数的一个小数字。诀窍在于偏差应用的位置。
[](https://substackcdn.com/image/fetch/$s_!dEzn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f9dbcb8-842e-4e86-b5c5-b457f94b0447_3654x1536.png)
让我们在此设置下分析一个到达某层的令牌。假设路由器为四个专家生成了这些sigmoid分数。
专家47最近被过度使用,因此其偏差已下降至-0.15。这使其选择分数低于专家88,于是专家88取代了其位置。偏差改变了哪个专家被选中。当专家88的输出被组合到最终结果时,它按照其原始路由器分数0.80进行加权,偏差被排除在外。换句话说,偏差仅影响选择。它从不触及加权,并且通过一个在反向传播之外运行的简单计数规则来更新。主要目的是抑制繁忙的专家,同时给较安静的专家一个机会。
[](https://substackcdn.com/image/fetch/$s_!M1sm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdecf4d2f-7ba4-44c3-b40c-2feefed68ee2_2280x1116.png)
结果是专家使用保持平衡,训练目标完全没有接收到竞争性的梯度。
这里需要注意的一点是,无论路由如何,每个令牌上额外运行两个专家[2]。这些被称为共享专家,它们包含几乎每个令牌都需要的通用处理。Thinking Machines表示,六个选定的路由专家和两个共享专家的分数在用作权重之前会被归一化[1],这意味着所有八个专家都被缩放到共同范围并按比例贡献。换句话说,每个令牌总共运行八个专家。
稀疏性处理了前馈步骤的成本。注意力步骤携带一个增长更快的独立成本,Inkling通过让大多数层只检查极少内容来管理它。
对于每个令牌,模型计算三组数字:
- 一个查询,描述此位置需要何种信息。
- 一个键,描述此位置提供何种信息。
- 一个值,携带此位置传递的实际内容。
每个令牌的查询与每个更早令牌的键进行比较。强匹配产生高分,这些分数决定了每个更早令牌的值有多少被拉入当前位置。这就是句子中的“它”如何最终与其指代的名词连接起来。
由于每个令牌与每个更早令牌进行比较,比较次数随序列长度的平方增长。例如:
- 1,000个令牌产生约100万次比较。
- 10,000个令牌产生约1亿次比较。
- 1,000,000个令牌产生约1万亿次比较。
Inkling支持一百万令牌的上下文窗口[2],而每层一万亿次比较乘以66层,远超任何合理数量硬件的处理能力。
这就是滑动窗口层限制每个令牌仅关注固定数量的最近令牌,而非所有更早令牌的原因。如果窗口是1,000,那么第500,000个令牌只与第499,000到500,000个令牌比较,然后停止。这是1,000次比较而非500,000次,整个序列的总数随序列长度线性增长而非平方增长。
这引出了一个明显的问题:如果每层只看到一个小窗口,长文档第一页的信息如何到达第四百页?
Inkling以5:1的比例在滑动窗口层和全注意力层之间交替[1]。vLLM项目发布的集成说明给出了具体的数字分配,将66层描述为55个滑动窗口层和11个全注意力层[7]。
来自远方的信息通过这11个全注意力层传递。例如,假设第200个令牌处有一个事实对第900,000个令牌处的预测很重要。在第6层(第一个全注意力层),第900,000个位置的表示可以回溯并直接获取该事实。之后,它在局部表示中向前传递,在第12层刷新,在第18层再次刷新,依此类推。长距离路径大约存在于六分之一的层中,其余五层以部分成本处理附近上下文。
Inkling还使用8个键值头[1]。注意力通常使用不同的查询、键和值集并行运行多次,每个并行副本称为一个头。在多个查询头之间共享较少数量的键和值集,减少了生成文本时所需的内存。
请看下图,它尝试以简化的方式展示这一设置:
[](https://substackcdn.com/image/fetch/$s_!zXGJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e9cb247-2d0b-4f03-9b09-e3560ec015ea_3292x1938.png)
这种方法有一个实际后果。长上下文模型通常能很好地处理大文档的整体内容,但仍可能遗漏埋藏在中间的某个特定细节。
处理一百万个令牌引出了另一个问题:模型如何表示每个令牌在序列中的位置?
Thinking Machines选择了一种早于当前标准的旧技术。这是由于模型在训练期间从未见过这些长度。
查询和键之间的比较不包含任何关于顺序的信息。例如,"