……情况如何?哦,20个token/秒,13个token/秒,16、20、5……实际是29 token/秒。它闪了一下到29,然后回到24个token/秒。

大家好,欢迎收看本期节目。今天我们再次测试GLM 5.2模型,有一件事我们还没做过——启用MTP解码(多token预测)。在其他模型上,这项技术曾让速度提升两倍。所以我们将看看通过多重预测能让GLM 5.2快多少倍。

如果你现在去Hugging Face的GLM页面,点击“微调”部分,会发现有人上传了GLM的MTP层。这个版本运行正常。我已经有一些数据:C++编码时预测准确率约77.9%;默认模型指定3个token,即主模型生成1个、草稿层额外预测2个。C++达77.9%,HTML/ECMAScript约70%,数学题76%。

百科知识类测试(稍后现场演示)准确率约71%,你可以用最新版本跟着一起测。MTP的工作原理是:有一个非常小的层,试图预测主模型(约500GB版本)会生成的token。这要求很高——我做了几个MTP量化版本:未量化的需20GB内存(和Qwen模型本身差不多大);量化到Q8后更小,Q4版本仅5.6GB。虽然仍占不少内存,但你是在让这个小层预测与500GB主模型相同的token。

另一个好处:使用较高量化版本时MTP加速更明显;若用Q2/Q3低精度,MTP不会带来提速。现在展示实际速度:我运行的是Q4_K_M版本(之前视频验证过质量更好)。左侧测试C++冒泡排序,基线速度约15.9 token/秒(限制在500token内)。

冒泡排序函数生成完毕,最终平均15.4 token/秒(Q4_K_M版)。右侧启用MTP:在引擎设置中勾选“推测解码器”,选择Q4版本(也可选Q8对比)。点击运行——速度在20-73 token/秒间波动,最低跌至14。最终平均18 token/秒,比基线提升20%!虽不及Qwen/Gemini的2倍加速,但让5GB小层预测500GB模型的输出已属不错。

接下来测试百科知识:“告诉我关于埃菲尔铁塔的信息”。MTP关闭时约15.2 token/秒;开启后速度在17-24间波动,最终仅达15.8 token/秒——只快0.6个token/秒,令人失望。

再试一个:“Flappy Bird 3D HTML5”(限制500token)。MTP关闭时15.2 token/秒;开启后速度在11-23间剧烈波动,最终仅14.3 token/秒——反而更慢!可能因为“3D”版本超出模型熟悉范围。

验证假设:改测普通版Flappy Bird(非3D)。基线15.4 token/秒;启用MTP后稳定在20+ token/秒,偶尔跌至15。

这部分测试中,模型遇到了一些困难。目前生成代码的速度在每秒23个令牌左右波动,有时降至18、15或17个。我感觉自己像一匹正在竞逐的赛马,心跳加速,虽然预感结果不会太好,但只能顺其自然。令人遗憾的是,它选择的颜色与主模型不一致。最终我们得到了每秒14.97个令牌的成绩,未能超越基准的15.4。

接下来我尝试让模型用C++编写一个显示时间的函数,想看看是否对这种特定语言有特殊的MTP优化。结果它给出了两个示例,启用MTP后速度从每秒15.2个令牌提升至最高23个。虽然过程有些混乱,但最终稳定在每秒17个左右,实现了约13%的性能提升。为了验证这一成果是否可靠,我决定进行更长时间的测试,而不是仅仅依赖500个令牌的数据。

随后我输入提示词“写一首关于GLM的诗”,这属于创意写作范畴,预计MTP表现会很糟糕。默认禁用MTP时速度稳定在每秒15.3个令牌,但启用后初期仅约11到12个。模型在生成文本时频繁出错,最终成绩惨淡地停留在每秒13.4个令牌。相比之下,之前的冒泡排序代码生成表现较好,因此我决定选择该任务进行更深入的长文本测试。

我将冒泡排序任务的生成长度设定为2500个令牌,尽管最终只输出了600个。在默认预测步数为3的情况下,启用MTP后速度达到每秒22个令牌,表现健康。随后我尝试将预测步数调整为5,速度一度降至14到12个令牌。尽管在生成自然语言文本时表现挣扎,但在处理代码语法时速度较快,最终整体成绩为每秒16.5个令牌,略快于基准。

为了进一步评估上下文性能,我追加了一个提示词:“你能用NTP让它更快吗?”这次测试不再从零开始,而是基于之前的600个令牌上下文。禁用NTP时速度为每秒14.9个,但启用后性能急剧下降至8到10个令牌。模型在生成解释性文本时表现极差,仅在进入代码编写阶段时才略有提速,整体体验令人失望。

为了挽救局面,我切换到Q8量化版本进行测试。结果依然不理想,速度在7到12个令牌之间波动,远低于禁用MTP时的每秒14.9个基准。看来该模型对这种特定任务并不熟悉,或者实现方式仍需优化。尽管预测准确率已从10%提升至70%,但在8位量化下表现依旧不佳,之前4位版本反而更快。

最后我尝试使用完全最大化的非量化MTP层,但这额外消耗了20GB内存。速度在8.5到14个令牌之间波动,仍未达到预期效果。综合来看,虽然MTP在代码生成场景下能带来显著提升,但在创意写作和复杂文本解释中表现挣扎。考虑到额外的内存开销与不稳定的性能提升,目前这一技术在实际应用中的价值仍存疑。

表现并不理想,所以这并不是什么值得大肆宣扬的好消息。但这可能仅仅是因为我们试图预测的是量化模型正在挑选的令牌。因此,如果你有能力运行完全未量化的模型版本,然后同时运行 MTP 的未量化版本,那才是你获得性能提升的地方。所以,如果谁拥有这些多系统配置,比如你的 RTX 显卡或者 Mac Studio,让它们两个一起运行,请告诉我性能表现如何。

不过还有一件额外的事情我要做,那就是看看从全新开始、未量化的 MTP 层是否能比量化版本运行得更快。对于这种冒泡排序任务,我们之前得到的是每秒 15 个令牌。也许我的电脑正在运行一些后台任务,你知道的,那个东西还在开着哦,现在是每秒 21 个令牌。我们回来了,从头开始重新测试,所以我们又回到了起点,正在以每秒 19 个令牌的速度攻击。

因此,即使 MTP 的未量化版本也在冒泡排序上击败了非 MTP 版本。我们最终在节目中得到的结果是,尽管它在文本摘要任务中有点吃力,达到了每秒 15 个令牌。是的,我们最终得到了每秒 16.4 个令牌,实际上如果你仔细看的话,它不知怎的比那个还要快。我想我只是需要再对 Q4 版本做一次测试,因为我们从每秒 16.5 个令牌开始,而在最开始的时候,我们得到的是每秒 18 个令牌。但这次运行我们只得到了每秒 15 个令牌,所以也许我的内存只需要清理一下之类的。

所以我打算再运行一次 Q4 版本以获取最终速度,因为我们在使用未量化 MTP 时得到了每秒 16.5 个令牌,并且我们确实获得了较慢的性能。我们得到了每秒 16.1 个令牌,你知道的,这已经相当接近了。所以 Q4 版本并不那么糟糕。你节省了 15GB 的内存,而且如果你运行这个的话,它每秒快一个令牌。我想也许这就是我们能达到的水平吧。

也许我们会把这个作为一个可切换的选项。我认为如果你生成的令牌数少于 1000,MTP 可能是有益的。但一旦你超过那个限制,那就是你应该关闭 MTP 并转向非 MTP 的时候。所以如果你是在寻找快速答案、处理简短内容的情况,也许可以考虑使用 MTP。这就是我现在的想法。

也许我会把它做成一个小设置选项。也许事情就是这样发展的。但我还想再尝试一件事,我想看看阈值是否会在任何方面产生影响。所以我要进入设置,将响应限制设为 500 令牌,刚好超过 250 个令牌以保持简短。所以这里的基准是预测 250 个令牌,速度为每秒 19 个令牌,这比禁用 MTP 时的约每秒 15.5 个令牌要快。

但我想看看当你调整给予它的步数时会发生什么。所以默认情况下是三步,就像我说的。我要尝试两步。让我们看看那会怎么样。所以在两步这里,我可以看到我们在以每秒 17、16、20 个令牌的速度运行。减少步数是有惩罚的,因为你必须用主模型来验证这些令牌,而且它不能以令牌批次的方式执行。

所以预测的令牌越多,主模型需要运行的次数就越少。如果它们是正确的,那你就赢了;但如果它们是错误的,那你只是在浪费时间等待中间过程。所以我们在这里以两步结束,最终得到了每秒 16.6 个令牌,比没有 MTP 的基准稍快一点。但没有每秒 19 个令牌的三步那么快。

现在让我们换一下,进入四步模式,因为我们已经做过三步了,那是默认值。我们要增加到四步。现在 ZAI 我在某处读到他们说你可以增加到五步吗?是的哦,每秒 14、19、16、23、16、18、22 个令牌。这种每秒令牌数的波动会让你在 MTP 下发疯,就像当速度翻倍到 20s 左右时那种 gemmers 的感觉很爽嗖的一下。但现在是这种哦,我们最终得到了每秒 18.15 个令牌。

所以它不像两步那么慢,但也不像三步那么快。所以在这种情况下四步肯定比三步慢。我要增加到五步。很高兴能进行彻底检查,既然你在这个频道上并且大家正在享受节目,享受着这种糟糕的表现情况。哦每秒 20、13 个令牌,50、25、20,我实际上看到了每秒 29 个令牌!它闪现在每秒 29 个令牌,闪烁了一下。

每秒 24、20、24 个令牌,我们最终得到了每秒 18 个令牌。我现在起鸡皮疙瘩了,因为我看到了 GLM 5.2 达到每秒 29 个令牌。我可能直接把那个做成缩略图了,每秒 29 个令牌。(笑声)看看会发生什么。我要发疯了,我要把它设为十步。让我们超过十步并看看有多忙哦。

你知道这并不像我想象的那么糟糕。我们正在得到每秒 9 个令牌,所以确实很糟。但它并不像我想象的那么糟糕。它仍然在持续处理中。20,我看到那里有一瞬间是每秒 26 个令牌。每秒 25 个令牌,当我们尝试在十步时结束时得到了每秒 12 个令牌。现在可能不值得再做更多测试了,你大概已经对 MTP 有了感觉。

那个层就在那里,如果你想玩玩的话可以试试。它就像一个普通的 safe tensor 文件一样。所以如果你想像玩一下,也许你可以让它运行得更快。请告诉我你是怎么做到的,因为我对此很感兴趣,让我知道如果我在上面花了一些时间让它工作。也许如果你有一个分布式计算机或类似的东西呢?

或者也许 MTP 不是解决方案,我们可能会尝试 Eagle 3、D flash 或 D tree 或其他推测解码技术。所以请告诉我你们的想法,希望你们觉得这个视频有用并享受了节目。你知道了解今天的现状仍然很有用,也许明天它会更快,但至少你不会浪费时间。希望你们觉得这个视频有用并享受了节目哦这种状况。

哦每秒 20、13 个令牌,16、25、20,实际上每秒 29 个令牌。它闪现在每秒 29 个令牌,闪烁了一下。每秒 24 个令牌