单卡 RTX 5080 16G + 锐龙 3950X + 64G 内存:用 DeepSeek Harness 驱动 Qwen3.8-Flash-Next 的账本与踩坑
-
单卡 16G 运行 125B 级 MoE:本地实测记录
在 16G 单卡上折腾了一天,终于第一次让本地模型跑起来。
配置概览
项目 配置 GPU RTX 5080 16G,单卡承担全部计算 CPU Ryzen 9 3950X,16 核 32 线程,支持 AVX2、无 AVX-512 内存 63.9 GiB DDR4 存储与虚拟内存 NVMe;132 GiB 页面文件 模型 Qwen3.8-Flash-Next GSQ-RCO IQ3_XXS,ISTA 官方非均匀量化;75.8G(47.04G 权重片 + 28.80G PLE 查表片) 推理引擎 Strata v0.1.38 客户端 DeepSeek Harness(dsh)桌面版;网关 127.0.0.1:19387→ 模型端点127.0.0.1:8080/v1实测体感
- 生成速度:30–44 t/s;MTP 草稿接受率 93%–98%
- Prompt 读取速度:330–960 t/s
- 上下文:131072
- 工具调用:
write、pwsh可用 - 自动压缩:正常
一、先看账本:每 1 GB 去了哪里
显存(16303 MiB)
- 专家缓存:4.80 GiB / 2935 槽
pack dense.bin:1.54 GiB- 原生 Q5_K head:437 MB
- MTP 草稿头:835 MiB(+178.4)
- KV:
--kv-resident 32768;其余 1.55 GiB 放在锁页内存 - 剩余:4097 MiB
同机对比 RVN IQ3_S(88.9G):专家缓存 7.41 GiB / 3414 槽,只剩 401 MiB,因此已增加
--vram-reserve-mib 1024。内存(63.9 GiB)
- 专家:39.97 GiB,载入速度 4.82 GiB/s
- KV 流式部分:1.55 GiB
- PLE 表:28.80 GiB,保留在 NVMe 并按行 unbuffered 读取
- 页面文件:132 GiB;提交上限 192.8 GiB,可用 93.2 GiB。这不是“页面文件太小”的问题
CPU(16 个物理核)
日志显示:15 个
expert-poolworker + 1 个宿主线程;SMT 闲置。引擎提示该 CPU 没有 AVX-512,专家内核使用 AVX2。启动与传输
- 冷启动载入 39.97 GiB,速度 4.82 GiB/s
- PCIe host → device:7.2 GB/s
- Prompt 分块:
auto: 6144
二、它是怎么塞进一台单卡桌面机的
模型有 48 层、每层 512 个专家,每个 token 只激活 10 个专家;3 层线性注意力与 1 层全注意力交替。稀疏激活是基础,之后靠以下机制把模型放进桌面机:
- 四级瀑布:VRAM 放必经路径和热专家;RAM 全量 pin,未命中的专家由 CPU 就地计算,并与 GPU 并行;NVMe 只放 PLE 查表。
- 单卡缓存有限:没有层切分可用,专家缓存只有 4.8 GiB。双 3090 每卡约 17 GiB,是它的 3.5 倍。
- KV streaming:显存只保留最近 32768 个 cell 的 KV,其余放进锁页内存,把显存让给专家缓存。
- 自适应缓存:本机实测命中率 34.8%–63.2%;命中后可免去 CPU 计算。
- MTP 提速:日志记录
drafts accepted 26230 of 26738(98.1%),这是 30–51 t/s 生成速度的直接来源。
主要瓶颈是 CPU 专家计算(没有 AVX-512)和单卡显存容量。
三、搭建路径(本机可复现)
硬件建议
- 单卡 16G 可用;官方实测显示,慢卡(如 2080 Ti)反而可能拖慢整体速度
- 16 核以上 CPU
- 64G 内存(IQ3_XXS 官方档)
- NVMe
- 页面文件设为“系统管理”
软件配置
运行安装脚本
python setup.py --setup --yes --family qwen --model IQ3_XXS --context 131072 --kv int8 --vision no --gpu 1 --no-startMSYS 下
cmd //c START-HERE.bat会失效,直接调用 Python。加载模型分片
两片可以直接交给引擎,无需 merge:
--native <shard1> + --ple-gguf <shard2>RVN 这类把同层专家拆到 8 片中的模型才必须先 merge。
打包
iq_pack.py结果:1079 个张量,其中 302 个原生张量。conversions.json中tensors: [],即零反量化。dsh 接线
在
~/.dsh/profiles/desktop/cordis.patch.yml中配置:- provider:
llama baseURL:8080/v1defaultMaxTokens:32768- 模型条目:
qwen3.8-flash-next-iq3_xxs contextWindow:131072input:[text]agent-default-model指向该模型
关键参数
--kv int8 --kv-resident 32768 --spec 4 --spec-min-p 0.5 --mtp reasoning_budget_tokens: 8192 fit_max_tokens: true --vram-reserve-mib 1024 # 低显存配置四、踩坑速查
现象 原因与处理 达到输出 token 上限,答案空白 思考过程耗尽输出预算。引擎日志原文: reached max tokens while still thinking, so it has no answer。设置reasoning_budget_tokens: 8192。会话超过窗口后,客户端把 max_tokens压到 1会话记录出现 in=34547 out=1 stop=length,以及400 prompt (264281 tokens) + max tokens (1) exceeds the context (131072)。必须正确填写contextWindow;已经超限的会话无法恢复,只能新建。fit_max_tokens: true仍然报错它只是兜底,剩余空间为 0 时仍会拒绝请求。 低显存配置只剩几百 MiB 增加 --vram-reserve-mib 1024;401 MiB 属于需要预留的情况。Agent 发图后卡住 纯文本模型必须设置 input: [text]。长会话越来越慢 客户端每轮全量重发上下文。60K 上下文一轮需要读 6–54 秒,缓存命中率会降到 35%;长会话建议主动新建。 自动压缩默认配置
自动压缩默认开启:
thresholdRatio 0.8、retainRatio 0.16,工具结果裁剪到 8192 字符。触发点约为窗口的 80%(约 104.9K);本机在 60K 时已经裁剪过 3 次。五、总评
16G 显存主要用于热数据:专家缓存 4.8 GiB、pack 数据 1.54 GiB、MTP 草稿头 835 MiB。64G 内存承担约 40 GiB 专家数据,16 核 CPU 作为第二算力池,15 个 worker 全部投入工作。
这套配置的限制也很明确:没有 AVX-512,少一档内核速度;单卡专家缓存只有 4.8 GiB,约为双卡配置的三分之一;IQ3_XXS 在 64G 内存下官方建议上下文不超过 128K;2080 Ti 作为慢卡帮不上忙。
整体上,这套方案把“单卡 16G + 老平台”变成一台能运行 125B 级 MoE、支持工具调用和 131K 上下文的本地小服务器。dsh 侧需要正确配置
contextWindow、input和思考预算,Agent 循环才能稳定。若要继续提速,优先增加显存和内存。 -