Spark-X2.5-4B 实测:6GB 笔记本上,谁能更快把事做对?

同一台 6GB 显存的笔记本上,Spark-X2.5-4B 完整装进显存,Qwen3.6-35B-A3B 靠系统内存运行。72 个正式 run 之后,快和准落在了不同地方:主任务 Spark 快几十倍,24 道题却是 Qwen 通过得更多。

1. 结论:这次「快」和「准」不是同一件事

同一台笔记本上跑两个本地模型:Spark-X2.5-4B 完整装进 6 GB 显存, Qwen3.6-35B-A3B 是 MoE,40 层专家计算交给 CPU,权重主要靠 64 GB 系统内存。 24 道任务、72 个正式 run 跑完之后,两边的长处不在同一个地方。

三项预定主任务里,两边都做对了两项:读说明书回答三个问题、修好一个刷新就丢内容的待办清单。这两项里 Spark 快得多——说明书题中位数 7.17 秒对 247.73 秒,待办题 23.32 秒对 395.20 秒。第三项整理订单,两边都没能完整交付。

但把 24 道题放在一起按整题判定,Qwen 通过的题更多:Spark 8 道,Qwen 16 道。

判据 Spark-X2.5-4B Qwen3.6-35B-A3B
三项主任务完成 2 项(说明书、待办) 2 项(说明书、待办)
主任务成功等待(中位数) 7.17 秒 / 23.32 秒 247.73 秒 / 395.20 秒
24 道题最终通过 8 / 24 16 / 24

「完成 2 项」只按预定三道主任务、且允许题目规定的最多两次返工来算, 不把补充题或重复跑到的一次成功塞进这个数字。重复是为了看稳定性,不增加题目数。

2. 测试环境:两台模型是怎么跑起来的

项目 配置
笔记本 RTX 3060 Laptop GPU,6 GB 显存;i7-12700H;64 GB 系统内存
推理 llama.cpp,两模型同一 commit 96550613
Spark-X2.5-4B Spark-X2.5-4B-Q4_K_M.gguf,2 600 224 352 字节(约 2.42 GiB),全部层放 GPU
Qwen3.6-35B-A3B Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf,22 360 456 160 字节(约 20.83 GiB),40 层专家在 CPU
共同参数 32K 上下文、greedy(temp 0 / top_p 1 / top_k 0)、关闭思考、单并发、20 线程
运行方式 每个任务新起一次服务进程,加载时间单独计,不计入任务耗时

Qwen 那一路的 35B 是总参数量,每生成一个 token 大约只激活 3B 参数。它的权重装不进 6 GB 显存,靠 -ncmoe 40 把 40 层专家计算交给 CPU,再由系统内存供权重——这也是它慢下来的主要原因。

两个模型的量化级别并不相同(Q4_K_M 对 UD-Q4_K_XL),架构也不同。 这是一次同一台电脑上的实用比较,不是控制变量的量化或参数量实验, 不能读成「4B 比 35B 强」或「6 GB 显存能单独装下 35B」。

3. 判分口径:24 道题、每轮预算与返工规则

题库冻结在 laptop-task-v2,共 24 道英文任务:订单与数据整理、说明书问答、浏览器修复各 8 道,其中 18 道常规题、6 道加长或更复杂的压力题。每个模型各跑一遍,固定题目顺序、两边交替先后。

首答只有在完整输出、并且结构、事实、引用或全部浏览器行为检查都通过时才算通过;部分正确只记部分检查数,整题不通过。未通过可以追加最多两次固定反馈,反馈只说哪里失败、不给答案。超时、连接中断或输出被截断都算该轮未完成,不能拿可见前缀判通过。

题型 每轮输出上限 每轮墙钟上限
订单整理(常规) 2048 tokens 300 秒
说明书问答(常规) 1024 tokens 600 秒
浏览器修复 4096 或 8192 tokens 900 秒
压力题 按 cases.json 逐题登记 900 秒

预定主任务 DATA-001、DOC-005、CODE-001 各模型各完整跑 5 次,防止测完只挑有利的题;其余 21 道各跑 1 次。合计 48 次首轮对照加 24 次重复,共 72 个 run,全部完成。

4. 主任务一 · 说明书三问:两边全对,等待差 34 倍

给同一份约 7 500 词的英文说明书,只根据原文回答三个问题,并且指出答案出处。两边 5 次全部首次通过,三个答案和出处都对:

问题 正确答案
例行维护什么时候开始,最长中断多久? C 窗口 · 02:30 UTC,最多 18 分钟
4.2 版受限文件的体积和附件数上限? 每个 8 MiB,最多 6 个附件
中断之后保证退款多少? 说明书没有规定

第三问是关键:两台模型都没有编一个金额出来。

模型 结果 成功等待(中位数,5 次)
Spark-X2.5-4B 5/5 首次通过 7.17 秒
Qwen3.6-35B-A3B 5/5 首次通过 247.73 秒

说明书是本次实验用的虚构测试材料,不是任何厂商的真实文档; 数字来自各 run 的原始记录,不从录像或截图估算。 耗时为「发送请求到核对完成」的中位数,不含模型加载。

5. 主任务二 · 待办清单刷新持久化:两边都修好

题面给一个坏掉的单文件待办网页:新增的条目刷新就消失。要求让添加、编辑、勾选、删除都能保存,然后打开网页实际操作验证。

两边 5 次全部首次通过、无需返工;验收不只截图,还包括实际点击与刷新、重新打开页面。检查还覆盖了「删掉最后一条之后刷新仍然为空」这种边界情况。

模型 结果 成功等待(中位数,5 次)
Spark-X2.5-4B 5/5 首次通过 23.32 秒
Qwen3.6-35B-A3B 5/5 首次通过 395.20 秒
Spark 首轮运行:新增条目后刷新,内容仍在。这是该 run 的实际浏览器行为记录。
Spark 首轮运行:新增条目后刷新,内容仍在。这是该 run 的实际浏览器行为记录。
Qwen 首轮运行:重新打开页面后内容仍在。
Qwen 首轮运行:重新打开页面后内容仍在。

任务耗时包含自动保存与浏览器验收这一套固定流程, 不等于人手工粘贴再核对的实际耗时,两方用的是同一套流程。

6. 主任务三 · 订单整理:两边都没完整交付

把杂乱的订单信息整理成表格:只算已付款,逐笔核对商品、数量、运费和总额。其中一笔 JB-101 的正确合计是 $30.40。

模型 5 次结果 失败实耗(中位数) 实际表现
Spark-X2.5-4B 0/5 33.36 秒 首答写 $29.40,少算 $1,还漏掉 JB-102;返工后整题仍未通过
Qwen3.6-35B-A3B 0/5 300.35 秒 到 300 秒生成上限时回答仍没写完

两边 5 次都没能完整交付全部 6 笔订单。Spark 结束得快,但金额和漏单仍要人工核对。

表里的秒数是失败实耗,不是「做对所需时间」——这两题两边都没有成功 run, 所以没有成功等待可以报。失败耗时只说明它花了多久才失败,不能当成性能成绩。

7. 补充题 · 引用必须给全:答案对,出处也要全

在约 1.6 万词的说明书里找地区规则:南区工单保留多久、归档申请交给谁、HOLD 状态有什么例外。需要找的规则是:普通工单 45 天、HOLD 工单 365 天,归档申请交给 GRAY 团队,归档前由归档负责人审批;归档取回的费用资料里没写,两边都没有编造。

模型 结果
Spark-X2.5-4B 事实全部答对,但漏了「GRAY 团队」这条的出处;返工 2 次仍未补齐
Qwen3.6-35B-A3B 首次通过:规则、例外和出处都找全了

这题 Spark 的问题在引用不全,不能说它把保留天数读错了。

8. 补充题 · 筛选后删除:Spark 删错了另一条

已完成的是 Alpha、Gamma,未完成的是 Beta。在「已完成」筛选视图里删除 Gamma,应该留下 Alpha 和 Beta。

模型 结果
Spark-X2.5-4B 返工 2 次后仍失败:已完成视图留下 Alpha 和 Gamma,误删了未完成的 Beta
Qwen3.6-35B-A3B 首次通过:删除对象正确,刷新后的全部视图留下 Alpha 和 Beta

同样是「改一个待办网页」,多一层筛选之后结果就分开了。这也是为什么待办那道主任务通过,不能直接推断这一道也会过。

Spark 第二次返工后的验收画面:删除对象仍然不对。两图的筛选状态不同。
Spark 第二次返工后的验收画面:删除对象仍然不对。两图的筛选状态不同。
Qwen 首轮通过的同一项检查。
Qwen 首轮通过的同一项检查。

9. 补充题 · 发票修订与跨时区汇总

修订发票:同一张发票有多个版本,以最高修订版为准,重复只算一次,只汇总已付款。其中 IN-302 的新版已付款、5 件 × $7.20、运费 $2,这笔应计入 $38.00(整题完整正确合计 $155.20)。

模型 首次回答 修改之后
Spark-X2.5-4B 写成 $362 返工 2 次,仍是 $362
Qwen3.6-35B-A3B 漏掉这张发票 返工 1 次,整题通过

跨时区汇总:把不同地区的付款按 UTC 日期汇总,取消的记录不算。其中一笔 EV-01 是当地 9 月 10 日 23:30、时区 UTC−4,换算成 UTC 应是 9 月 11 日 03:30。

模型 首答如何分组 整题最终结果
Spark-X2.5-4B 放进 9 月 10 日 返工 2 次,未通过
Qwen3.6-35B-A3B 放进 9 月 10 日 返工 2 次,未通过

Qwen 在这题的总金额 $43.50 算对了,但分组日期错了。只核对最后一个总数,就会漏掉这个问题。

10. 特殊笔记:两边都保留了原样

修复一个纯文本笔记网页:保存、编辑、刷新之后,字符、空格和换行都不能变。两边第一次生成的网页都通过了全部四项检查。

检查重点 Spark-X2.5-4B Qwen3.6-35B-A3B
中文、引号、emoji 原样保留 通过 通过
空格与换行不丢失 通过 通过
标签样文字不变成网页元素 通过 通过
纯空白不保存,编辑后仍正确 通过 通过
Spark 生成网页的实际保存结果:字符与换行保持原样。
Spark 生成网页的实际保存结果:字符与换行保持原样。
Qwen 同一项检查:标签样文字没有被当成网页元素渲染。
Qwen 同一项检查:标签样文字没有被当成网页元素渲染。

11. 完整 24 题结果:Qwen 通过得更多

同样的修改机会之后,看各自有多少道题能完整交付。

分组 Spark-X2.5-4B Qwen3.6-35B-A3B
18 道常规题 8 / 18 13 / 18
6 道压力题 0 / 6 3 / 6
合计 8 / 24 16 / 24

Spark 有更快做对的任务,Qwen 有更多做对的题目。两项主任务(说明书、待办)是两边共同的得分点;真正的差距出现在引用完整度、以及加长或更复杂的题目上。

按 24 道不同题目统计,三道主任务的 5 次重复不增加题数, 所以这里的分母是 24,不是 72。每题允许最多两次返工,超时即结束。 压力题单独列出,不与常规题合并宣传成功率。

12. 这台电脑上,我会怎么选

先试 Spark:长文查找、小网页修复。 这两项主任务它都做对了,等待明显更短。能自己快速核对结果的小任务,先交给它比较划算。

愿意多等就上 Qwen: 修订发票、筛选删除、例外规则引用这几道它做得更完整,代价是几十倍的等待。

金额和日期两边都要复核: 订单整理和跨时区汇总都没有完全做好,表格排得整齐也得逐项核对。

结论只适用于本机与本次设置。6 GB 显存之外,这台机器还有 64 GB 系统内存, 换成别的电脑或别的配置需要另测。题目全部为合成测试材料。

13. 复现配置:完整启动命令与共同参数

两个模型除 MoE 层数外,参数完全一致:

# Spark-X2.5-4B:全部层放 GPU,不卸载专家到 CPU
llama-server -m Spark-X2.5-4B-Q4_K_M.gguf \
  --alias spark4b --host 127.0.0.1 --port 8081 \
  -c 32768 -t 20 -tb 20 -b 512 -ub 128 -ngl 99 \
  -fa on -ctk q8_0 -ctv q8_0 -np 1 \
  --jinja --reasoning-format deepseek --no-reasoning-preserve \
  # -c 32K 上下文;-t/-tb 各 20 线程;-ngl 99 全部层上 GPU
  # -fa on FlashAttention;-ctk/-ctv q8_0 KV 缓存量化;-np 1 单并发
  # --reasoning-format 与 --no-reasoning-preserve 关掉思考输出
# Qwen3.6-35B-A3B:多一行 -ncmoe,把 40 层专家计算交给 CPU
llama-server -m Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf \
  --alias qwen35b --host 127.0.0.1 --port 8082 \
  -c 32768 -t 20 -tb 20 -b 512 -ub 128 -ngl 99 \
  -fa on -ctk q8_0 -ctv q8_0 -np 1 \
  --jinja --reasoning-format deepseek --no-reasoning-preserve \
  -ncmoe 40
  # -ncmoe 40 是这两个模型唯一的启动差异:40 层专家的计算放 CPU

两次都追加了 --fit off --no-context-shift --no-cache-prompt --cache-ram 0:关闭上下文移位和提示缓存,保证每轮都是完整历史重算。

测量口径 说明
成功等待 第一次发送到全部验证通过,取 5 次的中位数,不含模型加载
失败实耗 最终失败的任务实际花了多久,单独列出,不当作完成时间
模型加载 每个任务新起一次进程,从启动到可用的时间另计

14. 附录:导出规则题,答对规则、格式返工一次

这题问 3.1 版的导出规则,并要求按题目指定的代号作答:缺失日期要写文字代号 NULL。

实际提问(中文简写) 正确答案
用什么分隔符和编码? 制表符 / UTF-8
日期怎么写?缺失日期用什么代号? ISO 日期 / NULL
每天最多可以导出多少次? 说明书未提供

Spark 首次通过,规则、出处和指定格式都符合。 Qwen 规则和出处原本就正确,但首答把缺失日期写成了空值,返工 1 次后通过。

Qwen 没有把说明书读错,它需要修改的是回答格式。这一页用来补充说明格式要求,不作为事实答错的例子。