推理与性能模型架构产业与竞争

Cerebras 那么快,为什么公共 API 上没有 Kimi K3

经常调用大模型接口来写代码或者做任务的人,应该都听说过Cerebras的推理速度。月之暗面发布了开放权重的旗舰模型Kimi K3,有接近3万亿个参数。很多开发者就会想能不能直接在Cerebras的接口上使用Kimi K3来加速自己的任务。但是截至10月25日,Cerebras的公共共享推理目录中只有gpt-oss-120b和qwen-3.8-27b两个模型,没有Kimi K3。它只出现在企业专属模型目录里,客户需要事先预留容量,开通组织专属的调用端点才能使用。

为什么一般开发者不能在公共接口上按量使用这个模型呢?我们可以从 Cerebras 于 10 月 22 日发布的技术博客中找到线索。这篇博客拿 Kimi K3 算了一笔硬件部署账。根据它的简化算法,部署一个 Kimi K3 需要 59 片晶圆级芯片。为了理解为什么一个模型需要这么多片晶圆,我们首先要了解 Cerebras 的推理速度来自何处。

快,是因为权重一动不动

大模型生成回复是一个字一个字往外蹦的。模型学到的知识存储在名为权重的参数中。每次往外蹦一个字,显卡里的计算核心就要读取一次需要的权重。普通的显卡计算核心本身计算速度很快,但慢在模型的权重存储在计算核心之外的显存里面。每次生成新字,显卡都要把大量的权重从计算核心外面的显存搬运到计算核心里面来,大部分时间都花在了搬运数据上。因此要想让推理变快,关键在于减少搬运数据的路程和耗时。

Cerebras 把整张晶圆做成一个大芯片就是为了省去这一步搬运距离。它把内存直接建在 90 万个计算核心旁边,这种紧挨着计算核心的高速存储就叫片上内存。模型权重得提前放进片上内存里,全程留在原地一动不动,计算核心才能直接贴着权重高速吐字,不用再去芯片外面搬运数据。

但单片晶圆的内存容量终归有限。根据 Cerebras 公布的硬件规格,一片晶圆的片上内存只有 44GB,而现在流行的大模型动辄几百 GB,一片晶圆显然装不下。那为什么不像有些报道说的那样,把权重放在片外的大容量存储里,一层层流进晶圆计算呢?很多报道例如 36 氪的文章和我们 8 月的文章都这样写过,那其实是 Cerebras 在 2022 年介绍的训练做法。推理阶段如果每个字都从片外搬权重,晶圆一样要受制于片外搬运带宽,就又回到了显卡的老问题。

Cerebras 在 2024 年 8 月发布的推理服务,采用的方法是把整个模型的权重都放在片上内存里。因为一片 44GB 的晶圆装不下大模型,所以系统在模型的网络层边界处切开,把不同层分散到多台晶圆机器上串联运行。每片晶圆只负责计算自己分到的那几层网络,每层算完的中间结果叫激活值。前一片晶圆把这个激活值传给下一片晶圆继续算,权重本身一直留在各自的片上内存里不动。那份发布公告里举过例子,跑一个 200 亿参数的模型用 1 台晶圆系统,跑一个 700 亿参数的模型则需要串联 4 台晶圆系统。权重要放在片上才能换来吐字速度,代价就是模型有多大,就需要多少片晶圆。

权重从片外存储流入时,少量晶圆就能运行;权重留在片上不动,就要把整套权重分摊到 59 片晶圆上,晶圆之间流动的是激活值。

3 万亿参数,要多少片

模型处理文本的基本单位是词元,大致相当于一个字或半个词。对于平时调接口的开发者来说,模型的内部结构一般只影响显存占用或长文本的调用价格。但是在权重常驻片上的晶圆系统里,模型的层数和模型的结构直接决定了机房里的晶圆片数。

我们可以从Cerebras在10月22日发布的博客开始计算。根据K3的技术报告,Kimi K3一共有大约2.8万亿个参数,一共93层网络。Kimi K3是一个混合专家模型,内部有很多不同的专家模块组成。它每生成一个词元只用到一部分参数,但是用到哪一部分参数事先是不确定的,所以所有的参数都需要放到片上内存中。Cerebras的博客为了方便计算,假设所有的3万亿个参数都用4比特的精度实现,也就是每个参数占半个字节。这样整个模型的权重大小大约是1.5TB,平均到93层网络上,每层的权重大约16GB。一片晶圆有44GB的片上内存,放两层权重会占用32GB的内存,剩下的12GB放不下第三层权重。因此从这个博客的计算方法来看,如果晶圆上面只存放权重的话,想要放下全部的93层网络需要47片晶圆。

然而,片上内存不仅用来装权重,还要给当前处理的请求留出一部分上下文缓存。模型一个字一个字地输出回复,每生成一个字,就需要把前面读进来的提示词和生成的字作为中间结果缓存下来,用来生成下一个字。这部分用来记录历史信息的空间就是上下文缓存,通常也叫 KV cache。如果没有这个缓存的话,模型每次生成一个字都要重新计算之前的长文。在晶圆系统里,这部分上下文缓存也需要占用宝贵的片上内存。

Kimi K3 的混合注意力结构在这里帮它省下了相当多的晶圆。大模型处理上下文主要有两种方法,一种是全注意力,一种是线性注意力。全注意力是指大模型每输出一个新词,都要回头检查之前每一个词留下的上下文缓存。随着输入和输出的文本变长,全注意力的缓存占用的内存就会成比例增长。线性注意力则是把读过的历史信息不断压缩进一个固定大小的状态里。不论上下文拉得多长,单个请求占用的这块状态都不会继续变大。当然,这个固定状态本身也要占内存,处理长输入也需要花计算成本,只是不会随着文本变长无休止地吃掉片上内存。

根据 Kimi K3 的技术报告,它的 93 层网络以三比一的比例混合了这两种结构,其中有 69 层线性注意力 + 24 层全注意力。那 69 层线性注意力的缓存不会随长度增加而膨胀,所以每片晶圆可以照常放置两层权重,其中 34 片各放两层,最后一片放一层,共用了 35 片晶圆。而那 24 层全注意力要给长上下文留大块缓存,博客的做法是每片晶圆只放一层 16GB 的权重,把剩下约 28GB 的片上内存全给缓存,所以这 24 层需要独占 24 片晶圆。两部分相加,35 片加上 24 片,总共是 59 片晶圆。

把这几个数放在一起看,这笔硬件账就清楚了。和只放权重的 47 片相比,59 片里多出来的 12 片晶圆,就是专门给那 24 层全注意力预留的长上下文缓存空间。如果 93 层全用全注意力,照博客同样的算法推下去就要 93 片,比 59 片多 34 片。月之暗面用三层线性注意力加一层全注意力的混合结构,放在权重常驻的晶圆系统上,在这本账上少用了 34 片晶圆。

同一账本下,只放权重要 47 片,K3 的混合注意力要 59 片,全用全注意力要 93 片。

59 片,只能按专属容量卖

算清这 59 片晶圆的账,开头那个问题就有了解释。Kimi K3 出现在企业专属模型目录中,只是说明平台可以以企业专属的方式部署这个模型。机房里并不一定随时备好 59 片晶圆,可以立即给客户使用。Cerebras 官方没有解释为什么这样划分目录。但在我们看来,一个需要几十片晶圆串联、全部权重都需要常驻片上的部署,很难在公共共享池中零散地零售。

公共接口做的是拼单生意,靠大量开发者零散的请求来分摊机器成本。可只要这套 Kimi K3 服务开着,几十片晶圆的片上内存就得一直装满它的权重,没法随时切给别的模型拼单。而且模型一旦拆进几十片晶圆,激活值和请求状态就要在不同晶圆之间挨个传递,几十台机器必须像一条连轴转的流水线那样绑在一起运转,跨片调度的运维成本也全在这里。我们推测,这样一套必须整条产线一起开动的系统很难拆零散卖,按专属容量整包租给企业客户才算得过账来。

这种售卖方式也符合一个行业趋势,就是推理速度正在变成一项单独标价的商品。在模型的能力之外,速度正在成为大模型接口竞争的另一条主轴。不仅 Cerebras 把超大模型的高速服务放进企业专属目录,月之暗面在自家的编程工具里也把速度单独拿出来定价。根据 Kimi 官方模型文档,Kimi 现在已经推出了 K3 的下一代 K3.1 Pro,K3 成了上一代旗舰,而 K3.1 Pro 有一个高速版 K3.1 Pro Highspeed。它在模型能力上与标准版 K3.1 Pro 相同,生成速度大约是标准版的 2 到 3 倍,消耗的调用额度则是标准版的约 2 倍。开发者想要在旗舰大模型上拿到更快的速度,要么得预订芯片厂商的专属容量,要么得在模型厂商那里多花额度。

它能让你快多少,还不知道

如果我们真的进行了采购,在Cerebras上使用Kimi K3会让我们任务变快多少呢?在公开的渠道上目前并没有看到第三方的测试结果,所以外界还不知道在Cerebras上使用Kimi K3到底能有多快。博客虽然提到了多万亿参数量级的模型可以实现每秒1000到2000多个词元的速度,但这是否是Kimi K3的实测,又是如何测试的,并没有提到。前面的59片晶圆也只是博客为了介绍原理所做的简化计算,具体的部署方式和现在是否已经投入使用,在博客中都没有提到。

目前最接近的数据是 Cerebras 在今年 5 月发布的一个企业服务公告。第三方评测机构 Artificial Analysis 在 5 月初用了 Cerebras 的私有端点测试了一个旧模型 Kimi K2.6,公告里转述了这个测试的结果。这个测试发出的请求是一个带有大约 1 万词元的输入。这个请求要先在后台生成很多看不见的思考内容,然后再输出 500 个词元的回答。对于这个相同的请求,官方的 Kimi 端点花了 163.7 秒,Cerebras 的私有端点每秒可以输出 981 个词元,只花了 5.6 秒就跑完了全程。我们的理解是,5.6 秒和 163.7 秒里,绝大部分的时间都花在了生成这些思考内容上,所以输出速度快的一方便差了这么多。当然,这组对比是厂商转述的旧模型的数据,不能直接当作 Kimi K3 的实际表现。

退一步讲,就算开发者真的在 Cerebras 上面使用了 Kimi K3,这种快速也只是针对模型的输出部分。我们在 9 月份实测推理速度的文章里提到过,在比如自动写代码这样的编程代理任务中,提示词一般比模型的输出长 100 到 600 倍,中间还会夹带着大量的本地工具调用。我们当时就实测了 Cerebras 托管的 Qwen 27B 模型,纯输出的中位速度可以达到每秒 1040 个词元。但是在编程任务里因为提示词很长,模型要先看完这一大段提示词才会吐出第一个词元,所以等第一个词元的时间就会拉长。算上这段时间之后,如果不计算工具调用的时间,有效速度就从每秒 1040 个词元降到了 357 个词元。Kimi 官方模型文档的常见问题解答也明确指出,高速模式只加速模型的输出,对文件读写和执行命令等工具调用没有影响。如果任务里工具执行占比较大,整体的提速就不明显。

回到最初的问题,为什么公共接口上没有 Kimi K3呢?Cerebras 的高速度要求把模型的权重和缓存都放在片上内存里,一个 3 万亿参数的 Kimi K3 就要占住几十片晶圆芯片。我们认为,这笔硬件账让它很难拆进公共池子里按量零卖,所以它只出现在企业专属目录中。

鸭哥每日手记

日更的深度AI新闻和分析