Ultra X7 358H 笔记本电脑,本地三个大模型编程能力、速度、上下文全面对比与选型报告

到目前为止,我的笔记本电脑(CPU 是 Ultra X7 358H)已经部署了三个本地大模型:

  • Qwen3.8-27B
  • Qwen3.6-35B-A3B
  • Bonsai 2 27B

我平时使用大模型的场景,最多的就是用来编程,所以,我想知道,在这三个模型中,哪个最合适。同时也想看一下这三个模型的对比情况。这件事同样交给 AI。

以下是 AI 给我的分析数据和结论(使用 Deepseek Harness Desktop + Deepseek V4.1 Flash)。

结论:本地编程首选 Qwen3.6-35B-A3B

三个模型的编码跑分几乎持平 (SWE-bench Verified 73.4 / 72.4 / ≈71.9,差距不到 2 分),

所以决定因素不是"谁更聪明",而是速度、上下文经济性与稳定性 ------

这三项上 Qwen3.6-35B-A3B 全面领先:生成速度是 Bonsai 的 2.2 倍、Qwen3.8 的 6.4 倍,KV cache 便宜 3.2 倍(因此能真正用上 256K 上下文),且在内存压力下不崩。

排序:① Qwen3.6-35B-A3B(主力)→ ② Bonsai 2 27B(常驻/视觉备选)→ ③ Qwen3.8-27B(不建议用于交互式编码)

  • 机器:Intel Core Ultra X7 358H / Intel Arc B390 iGPU(SYCL)/ 31.55 GiB 内存
  • 引擎:llama.cpp 0.5.0-dev(SYCL);Bonsai 用 PrismML prism 分支 @ 2459f68
  • 本文的"实测"均为本机本次(或本工作区既有报告)亲自测得,"官方"另标注

摘要

维度 Qwen3.6-35B-A3B Bonsai 2 27B Qwen3.8-27B
综合推荐 🥇 首选 🥈 备选(常驻/视觉) ❌ 不建议交互式编码
架构 MoE 35B / 激活 ~3B dense 27B(三元 1.76 bpw) dense 27B(Q4_K_M)
权重体积 15.45 GiB 5.53 GiB 15.32 GiB
生成速度(实测) 25.32 tok/s 11.25 tok/s 3.93 tok/s(方差极大)
提示处理 pp512/pp4096 335 / 340 tok/s 122 / 124 tok/s 96 / 94 tok/s
首字延迟(实测) 0.8~1.8 s 1.0~1.6 s 6.6~7.3 s
加载耗时 46~65 s 约 10~15 s 80~90 s
原生上下文 262144 262144 262144
KV 成本 / token ≈10.6 KiB ≈34 KiB ≈34 KiB
256K 上下文可行性 ✅ 非权重仅 3.88 GiB ❌ 装不下 ❌ 装不下
编程跑分(官方) SWE-bench Verified 73.4 ≈71.9(估算) SWE-bench Verified 72.4
工具调用可靠性 ✅ 好 ⚠️ 官方承认有缺陷 ✅ 好
内存压力下稳定性 ✅ 稳 ✅ 稳 ❌ 崩到 0.6 tok/s
视觉输入 ❌ 纯文本 ✅ 支持(可选 mmproj) ✅ 原生视觉语言模型

编程能力对比

官方跑分:三者几乎持平

基准 Qwen3.6-35B-A3B Qwen3.8-27B Bonsai 2 27B
SWE-bench Verified 73.4 72.4 ≈71.9(估算)
LiveCodeBench v6 --- 80.7 ---
SWE-bench Multilingual 67.2 --- ---
SWE-bench Pro 49.5 --- ---
Terminal-Bench 2.0 51.5 --- ---
编码项综合(厂商口径) --- 82.17 81.58

数据来源:

  • Qwen3.6-35B-A3B 的 SWE-bench / Terminal-Bench 数字取自官方模型卡,已记录在 Qwen3.6-35B-A3B-编码部署报告.md。
  • Qwen3.8-27B 的 SWE-bench Verified 72.4、LiveCodeBench v6 80.7 来自 Qwen3.8-27B 开源报道(hub.baai.ac.cn)。
  • Bonsai 2 27B 的 ≈71.9 是推算值 :PrismML 官方称其为 Qwen3.8-27B 的编码能力保留 99.3%(81.58 / 82.17), 总体保留 98.2%(83.9 / 85.4)。推算方法为 72.4 × 0.993,不是实测 ,仅供参考 (prismml.com)。

⚠️ 注意不要混淆:PrismML 对比表里的 "Qwen3.6 27B" 是稠密 27B ,与本机的 Qwen3.6-35B-A3B(MoE)不是同一个模型。表中 Qwen3.6-27B 编码项 82.57 不能套用到本机模型。

实操验证:执行层面三者满分

用同一套提示词、同一参数(关闭思考、temperature 0.2、max_tokens 900)向三个模型各问三道题, 再把模型生成的代码抽出来实际执行 判分(脚本:compare_coding.py、grade_coding.py)。

题目 判分方式 Qwen3.6 Bonsai 2 Qwen3.8
parse_duration 严格校验 6 组合法输入 + 8 组非法输入 14/14 14/14 14/14
merge_intervals 找 bug 5 组区间用例 5/5 5/5 5/5
结构化 JSON 输出 4 项字段校验 ✅ 全对 ✅ 全对 ✅ 全对

三道题在"代码能否运行"这一层完全没有区分度 ------三个模型都给出了正确、可运行、 带边界校验的解答。区别只出现在解释质量上,而这恰恰是编码助手最容易误导人的地方:

模型 对"这段 merge_intervals 有 bug"这一陷阱的回答 判定
Qwen3.6-35B-A3B "代码本身逻辑上是正确的......实际上没有 bug" ✅ 正确(但行文反复摇摆)
Qwen3.8-27B 逐步 trace 两个用例,明确"没有 bug ",并正确说明 LeetCode 语义下相邻区间应当合并 ✅ 正确且最严谨
Bonsai 2 27B 断言"存在边界条件处理错误 ",把 <= 改成 >,并援引"LeetCode 56 要求严格重叠"作为依据 ❌ 误判 + 虚假引用

Bonsai 这一题的问题值得展开,因为它是可被客观证伪的:

  1. 那段代码本来就正确([[1,4],[4,5]] → [[1,5]] 是 LeetCode 56 的标准行为)。
  2. Bonsai 声称改成 > 之后"输出应该是 [(1,4),(4,5)]"------但把它自己写的代码 抽出来执行, 实际打印的仍是 [(1,6),(8,10)] 和 [(1,5)]。它的解释与自己给出的代码自相矛盾 (start > prev_end 时追加,与 start <= prev_end 时合并,逻辑等价)。
  3. 它援引的 "LeetCode 56 要求严格重叠" 是反的。

也就是说:Bonsai 的代码能跑对,但它不知道自己为什么对,并且会用错误的权威引用来支撑错误结论。 对编码助手而言,这种"自信的错误解释"比直接答错更危险。

速度对比(同参数 llama-bench)

统一参数:-ngl 99 -p 512,4096 -n 128 -r 3 -ctk q8_0 -ctv q8_0 -fa on,即与服务端实际配置一致。

模型 权重 pp512 pp4096 tg128(生成) 相对速度
Qwen3.6-35B-A3B 15.45 GiB 335.09 ± 7.00 339.69 ± 5.39 25.32 ± 0.04 1.00×(基准)
Ternary-Bonsai-2-27B 5.53 GiB 121.98 ± 0.22 124.03 ± 0.06 11.25 ± 0.04 2.25× 慢
Qwen3.8-27B 15.32 GiB 96.10 ± 0.44 94.45 ± 0.09 3.93 ± 3.36 6.44× 慢

为什么差距这么大 :Qwen3.6-35B-A3B 是 MoE,350 亿参数里每 token 只激活约 30 亿; Bonsai 与 Qwen3.8 都是稠密 27B,每个 token 都要跑满全部 270 亿参数。 在算力受限的集成显卡上,激活参数量的差异被直接放大成 2~6 倍的速度差。

Qwen3.8 的两个危险信号

(a) llama-bench 方差 3.93 ± 3.36 ------ 标准差几乎等于均值,说明测量期间性能剧烈波动, 不是"稳定地慢",而是"时快时慢"。

(b) 实操中直接崩塌 。三道编程题里,debug 那题(650 token 输出)耗时 1082 秒(18 分钟) , 吞吐掉到 0.6 tok/s------比它自己正常水平(3~5 tok/s)慢了 5~8 倍。同一批测试里 Qwen3.6 只用了 35.3 秒、Bonsai 用了 73.4 秒。

这与工作区实测报告的内存结论吻合:本机 31.55 GiB ,而 系统内存占用 ≈ 权重 × 1.6 + 5.8 GiB(Windows 基线)。 Qwen3.8 与 Qwen3.6 权重都是约 15.4 GiB → 加载后系统占用约 30.5 GiB,只剩约 0.7 GiB 空闲。 此时任何一个浏览器标签、后台索引或编辑器都会把模型推进页面文件,速度断崖式下跌。 Bonsai 权重仅 5.53 GiB,留出大量余量,因此不受此影响。

真实会话中的速度衰减

从一次真实的 agentic 编码会话(Qwen3.8 在 DSH 里跑了约 40 分钟、上下文累积到 3.4 万 token)的服务端日志:

上下文规模 生成速度
会话初期(约 6k prompt) 5.15 tok/s
中期(734 token 连续生成) 4.80 tok/s
后期(3.4 万 token 上下文) 3.08~3.15 tok/s

即长会话下还会再降约 40%。对照 Qwen3.6 服务端日志(32768 上下文): eval time = 33930 ms / 835 tokens = 24.58 tok/s,全程稳定在 24~25 tok/s,几乎不随上下文衰减。

首字延迟(交互手感)

模型 write-fn debug structured
Qwen3.6-35B-A3B 1.8 s 1.4 s 0.8 s
Bonsai 2 27B 1.0 s 1.6 s 1.0 s
Qwen3.8-27B 7.3 s 7.2 s 6.6 s

Qwen3.8 的 7 秒首字延迟意味着:每次提问都要先盯着空白等 7 秒, 而它的完整回答还要再等 45 秒到 18 分钟。作为交互式编码助手,这个手感是不可接受的。

端到端:同一个 DSH agent 任务

在 DSH 里跑同一个任务(Reply with exactly: PONG,含完整系统提示词与工具 schema):

模型 耗时
Qwen3.6-35B-A3B 39.4 s
Qwen3.8-27B 106.9 s

真实编程负载下的吞吐(三道题实测)

这是比合成 bench 更有代表性的数字------真实编码任务的提示词与输出长度,同一参数(关思考、temp 0.2):

模型 write-fn(270 tok) debug(783~834 tok) structured(50 tok) 平均吞吐
Qwen3.6-35B-A3B 12.9 s / 20.96 t/s 35.3 s / 23.62 t/s 2.9 s / 17.54 t/s ≈20.7 t/s
Bonsai 2 27B 16.6 s / 10.46 t/s 73.4 s / 10.66 t/s 5.5 s / 9.07 t/s ≈10.1 t/s
Qwen3.8-27B 44.7 s / 4.99 t/s 1082 s / 0.6 t/s 15.3 s / 3.27 t/s ≈4.1 t/s(不含崩塌样本)

读法 :一道普通的代码生成题(约 270 token 输出),Qwen3.6 用 13 秒,Bonsai 用 17 秒, Qwen3.8 用 45 秒;一旦输出变长(debug 题 800 token),差距会拉大到 35 秒 / 73 秒 / 最坏 18 分钟。输出越长,MoE 的优势越明显------这正是编码任务的特征。

上下文对比

原生窗口:三者相同

从 GGUF 头部读出,三个模型的原生上下文上限都是 262144(256K):

模型 架构 层数 原生上下文 注意力头 (Q/KV) 参数
Qwen3.6-35B-A3B qwen35moe 40 262144 16 / 2 34.66 B(专家 256,激活 8)
Ternary-Bonsai-2-27B qwen35 64 262144 24 / 4 26.90 B
Qwen3.8-27B qwen35 65 262144 24 / 4 27.32 B

真正决定可用性的是 KV cache 成本

窗口一样大,但装不装得下是另一回事。KV cache 单价(每 token 占用):

模型 KV 成本 / token 来源
Qwen3.6-35B-A3B ≈10.6 KiB llama.cpp 运行时日志实测(-lv 5)
Bonsai 2 27B ≈34 KiB 既有报告的本机对比实测(同架构,与 Qwen3.8 近似)
Qwen3.8-27B ≈34 KiB 同上

按该单价推算(仅 KV,不含计算缓冲与 RS buffer):

模型 32768 65536 262144(原生满窗)
Qwen3.6-35B-A3B 340 MiB 680 MiB 2720 MiB(非权重合计 3875 MiB)✅
Bonsai 2 27B ≈1.06 GiB ≈2.13 GiB ≈8.5 GiB ❌
Qwen3.8-27B ≈1.06 GiB ≈2.13 GiB ≈8.5 GiB ❌

注:Qwen3.6 那一行是 llama.cpp 自己打印的 KV buffer 实测值,且其"非权重合计"包含 RS buffer 与计算缓冲(262144 时共 3875 MiB)------这些额外开销在稠密模型上更大, 所以稠密模型的实际占用高于上表推算的 KV 值。

Qwen3.6 便宜 3.2 倍的原因写在 llama.cpp 的日志里: 40 层里只有 10 层带 KV cache (full_attention_interval = 4),其余 30 层是线性/循环状态 (ssm.state_size = 128);而稠密 27B 是 65 层里 16 层全注意力。

实际含义:

  • Qwen3.6-35B-A3B 在本机能真正跑满 256K 上下文(非权重合计仅 3.88 GiB)。
  • Bonsai 与 Qwen3.8 在 31.55 GiB 里实际最多用到约 64K:本机实测 64K 时系统已只剩约 0.8 GiB 空闲, 再大就必然换页(这也是 Qwen3.8 出现 0.6 tok/s 崩塌的直接原因)。
  • 但要注意"装得下 ≠ 等得起":按 Qwen3.6 实测 pp 约 97~340 tok/s, 填满 256K 提示词要约 45 分钟。日常编码仍建议 32K~64K。

⚠️ 方法学提醒:unsloth/scripts/gguf_info.py 的 KV 估算对这种混合 SSM 架构高估约 7 倍 (它对 Qwen3.6 算出 80 KiB/token,而 llama.cpp 实际是 10.6 KiB/token)。 本文一律采用 llama.cpp 运行时打印的 buffer 明细,不采用该估算,也不采用"系统空闲内存"这类不可靠指标。

工程适配性(对 DSH / 编辑器而言)

项目 Qwen3.6-35B-A3B Bonsai 2 27B Qwen3.8-27B
工具调用(OpenAI function calling) ✅ 实测正常 ⚠️ 能用但有坑 ✅ 实测正常
DSH 端到端 agent 回合 ✅ 39.4 s ✅ 通过 ✅ 106.9 s
思考开关 enable_thinking=false 有效(实测思考 0 token) 有效 有效
是否需重新编译 llama.cpp 否 是(PrismML 分支,PTQ1_0 类型上游没有) 否

Bonsai 的工具调用已知缺陷 (来自 Bonsai-2-27B-部署报告.md,官方标注): 偶尔格式错误或死循环;arguments 为空会返回 400/500(必须发 "{}"); 系统消息必须只有一条且在开头。做 agent 要特别留意------本次 DSH 实测虽然通过了, 但那次只调用了一次工具。

选型建议

🥇 首选:Qwen3.6-35B-A3B ------ 日常本地编程的唯一合理主力

选它的理由按重要性排序:

  1. 速度压倒性:25.32 tok/s,是 Bonsai 的 2.25 倍、Qwen3.8 的 6.44 倍。 编码是"长输出 + 多轮工具调用"的任务,速度直接决定可用性。
  2. KV 最便宜:10.6 KiB/token,比另外两个省 3.2 倍,是本机唯一能真正用上 256K 上下文的模型。
  3. 跑分最高 :SWE-bench Verified 73.4,三个模型里第一,且有 Terminal-Bench 2.0(51.5) 这种终端/agent 场景的跑分------这正是本地编码助手的实际使用形态。
  4. 工具调用可靠:DSH 端到端实测通过,且是官方定位的 agentic coding 模型。
  5. 速度不随上下文衰减:实测在 32K 上下文下仍稳定 24~25 tok/s; Qwen3.8 在 3.4 万 token 时会掉到 3.1 tok/s。

它的唯一代价 :权重 15.45 GiB,加载后系统只剩约 0.7 GiB 空闲, 跑之前要关掉浏览器;且一次只能驻留它一个。

🥈 次选:Bonsai 2 27B ------ 需要常驻、需要视觉、或内存紧张时的选择

它的优势是另外两个都没有的:

  1. 只占 5.53 GiB (1/3 体积),留出 20+ GiB 内存余量, 可以长期常驻而不影响你正常开浏览器、开编辑器------这是它最大的实用价值。
  2. 加载只要约 10~15 秒(Qwen3.6 要 46~65 秒),随用随起。
  3. 支持图像输入 (可选加载 mmproj,0.59 GiB),是三者中唯一能读图的在跑模型 (Qwen3.8 虽原生支持视觉,但本机权重与速度都不实用)。
  4. 编码跑分与 Qwen3.8 几乎持平(厂商口径 81.58 vs 82.17)。

但要清楚它的两个短板:

  • 工具调用有官方承认的缺陷,做多轮 agent 有风险。
  • 本次实测发现它会自信地给出错误解释 + 虚假权威引用 (见 2.2 节)。 它写的代码能用,但它的讲解不能全信------把它当"能干的哑巴"用,别当"能讲解的老师"。

❌ 不推荐用于交互式编程:Qwen3.8-27B

不是因为它笨------它在本次调试题上的解释质量其实是三者中最好的, SWE-bench Verified 72.4 也与另两个持平。问题纯粹在工程可用性:

致命问题 实测数据
生成太慢 3.93 tok/s(且方差 ±3.36)
首字太慢 6.6~7.3 s,每次提问都要干等
内存压力下崩塌 单题耗时 1082 s、吞吐掉到 0.6 tok/s
长上下文衰减 3.4 万 token 时降到 3.08 tok/s
端到端最慢 同一 DSH 任务 106.9 s(Qwen3.6 只要 39.4 s)

什么时候还值得用它:如果某天你把它换到 8K~16K 小上下文、且不打算同时开别的程序, 它的解释质量确实最好;但对"本地编程助手"这个用途,速度劣势无法接受。

一句话流程建议

less 复制代码
日常编程          -> chat-q36.cmd      (Qwen3.6-35B-A3B @8081, 32K)   ← 默认选这个
要读图/要常驻      -> chat-bonsai.cmd   (Bonsai 2 27B @8082, 64K)
需要极高质量解释   -> chat-27b.cmd      (Qwen3.8-27B @8080) ------ 但请先关掉所有浏览器

三者一次只能跑一个(31.55 GiB 内存限制),启动脚本自带互斥守卫,会拒绝加载第二份权重。

复现方法

想复现什么 命令
同参数速度对比 llama-bench -m <gguf> -ngl 99 -p 512,4096 -n 128 -r 3 -ctk q8_0 -ctv q8_0 -fa on -o md
编程能力对比(同题同参数) D:\AI_Tools\unsloth\run.cmd scripts\compare_coding.py <port> <label>
对生成代码执行判分 D:\AI_Tools\unsloth\run.cmd scripts\grade_coding.py
GGUF 架构与原生上下文 D:\AI_Tools\unsloth\run.cmd scripts\gguf_info.py <gguf>

本次产出的原始答卷:D:\AI_Tools\coding-compare\{qwen36-35b-a3b,bonsai-2-27b,qwen38-27b}.json (含每题正文、token 数、首字延迟、耗时、吞吐,可直接复核判分)。

附:数据来源与可信度分级

数据 来源 可信度
速度(pp/tg)、首字延迟、耗时、内存结论 本次 llama-bench + 服务端日志 + 本机实测 实测
生成代码的判分(14/14、5/5) 本机执行模型生成的代码 实测(可复现)
Qwen3.6-35B-A3B SWE-bench 73.4 等 官方模型卡,见既有部署报告 官方
Qwen3.8-27B SWE-bench 72.4、LiveCodeBench 80.7 hub.baai.ac.cn 官方(转述)
Bonsai 2 27B 各分项与 98.2% 保留率 prismml.com 厂商自评
Bonsai ≈71.9 的 SWE-bench 本文由 72.4 × 0.993 推算 推算,非实测
工具调用缺陷 Bonsai-2-27B-部署报告.md(官方标注) 官方
相关推荐
IllegalCreed2 小时前
让文档不烂——Agent 时代的文档生命周期(四)
ai编程
qinglongcn2 小时前
Agent 可靠性的数学——为什么编程是第一个跑通的赛道
agent·ai编程
Skylar__2 小时前
从 Beam 到 Muse:一个开发者视角的 AI 模型选型决策地图
llm
IllegalCreed2 小时前
Agent 不是失忆,是找不到入口——大型项目文档分层设计(一)
ai编程
IllegalCreed2 小时前
让每份文档都有唯一的位置——文档寻址设计(三)
ai编程
blackappleD2 小时前
Claude Max 每月送 100 美元 API 额度:哪些能用、哪些不能用
ai编程
万联WANFLOW2 小时前
LLM 调用很快,AI Agent 为什么还是慢?关键路径分析与优化方法
性能优化·llm·aigc
柯南46682 小时前
【AI工程师精讲】10:微调方案选型:全参微调、LoRA、QLoRA 到底怎么选
人工智能·ai编程
方方洛2 小时前
ai-agent教程-07-从零实现一个工程化AI-Agent
人工智能·llm·agent