开源llama.cpp Releases·原文 2026年10月17日

llama.cpp测试随机模型生成器改为按张量填充表,Muse Spark随机种子失败率降至零

llama.cpp发布b11712,测试中的随机模型生成器改用按张量名子串选取填充规则的表。改动后,CPU构建下约千个随机种子的最差NMSE从 1.36e-05降到 2.48e-06,无种子超过 1e-05阈值;其余 131 个模型逐位不变。

AI解读:llama.cpp发布b11712,核心改动是把测试用随机模型生成器的逐张量规则改为一张填充表,按张量名的子串选取规则,并在其后保留单一写入路径。此前这类规则放在写入路径里,新增一条规则就要在两个存储分支中各加一个标志。

问题在Muse Spark上暴露:test-llama-context在state_load、cp_h、cp_d上约 6% 的随机种子失败,NMSE为 1.0e-05至 1.4e-05,而阈值是 1.0e-05。发布说明给出的机制是:随机生成器独立抽取每个张量,而一个保持范数的残差门要求alpha^2+beta^2==1,转换却从同一个原始权重解出alpha和beta,导致流与分支被独立缩放、模型成了放大器。

作者说明,测试所用权重并不是一个Muse Spark。滑窗是暴露该问题的条件:恢复的状态只保留窗口,SWA层的注意力在不同的单元布局上归约,续写不再逐位一致。发布说明称所有SWA模型都带有这一特性,量级在 1e-08,而Muse Spark上被生成器放大到了 1e-05。

修复方式是为每条规则设置填充器,从按张量名子串索引的表中选取;Mamba移入该表,Muse Spark加入,门填充器每块抽一次原始权重并按转换的方式解出alpha和beta。

发布说明给出的结果是:CPU构建上跑过一千多个种子,最差情况从 1.36e-05降到 2.48e-06,中位数从 4.10e-06降到 5.48e-07,没有种子超过阈值;其余 131 个模型因没有这些张量而逐位相同。ctest在CPU和CUDA构建上均通过。

第二个提交让所有张量填充器从fill_normal取值,避免重复生成器和分布代码;生成的模型逐位不变。以上数字与机制均来自该发布的提交说明,未提供独立复现。

llama.cpp发布b11712,测试代码中的随机模型生成器改为按张量填充表工作:每条规则配一个填充器,填充器由张量名子串从表中选出,并共用单一写入路径。

Muse Spark在状态恢复测试中约 6% 种子失败

发布说明称,Muse Spark使test-llama-context在state_load、cp_h、cp_d上约 6% 的随机种子失败,NMSE落在 1.0e-05至 1.4e-05,而阈值是 1.0e-05。

说明给出的机制是:滑窗恢复的状态只保留窗口,SWA层的注意力在另一套单元布局上归约,续写无法逐位一致;所有SWA模型都带有这一点,量级在 1e-08,Muse Spark上则是 1e-05。差别来自随机模型生成器:保持范数的残差门满足alpha^2+beta^2==1,转换从同一个原始权重解出两个权重,而生成器独立抽取每个张量,流与分支因此被独立缩放,模型成了放大器。发布说明明确,测试所用权重不是一个Muse Spark。

  • 失败测试名称:test-llama-context,涉及state_load、cp_h、cp_d。
  • 失败种子比例:约 6%。
  • NMSE区间 1.0e-05至 1.4e-05,阈值 1.0e-05。

改动内容与测试结果

此前逐张量规则位于写入路径内,由标志在每个张量的两个存储分支中选值,新增规则需要在两处各加一个标志;该文件自带TODO要求去掉这种做法。新实现为每条规则提供填充器,按张量名子串从表中选取,写入路径只保留一条。Mamba被移入该表,Muse Spark加入,门填充器每块抽取一次原始权重,再按转换的方式解出alpha和beta。

发布说明给出的结果覆盖CPU构建上一千多个种子:最差NMSE从 1.36e-05降至 2.48e-06,中位数从 4.10e-06降至 5.48e-07,无种子超过阈值;其余 131 个模型因不含这些张量而逐位一致。ctest在CPU与CUDA构建上通过。另一提交把填充器统一改为从fill_normal取值,生成的模型逐位不变。

  • CPU构建、一千多个种子:最差 1.36e-05 → 2.48e-06,中位数 4.10e-06 → 5.48e-07。
  • 无种子超过 1e-05阈值;131 个其他模型逐位不变。
  • ctest在CPU和CUDA构建上通过。

信息来源

llama.cpp Releases原始来源

更多

新闻专题
外观