<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[本地4卡 deepseek折腾日记 新人发帖]]></title><description><![CDATA[<p dir="auto"><strong>26 万 token 长提示 Prefill 约 2.57K tok/s，已经拿来做真实项目。四路也试了，最后还是先回到单路。</strong></p>
<p dir="auto">最近这段时间一直在折腾本地大模型，现在主力基本定在 DeepSeek-V4.1-Flash-1017 了。</p>
<p dir="auto">我是做网络安全的，日常主要让 Agent 写脚本、读项目、做代码审计和逆向分析。对我来说，模型能不能把一个长任务做下去，比聊两句话时吐字有多快更重要。</p>
<p dir="auto">这套机器也不是一步到位买齐的。一路换主板、加卡、折腾 PCIe switch、驱动、P2P，再到引擎和监控，前前后后踩了不少坑。现在终于到了一个我愿意每天拿它干活的状态，整理出来给大家参考。</p>
<p dir="auto">先放一张刚才真实任务的截图。</p>
<p dir="auto"><img src="https://upload.lcz.me/uploads/21c3b91e-0ea6-4b4f-8001-1c5916bd35c9.jpeg" alt="真实任务中读入长上下文的 Strata 监控" class="img-markdown  img-fluid" /></p>
<p dir="auto"><em>图 1：2026 年 10 月 28 日的真实 Agent 任务。顶部当前 Prefill 为 2,341 tok/s；下方还有一条 261,585 tokens、复用为 0 的已完成请求，Prefill 为 2,571 tok/s。顶部 71.9 tok/s 是上一条请求的 Decode，不能和当前 Prefill 拼成同一条请求的成绩。</em></p>
<h2>先交代硬件和模型</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>项目</th>
<th>我的配置</th>
</tr>
</thead>
<tbody>
<tr>
<td>CPU</td>
<td>双路 AMD EPYC 7K62，共 96 核 192 线程</td>
</tr>
<tr>
<td>主板</td>
<td>GIGABYTE MZ72-HB0</td>
</tr>
<tr>
<td>内存</td>
<td>256 GB，系统可见约 251.7 GiB</td>
</tr>
<tr>
<td>显卡</td>
<td>两张 RTX 4080 32G，加两张 RTX 4080 SUPER 32G，都是改显存卡</td>
</tr>
<tr>
<td>总显存</td>
<td>128 GiB</td>
</tr>
<tr>
<td>多卡连接</td>
<td>PCIe switch；目前四张卡的设备链路均显示 PCIe 4.0 ×16</td>
</tr>
<tr>
<td>系统</td>
<td>Ubuntu 24.04.4 LTS</td>
</tr>
<tr>
<td>主模型</td>
<td>DeepSeek-V4.1-Flash-1017，ISTA-DASLab GSQ-RCO IQ2_XS</td>
</tr>
<tr>
<td>配套文件</td>
<td>Engram IQ4_NL、DSpark Q8_0，另加视觉权重</td>
</tr>
<tr>
<td>引擎</td>
<td>Strata 本地修改版，选择性合入 Maya 和后续 Strata 的改进</td>
</tr>
<tr>
<td>客户端</td>
<td>主要是 DeepSeek Harness，也通过兼容 API 接其他 Agent</td>
</tr>
<tr>
<td>当前运行方式</td>
<td>四卡共同跑一个模型，单路服务，配置上下文上限 1,048,576</td>
</tr>
</tbody>
</table>
<p dir="auto">这里的单路是指同时处理一条生成请求，四张卡都参与模型运行。它不是只开一张显卡。</p>
<p dir="auto"><img src="https://upload.lcz.me/uploads/49777560-2ad0-4ab0-80cf-5e6c21807db0.jpeg" alt="四张 32G 显卡的监控" class="img-markdown  img-fluid" /></p>
<p dir="auto"><em>图 2：写帖时截取的四卡监控，每卡显存约 31.2 GiB。截图处于 Decode 阶段，所以功率明显低于前一张长提示读入时；两张图不是同一时刻。设备显示 ×16 也不代表四张卡各自独占一条通向 CPU 的 ×16 上联。</em></p>
<p dir="auto">另外，<strong>IQ2_XS 不等于整套文件都是 2 bit，更不等于所有权重都在显存里。</strong> 我的下载记录大致是：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>文件组成</th>
<th style="text-align:right">大小，十进制 GB</th>
</tr>
</thead>
<tbody>
<tr>
<td>四个 IQ2_XS 主权重分片</td>
<td style="text-align:right">155.23 GB</td>
</tr>
<tr>
<td>Engram IQ4_NL</td>
<td style="text-align:right">110.60 GB</td>
</tr>
<tr>
<td>DSpark Q8_0</td>
<td style="text-align:right">7.98 GB</td>
</tr>
<tr>
<td>文本模型及配套文件合计</td>
<td style="text-align:right">约 273.8 GB，不含后来增加的视觉文件</td>
</tr>
</tbody>
</table>
<p dir="auto">所以这套方案要一起用显存、主机内存和 SSD。GPU 放一部分专家及计算所需的数据，主机内存承担显存外专家等工作，Engram 有 SSD 文件及缓存路径。并不是把 273GB 文件全部搬进 128GB 显存。</p>
<h2>现在真实干活是什么速度</h2>
<p dir="auto">上面那张图里，最有参考价值的是这条已完成请求：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>指标</th>
<th style="text-align:right">真实任务记录</th>
</tr>
</thead>
<tbody>
<tr>
<td>输入</td>
<td style="text-align:right">261,585 tokens</td>
</tr>
<tr>
<td>输入复用</td>
<td style="text-align:right">0</td>
</tr>
<tr>
<td>Prefill</td>
<td style="text-align:right">2,571 tok/s</td>
</tr>
<tr>
<td>输出</td>
<td style="text-align:right">1,797 tokens</td>
</tr>
<tr>
<td>Decode</td>
<td style="text-align:right">46.7 tok/s，监控的请求计时口径</td>
</tr>
<tr>
<td>首 token</td>
<td style="text-align:right">约 101.9 秒，自建监控记录</td>
</tr>
<tr>
<td>总耗时</td>
<td style="text-align:right">约 140.3 秒</td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>26 万 token 全量重读，首 token 还是要等一分多钟。</strong> 但读完之后，这条请求的生成速度是能正常工作的水平。相比只看一句话测试，我更关心这种情况，因为 Agent 做长项目时确实会碰到。</p>
<p dir="auto">写帖期间，我又截了一张自己的监控：</p>
<p dir="auto"><img src="https://upload.lcz.me/uploads/38ff2ad3-6b7e-473e-8e69-d2bd44c90477.jpeg" alt="单路推理和两种草稿来源的实时监控" class="img-markdown  img-fluid" /></p>
<p dir="auto"><em>图 3：当前生成的采样速度约 45 tok/s；最近完成请求的 Prefill 约 2,566 tok/s、首 token 约 104 秒。面板明确分开了实时 Decode、最近请求 Prefill 和累计草稿统计。</em></p>
<p dir="auto">日常不同请求的速度会有波动。小输出偶尔显示七十多，我也见过更高的短时读数，但不拿它们当整段长回复的稳定成绩。对眼前这些长任务，写成 <strong>Decode 四五十 tok/s、长输入 Prefill 两千多 tok/s 的实测例子</strong>，比较接近实际体感。</p>
<p dir="auto">我现在把上下文上限设成了 1M。这次展示的真实任务在 26～27 万 token 左右，不能拿这张图推成“满 1M 也有完全一样的速度”。</p>
<h2>主要折腾了哪些地方</h2>
<p dir="auto">先说清楚：这套已经有不少本地改动，不能把成绩直接算到一个官方版本头上。很多适配、排查和验证由 Codex 协助完成，四路实验也合入了 Opus 帮忙做的改动。核心技术和实现仍然来自开源项目的作者们。</p>
<p dir="auto">目前比较重要的几块是这些。</p>
<p dir="auto"><strong>专家驻留与 Prefill 搬运。</strong> 结合主机内存、NUMA 分布和 GPU 工作区，减少不必要的 CPU 暂存复制，调整长提示词读入时的专家传输路径。后来又合入了 Maya 的专家上传修复和锁页直传思路，以及 Strata 0.2.7 的部分 Prefill 优化。对我这台双路机器，这部分值得花时间。</p>
<p dir="auto"><strong>动态 BAR1、VMM 和 P2P。</strong> 四张改显存卡之间的通信也单独折腾过，包括驱动补丁和引擎传输路径。中间最大的教训是：驱动显示支持 P2P，不代表当前模型引擎真的在走 P2P；把传输接上了，也不代表总速度就会翻倍。计算、专家驻留、CPU 工作和草稿接受情况仍然会影响速度。</p>
<p dir="auto"><strong>GPU 解锁相关补丁。</strong> 我也适配过 gpu-unlock-ada，并保留与动态 BAR1/P2P 的兼容。不过几次历史对比还伴随引擎、缓存和参数变化，没法把最终速度提升全部归功于“解锁”。这部分算折腾记录，不写一个没有单独测出来的加速百分比。</p>
<p dir="auto"><strong>DSpark 加提示词查找草稿。</strong> 除了 DSpark，还加了 lookup：从当前对话已经出现过的 token 片段里找可能的后续内容，再交给主模型验证。代码里重复结构多，确实有发挥空间。现在监控把两者分开，图 3 中 lookup 接受率约 77%，DSpark 约 71%，但 lookup 接受的 token 只占累计输出约 1.7%。接受率高，不代表整个任务就快了相同的百分比。</p>
<p dir="auto"><strong>会话持久化、分层去审查和思考区防复读。</strong> 这些都是为实际 Agent 工作补的。保留对话状态，减少不必要的重算；思考区检测重复短句和长段落，避免一直烧 token。去审查也是我的使用需求，但这部分改动同样要观察对推理行为的影响。</p>
<p dir="auto"><strong>视觉工作区复用。</strong> 后来把 Maya 的视觉显存借还机制也接进来了。图片编码期间借用已有的 Prefill 工作区，用完交还；文字阶段不用额外长期占一块独立视觉工作区。它仍然需要视觉权重和图片处理计算，并不是“视觉零成本”。本地已经试过 OCR、形状颜色识别、多图和图片后继续文字对话。</p>
<p dir="auto">完整的 <strong>6 个路由专家计算</strong>保留，没有靠跳过专家来换这里的速度。</p>
<h2>四路并发也测了 最后先退回单路</h2>
<p dir="auto">这段是最新踩坑，写出来可能比只贴最高速度更有用。</p>
<p dir="auto">我们把 Maya 风格的 <code>--parallel 4</code> 合进了独立版本，也补了每路监控。四路能同时生成，测试的 8 个请求都正常完成，但实际效果和我想要的有差距。</p>
<p dir="auto">条件是四个独立请求同时发起，分别测试每路约 8K 和 32K 输入，<code>max</code> 思考、<code>temperature=1.0</code>、<code>top_p=1.0</code>，每路输出上限 1024 tokens，无前缀缓存命中。</p>
<p dir="auto"><img src="https://upload.lcz.me/uploads/040d6d94-d21d-41da-9c89-af12e2e7605f.jpeg" alt="四路并发实测图" class="img-markdown  img-fluid" /></p>
<p dir="auto"><em>图 4：每路速度来自四路共同生成时间窗口内的实际 token 增量，合计为四路之和。图是测试数据绘制的统计图，不是监控截图。输出计数包含思考 token。</em></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>每路输入</th>
<th style="text-align:right">每路 Decode</th>
<th style="text-align:right">四路合计 Decode</th>
<th style="text-align:right">首 token 等待</th>
</tr>
</thead>
<tbody>
<tr>
<td>约 8K</td>
<td style="text-align:right">约 16.3 tok/s</td>
<td style="text-align:right">65.3 tok/s</td>
<td style="text-align:right">13.6～33.7 秒</td>
</tr>
<tr>
<td>约 32K</td>
<td style="text-align:right">约 14.3 tok/s</td>
<td style="text-align:right">57.4 tok/s</td>
<td style="text-align:right">19.3～59.0 秒</td>
</tr>
</tbody>
</table>
<p dir="auto">更影响体感的是新请求进来时的停顿。8K 那组，第一路出了首 token 后，其他三路还没出首 token 的一段时间里，它也停了约 19.5 秒；32K 那组对应约 39 秒。全部进入 Decode 后，四路才比较均匀地一起生成。</p>
<p dir="auto">单路版本此前同一组 8K/32K 测试分别记录过约 50.2、45.7 tok/s。不过当时是 <code>high</code>、温度 0、每路 512 输出，这次四路是 <code>max</code>、温度 1、1024 输出，所以不把两组数字硬算成严格的性能损失比例。</p>
<p dir="auto">我的实际选择是：<strong>先切回四路改动前的单路版本，保留四路版继续研究。</strong> 我更需要一个主 Agent 顺畅地完成长任务，暂时接受排队，也不想让正在干活的主会话经常等其他请求读入。</p>
<p dir="auto">这只是当前本地实现和这台机器的结果，不是说 DeepSeek 永远做不好并发。</p>
<h2>缓存比我最开始想的更重要</h2>
<p dir="auto">刚开始只盯 Decode，后来发现，Agent 干活很多时候是同一个会话来回调用，旧上下文一次次带回来。能不能接上之前的状态，直接影响下一轮要等多久。</p>
<p dir="auto"><img src="https://upload.lcz.me/uploads/db579a40-7d21-4cb1-b016-5e2750d7461c.jpeg" alt="当天 DeepSeek token 与输入复用统计" class="img-markdown  img-fluid" /></p>
<p dir="auto"><em>图 5：选中 2026 年 10 月 28 日、DeepSeek 分类的监控记录。截图时共记录 736 个完成请求，输入约 247.59M、复用约 241.62M、输出约 631.8K，输入复用率约 97.6%。这是该时间范围的累计，不能理解为单个会话有 2.47 亿上下文。</em></p>
<p dir="auto">这里的复用是本地请求前缀或会话状态的复用，不是“别人问过相同问题，所以答案直接拿来用”。高命中主要意味着少算很多重复输入，已经存在的上下文仍然是模型上下文的一部分。</p>
<p dir="auto">有意思的是，高缓存命中和刚才那条 26 万 token 全量重读可以同时发生。整体命中率看起来很好，并不代表每一条请求都能命中。会话切换、状态没有接上，仍然可能让首 token 等待突然变长。</p>
<p dir="auto">现在我的自建监控会分开看实时 Decode、每条请求的 Prefill、首 token、lookup、DSpark、输入复用和硬件占用。只看一个大号 tok/s 数字，很容易看错。</p>
<h2>还有几个不太光鲜的坑</h2>
<p dir="auto"><strong>开满显存不等于速度最大。</strong> 专家要占显存，Prefill 工作区、KV、临时缓冲也要占。把预留挤得很小，有时能多塞专家，也可能让工作区更紧张。我现在每卡预留 512 MiB，是这套本地版的配置记录，不是所有四卡机器都适合照抄。</p>
<p dir="auto"><strong>写了 TP 参数不等于真的在张量并行。</strong> 我的 IQ2_XS 配置里曾经保留 <code>--tp 2</code>，但受量化分块限制，实际回落成按层分卡。专门适配的 TP=2/4 也试过，最终没留下来。当前这篇的单路成绩不能算成 TP=4 成绩。</p>
<p dir="auto"><strong>max 思考确实碰到过复读。</strong> 从重复 “I'll” 到反复规划同一件事，都遇到过。去审查方案、采样参数、客户端传参和引擎路径都排查过。我用官方服务时也见过类似情况，所以现在不会把所有复读都归因于量化或者某一个向量。分层编辑和防复读是当前的处理办法，仍然要看实际长任务表现。</p>
<p dir="auto"><strong>新补丁不一定带来净收益。</strong> 有的方案数值验证没有过，就没有留下；有的 Prefill 快一点，但专家缓存少了，Decode 又慢一点。后来每次改动都会留独立版本、保存测速记录，当前版和上一版留着回退。</p>
<p dir="auto">这套配置包含本地驱动和引擎适配，完整补丁还需要整理。下面的参数只是当前核心配置摘要，不是一个官方版复制过去就能复现全部功能的安装教程：</p>
<pre><code class="language-text">--max-context 1048576
--reserve-mib 512
--experts 6
--dspark auto
--dspark-conf 0.65
--suffix-draft 3
</code></pre>
<h2>为什么我最后把它留作主力</h2>
<p dir="auto">真正让我决定留下 DeepSeek 的，是一次复杂 App 逆向任务。同样的任务和提示词，它把关键解密过程继续追了下去，拿到了后续分析需要的信息。那次结果对我工作有实际帮助，比我再看十张跑分表更有说服力。</p>
<p dir="auto">这当然不能推出 IQ2_XS 等于 BF16，也不能推出它能包办所有项目。它仍会走弯路、会复读，需要人审结果。但在我自己的任务里，它已经能承担相当一部分工作。</p>
<p dir="auto">所以现在的目标很实际：把这套单路继续用稳，保住长上下文缓存，再慢慢解决并发时 Prefill 对其他请求的影响。以后是否继续加卡，也要看这些真实任务能快多少，而不只是显存总数更好看。</p>
<p dir="auto">折腾到现在，最满意的就是：家里这四张消费卡，确实跑起了一个我愿意每天交任务给它的 DeepSeek。</p>
<p dir="auto">如果有同样用双路 EPYC、四卡或者 PCIe switch 跑 DeepSeek 的朋友，欢迎交流长提示 Prefill、会话复用和并发调度的实测。</p>
<h2>项目和参考</h2>
<ul>
<li>推理引擎：<a href="https://github.com/Niko1221/Strata" rel="nofollow ugc">Strata</a>、<a href="https://github.com/mw00/project-maya" rel="nofollow ugc">Project Maya</a>。</li>
<li>主权重：<a href="https://huggingface.co/ISTA-DASLab/DeepSeek-V4.1-Flash-1017-GSQ-RCO-GGUF" rel="nofollow ugc">ISTA-DASLab DeepSeek-V4.1-Flash-1017 GSQ-RCO GGUF</a>；配套文件：<a href="https://huggingface.co/unsloth/DeepSeek-V4.1-Flash-1017-GGUF" rel="nofollow ugc">Unsloth GGUF 仓库</a>。</li>
<li>本地适配参考了 Maya 的 <a href="https://github.com/mw00/project-maya/pull/520" rel="nofollow ugc">#520 专家上传路径</a>、<a href="https://github.com/mw00/project-maya/pull/533" rel="nofollow ugc">#533 NUMA 上传修复</a>、<a href="https://github.com/mw00/project-maya/pull/540" rel="nofollow ugc">#540 lookup 草稿</a> 和 <a href="https://github.com/mw00/project-maya/pull/543" rel="nofollow ugc">#543 lookup 补充</a>。</li>
<li>驱动方向也参考了 <a href="https://github.com/JustAResearcher/gpu-unlock-ada" rel="nofollow ugc">gpu-unlock-ada</a>。</li>
<li>社区交流中参考过 <a href="https://lcz.me/topic/2016/10">7900 XTX 的 Strata 调优记录</a>、<a href="https://lcz.me/topic/2048/5">消费级双卡的配置实测</a> 和 <a href="https://lcz.me/topic/2099/11">DGX Spark 集群折腾记录</a>。本文的硬件和性能数字均来自我自己的机器及记录，没有借用其他人的跑分。</li>
</ul>
<p dir="auto"><em>记录日期：2026 年 10 月 28 日。</em></p>
]]></description><link>https://lcz.me/topic/2668</link><generator>RSS for Node</generator><lastBuildDate>Mon, 09 Nov 2026 13:57:27 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/2668.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Oct 2026 16:00:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 本地4卡 deepseek折腾日记 新人发帖 on Thu, 29 Oct 2026 09:24:34 GMT]]></title><description><![CDATA[<p dir="auto">话题太高端，有点插不上话</p>
]]></description><link>https://lcz.me/post/29083</link><guid isPermaLink="true">https://lcz.me/post/29083</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Thu, 29 Oct 2026 09:24:34 GMT</pubDate></item><item><title><![CDATA[Reply to 本地4卡 deepseek折腾日记 新人发帖 on Thu, 29 Oct 2026 09:24:05 GMT]]></title><description><![CDATA[<p dir="auto"><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=5be5614064c" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 版主审定：本帖设为<strong>优秀</strong>，作者 <strong>+3 积分</strong>奖励，继续加油！</p>
<blockquote>
<p dir="auto">奖励凭证：优秀 +3 分 · 编号 e2668-155-1</p>
</blockquote>
]]></description><link>https://lcz.me/post/29081</link><guid isPermaLink="true">https://lcz.me/post/29081</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Thu, 29 Oct 2026 09:24:05 GMT</pubDate></item><item><title><![CDATA[Reply to 本地4卡 deepseek折腾日记 新人发帖 on Wed, 28 Oct 2026 16:24:49 GMT]]></title><description><![CDATA[<p dir="auto">這2天幫賣朋友遠端架AI模型測試平台，記憶體2tb 還在想要測試什麼模型<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/1f605.png?v=5be5614064c" class="not-responsive emoji emoji-android emoji--sweat_smile" style="height:1.4em;width:auto;vertical-align:middle" title="😅" alt="😅" />，先切450gb做網路磁碟機，剩下要試試看Kimi K3 Q4<br />
<img src="https://upload.lcz.me/uploads/45b3b3ad-ca19-437e-82c4-f0caaa5cef3e.jpeg" alt="Messenger_creation_5205DF49-6A68-4FA4-AE73-24790D441CE1.jpeg" class="img-markdown  img-fluid" /><br />
<img src="https://upload.lcz.me/uploads/8c099e96-2935-4a6a-a84e-03fc6bbb53b1.jpg" alt="Screenshot_2026-10-29-00-22-09-59_e2d5b3f32b79de1d45acd1fad96fbb0f.jpg" class="img-markdown  img-fluid" /></p>
]]></description><link>https://lcz.me/post/28857</link><guid isPermaLink="true">https://lcz.me/post/28857</guid><dc:creator><![CDATA[許傑]]></dc:creator><pubDate>Wed, 28 Oct 2026 16:24:49 GMT</pubDate></item></channel></rss>