<?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[Ryzen 9 3900X + 7900 XTX 24G + 128G DDR4：Strata 跑 Qwen3.8-Flash-Next 无审查版，预填充 900-1330 / 解码 67.8 tok/s / 128K 实测]]></title><description><![CDATA[<h2>AMD RX 7900 XTX 部署 Strata / Qwen3.8-Flash-Next IQ3_S 实测记录</h2>
<h2>1. 硬件与前提</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>项</th>
<th>值</th>
<th>是否影响本文结论</th>
</tr>
</thead>
<tbody>
<tr>
<td>GPU</td>
<td>AMD RX 7900 XTX 24G（Navi31 / gfx1100）</td>
<td>是，必须是 gfx1100</td>
</tr>
<tr>
<td>CPU</td>
<td>Ryzen 9 3900X（12C/24T，全大核）</td>
<td>影响解码速度，见 §6</td>
</tr>
<tr>
<td>内存</td>
<td>128GB DDR4-3200（双通道，实测 50.7 GB/s）</td>
<td>必须 ≥ 96GB</td>
</tr>
<tr>
<td>系统盘</td>
<td>2TB NVMe</td>
<td>模型 78GB + pack 1.5GB</td>
</tr>
<tr>
<td>操作系统</td>
<td>Ubuntu 24.04</td>
<td></td>
</tr>
<tr>
<td>ROCm</td>
<td>7.2.4.70204（装在 /opt/rocm）</td>
<td>系统 ROCm 会被复用，不必装 TheRock wheels</td>
</tr>
<tr>
<td>引擎版本</td>
<td>Strata 6f32ec0（2026-10-04）</td>
<td></td>
</tr>
</tbody>
</table>
<p dir="auto">必须满足的三个条件：</p>
<p dir="auto">内存 ≥ 96GB。IQ3_S 官方标注需 62GB，Strata 加载时实际占 53GB 内存 + 21.9GB 显存。内存不足会退化成 SSD 读专家，首字延迟从 0.4 秒变成分钟级。<br />
已有 /opt/rocm 且含 hipcc / <a href="http://libhipblaslt.so" rel="nofollow ugc">libhipblaslt.so</a>。setup 检测到系统 ROCm 就不下 10GB 的 TheRock wheels，省 10GB 下载和 6 分钟安装。<br />
单卡独占。Strata 占 21.9/24.5GB 显存，不能与其它 GPU 服务并行。</p>
<h2>2. 七个会卡住的坑（★ 建议先读完）</h2>
<p dir="auto">这七个都是 setup / 配置层面的问题，不是编程错误。 上游 docs/AMD_HIP.md 未提及，坛内 2059 / 2079 / 2095 / 2089 四帖也未提及。</p>
<h3>坑 1 ★ 最隐蔽：--gguf-dir 指向默认路径时，setup 会自己把目录改名</h3>
<p dir="auto">症状（注意 [ok] 之后紧跟 [X]，这不是矛盾）：</p>
<pre><code class="language-text">[ok] model files from /opt/strata moved to /opt/strata/data
     (a new copy of Strata finds them there)
=== Step 5: downloading Qwen3.8-Flash-Next IQ3_S ===
  [X]  missing /opt/strata/models/Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00001-of-00002.gguf
  Setup stopped.
</code></pre>
<p dir="auto">根因：--gguf-dir /opt/strata/models 这个路径被 setup 判定为"它自己的默认目录"，于是把整个目录重命名为 data/，然后再去 models/ 找文件——自然找不到。</p>
<p dir="auto"></p><div class="plugin-markdown"><input type="checkbox" checked="true" />missing 后紧跟 Setup stopped ⇒ 是路径问题，不是网络问题。不要去查网络。</div><p></p>
<p dir="auto">修法：把 --gguf-dir 指向一个它不会动的目录，用软链接放模型：</p>
<pre><code class="language-bash">mkdir -p /opt/strata/gguf
cd /opt/strata/data/models
for N in 1 2; do
  ln -sf "Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-0000${N}-of-00002.gguf" /opt/strata/gguf/
done
ln -sf mtp-q2_0.gguf /opt/strata/gguf/
</code></pre>
<h3>坑 2 ★ 最耗时：模型文件名两边都不一致</h3>
<p dir="auto">对照：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>来源</th>
<th>文件名</th>
</tr>
</thead>
<tbody>
<tr>
<td>setup 期望</td>
<td>Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00001-of-00002.gguf</td>
</tr>
<tr>
<td>HF 实际</td>
<td>IQ3_S/Qwen3.8-Flash-Next-GSQ-RCO-abliterated-IQ3_S-00001-of-00002.gguf</td>
</tr>
</tbody>
</table>
<p dir="auto">差异两处：HF 多了 IQ3_S/ 子目录 和 abliterated 字样。</p>
<p dir="auto">根因（<a href="http://setup.py" rel="nofollow ugc">setup.py</a> 源码）：</p>
<pre><code class="language-python"># setup.py:92   写死官方原版仓库
HF = hf("ISTA-DASLab/Qwen3.8-Flash-Next-GSQ-RCO-GGUF")
# setup.py:187  文件名模板不含 abliterated、无子目录
"file": "Qwen3.8-Flash-Next-GSQ-RCO-{q}-0000{i}-of-00002.gguf"
</code></pre>
<p dir="auto">坛内推荐的 SC117/...abliterated-GGUF 仓库是扁平结构 + 带 abliterated + 有子目录，与模板不匹配。</p>
<p dir="auto">修法：下载后重命名对齐。</p>
<pre><code class="language-bash">BASE="https://huggingface.co/SC117/Qwen3.8-Flash-Next-GSQ-RCO-abliterated-GGUF/resolve/main"
cd /opt/strata/models
for N in 1 2; do
  curl -L -C - -o "Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-0000${N}-of-00002.gguf" \
    "$BASE/IQ3_S/Qwen3.8-Flash-Next-GSQ-RCO-abliterated-IQ3_S-0000${N}-of-00002.gguf"
done
</code></pre>
<p dir="auto">必须校验字节数（curl 断点续传可能造成尾部或长度偏差）：</p>
<pre><code class="language-bash">stat -c %s /opt/strata/models/Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-0000{1,2}-of-00002.gguf
# 期望：55063448064  和  28800138432
head -c 4 &lt;文件&gt; | xxd        # 必须是 47475546（"GGUF"）
</code></pre>
<p dir="auto">本机实测：55063448064 <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> / 28800138432 <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> / mtp 889017216 <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" />，三个 magic 全对。</p>
<p dir="auto">注：mtp-q2_0.gguf（889MB）setup 会自己从官方仓库拉；若已备好放在 --gguf-dir 里会被复用。</p>
<h3>坑 3：绕过 <a href="http://setup.sh" rel="nofollow ugc">setup.sh</a> 直接跑 <a href="http://setup.py" rel="nofollow ugc">setup.py</a> → PEP 668 拒绝</h3>
<p dir="auto">症状：</p>
<pre><code class="language-text">error: externally-managed-environment
× This environment is externally managed
note: See PEP 668 for more information.
</code></pre>
<p dir="auto">根因：<a href="http://setup.sh" rel="nofollow ugc">setup.sh</a> 第 37 行本来会建 venv，跳过它就没有隔离环境：</p>
<pre><code class="language-bash"># setup.sh:36-39
$PY -m venv .venv || { rm -rf .venv; echo "could not create .venv: sudo apt install python3-venv"; exit 1; }
exec .venv/bin/python setup.py "$@"
</code></pre>
<p dir="auto">修法：走 <a href="http://setup.sh" rel="nofollow ugc">setup.sh</a>，或手动补齐：</p>
<pre><code class="language-bash">sudo apt install -y python3-venv python3-full
python3 -m venv .venv
</code></pre>
<h3>坑 4：python3-venv 明明装过，apt install 却静默跳过</h3>
<p dir="auto">症状：python3 -m venv .venv 报缺模块，但 apt install python3-venv 无任何报错。</p>
<p dir="auto">诊断：</p>
<pre><code class="language-bash">dpkg -l python3-venv | tail -1
# +++==============+=============+=============+===============+
#  un  python3-venv   &lt;none&gt;   &lt;none&gt;   (no description available)
#  ^^ 状态是 un，不是 ii（installed）
</code></pre>
<p dir="auto">根因：un = unknown / not-installed。该包是手工装进系统的，不在 apt 数据库里，apt install 认为"名字已匹配"就直接跳过。</p>
<p dir="auto">通用判据：apt list --installed | grep &lt;包名&gt; 无输出 且 dpkg -l 显示 un ⇒ 就是这种状态。此时 apt install 无效，直接 python3 -m venv 试（真缺包会报错，报错再装）。</p>
<h3>坑 5：--vision cpu 需单独编译编码器，编译完成前测试会拿到错误</h3>
<p dir="auto">症状：setup 跑完，配置里已有 vision 段，但服务重启后：</p>
<pre><code class="language-json">{"architecture": {"input_modalities": ["text"]}}    // 图像没开
</code></pre>
<p dir="auto">或直接 HTTP 400 Bad Request。</p>
<p dir="auto">根因：AMD 后端没有 GPU 图像编码器（STRATA_VISION_CUDA=OFF），setup 会额外编译一个纯 CPU 的 strata-vision（7.5MB，131 个编译目标，2-3 分钟）：</p>
<pre><code class="language-text">Compiling the image encoder (for the CPU) ...
cmake --build build-vision --target strata-vision -j 12
[ok] engine: .../strata, image encoder (CPU): .../strata-vision
</code></pre>
<p dir="auto">若此时就重启服务测试，会拿到旧状态。必须等这行 [ok] 出现。</p>
<p dir="auto">关键事实：AMD 上的 GPU 图像路径不存在（<a href="http://setup.py" rel="nofollow ugc">setup.py</a> 原文）：</p>
<pre><code class="language-python">if asked in ("yes", "gpu"):
    warn("the AMD backend has no GPU image encoder yet: images off"
         + ("" if WIN else " (--vision cpu reads them on the CPU)"))
</code></pre>
<p dir="auto">即 --vision yes 和 --vision gpu 在 AMD 上都退化为"关闭图像"。要图像只能 --vision cpu。</p>
<p dir="auto">验证配置已生效：</p>
<pre><code class="language-bash">curl -s http://127.0.0.1:8090/v1/models | python3 -c "import sys,json;print(json.load(sys.stdin)['data'][0]['architecture'])"
# 期望：{'input_modalities': ['text', 'image'], ...}
</code></pre>
<p dir="auto">开销实测（比坛内普遍说的 10-30 秒快很多）：336×336 图像额外 1.9 秒，512×512 额外 3.6 秒。配置里 threads: 12（全部物理核）起了作用。</p>
<h3>坑 6：--calibrate 在 AMD 上静默跳过，且补不了 hipBLASLt tuning table</h3>
<p dir="auto">症状：加 --calibrate 后，1 秒结束，无 settings.json，配置零变化。</p>
<pre><code class="language-text">开始 09:25:05 → 结束 09:25:06   退出码 0
settings.json: 无
配置: 未变
</code></pre>
<p dir="auto">根因：对应 <a href="http://setup.py" rel="nofollow ugc">setup.py</a> 的 #566（AMD 校准功能仍在验证中）。</p>
<p dir="auto">更重要的是：它补不了 tuning table。 那张表是仓库里的静态文件（<a href="http://setup.py:1833" rel="nofollow ugc">setup.py:1833</a>）：</p>
<pre><code class="language-python">def hipblaslt_table(arch, lib_dirs, ver=None):
    """tools/hip/&lt;arch&gt;-hipblaslt-&lt;version&gt;.txt for this card AND the installed hipBLASLt, else None"""
    table = ROOT / "tools/hip" / f"{arch}-hipblaslt-{ver}.txt"
</code></pre>
<p dir="auto">现有表：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>文件</th>
<th>适用</th>
</tr>
</thead>
<tbody>
<tr>
<td>gfx1100-hipblaslt-100100.txt</td>
<td>gfx1100 + hipBLASLt 100100</td>
</tr>
<tr>
<td>gfx1100-hipblaslt-100200.txt</td>
<td>gfx1100 + hipBLASLt 100200</td>
</tr>
<tr>
<td>gfx1200-hipblaslt-100202.txt</td>
<td>RDNA4 (gfx1200/1201) + 100202</td>
</tr>
<tr>
<td>—</td>
<td>gfx1100 + 100202 无（ROCm 7.2.x 即此版本）</td>
</tr>
</tbody>
</table>
<p dir="auto">结论：gfx1100 + hipBLASLt 100202 这张表上游没有，--calibrate 也生成不出来。 这条 [!] 警告可以无视——官方确认缺表会安全回退：</p>
<blockquote>
<p dir="auto">The runtime guards architecture, library version and actual shape/stride/workspace requirements, falling back when a table entry is unavailable or incompatible.</p>
</blockquote>
<p dir="auto">只影响 dense prefill 速度，不影响正确性。</p>
<h3>坑 7：默认端口 8080 撞 llama.cpp，且默认只监听 127.0.0.1</h3>
<p dir="auto">症状一：同机跑 llama-server / Ollama 时，Strata 起不来或互相抢占。</p>
<p dir="auto">修法：用 --port 改（本机用 8090）。</p>
<p dir="auto">症状二：局域网内其它机器 curl 返回 HTTP 000，但 ping 通。</p>
<p dir="auto">根因：Strata 默认只听 127.0.0.1。</p>
<p dir="auto">修法：在 run-iq3_s.sh 里显式加 --host 0.0.0.0：</p>
<pre><code class="language-bash"># /opt/strata/run-iq3_s.sh 完整内容
#!/bin/sh
cd "/opt/strata"
exec "/opt/strata/.venv/bin/python" "/opt/strata/serve/server.py" \
  "--engine" "strata" \
  "--config" "/opt/strata/strata-iq3_s.json" \
  "--host" "0.0.0.0" \
  "--port" "8090" \
  "--open"
</code></pre>
<p dir="auto"><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--warning" style="height:1.4em;width:auto;vertical-align:middle" title="⚠" alt="⚠" />️ 加了 --host 0.0.0.0 后，局域网内任何设备都能访问这个无鉴权端点。 是否收回请自行判断网络环境。</p>
<h2>3. 完整部署步骤（可复制）</h2>
<h3>3.1 环境自检（不装任何东西，1 分钟）</h3>
<pre><code class="language-bash">cd /opt/strata        # git clone --depth 1 https://github.com/Niko1221/Strata.git .
python3 setup.py --check
</code></pre>
<p dir="auto">期望输出：</p>
<pre><code class="language-text">[ok] GPU: AMD Radeon RX 7900 series (gfx1100), 24.0 GB VRAM, gfx1100
[ok] RAM: 126 GB
[ok] CPU: AMD Ryzen 9 3900X 12-Core Processor (AVX2)
IQ3_S    needs ~62 GB RAM: fits
This PC can run Strata.
</code></pre>
<p dir="auto">若 IQ3_S ... EXPERIMENTAL 或 doesn't fit ⇒ 内存不足，换 IQ3_XXS（需 ~60GB）或 IQ2_XS（~48GB）。</p>
<h3>3.2 准备 venv（见坑 3、坑 4）</h3>
<pre><code class="language-bash">sudo apt install -y python3-venv python3-full
python3 -m venv .venv || { echo "venv 创建失败，检查 python3-venv"; exit 1; }
.venv/bin/python --version          # 期望 Python 3.12.x
</code></pre>
<h3>3.3 下载模型（见坑 2）</h3>
<p dir="auto">78 GB，本机实测 9 小时 16 分（夜间掉速；峰值 26 MB/s）。务必用 setsid 脱离 SSH 会话：</p>
<pre><code class="language-bash">mkdir -p /opt/strata/models
cd /opt/strata/models
BASE="https://huggingface.co/SC117/Qwen3.8-Flash-Next-GSQ-RCO-abliterated-GGUF/resolve/main"
setsid nohup bash -c '
  cd /opt/strata/models
  for N in 1 2; do
    curl -L --retry 8 --retry-delay 15 --retry-all-errors -C - \
      -o "Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-0000${N}-of-00002.gguf" \
      "https://huggingface.co/SC117/Qwen3.8-Flash-Next-GSQ-RCO-abliterated-GGUF/resolve/main/IQ3_S/Qwen3.8-Flash-Next-GSQ-RCO-abliterated-IQ3_S-0000${N}-of-00002.gguf"
  done
' &gt; /dev/null 2&gt;&amp;1 &lt; /dev/null &amp;
</code></pre>
<p dir="auto">校验（见坑 2）：</p>
<pre><code class="language-bash">stat -c "%n = %s" /opt/strata/models/*.gguf
# 期望 55063448064 / 28800138432
</code></pre>
<h3>3.4 建软链接目录（见坑 1）</h3>
<pre><code class="language-bash">mkdir -p /opt/strata/gguf
cd /opt/strata/models
for F in Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00001-of-00002.gguf \
         Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00002-of-00002.gguf \
         mtp-q2_0.gguf; do
  [ -f "$F" ] &amp;&amp; ln -sf "$(pwd)/$F" /opt/strata/gguf/
done
ls -l /opt/strata/gguf/
</code></pre>
<h3>3.5 执行 setup（自动编译引擎 + 准备 pack）</h3>
<pre><code class="language-bash">cd /opt/strata
.venv/bin/python setup.py \
  --backend hip \
  --family qwen \
  --model IQ3_S \
  --context 131072 \
  --vision cpu \
  --port 8090 \
  --gguf-dir /opt/strata/gguf \
  --data-dir /opt/strata/data \
  --vram-reserve-mib 3000 \
  --no-start \
  --yes
</code></pre>
<p dir="auto">各参数含义：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>参数</th>
<th>值</th>
<th>为什么</th>
</tr>
</thead>
<tbody>
<tr>
<td>--backend hip</td>
<td>—</td>
<td>AMD GPU 必需</td>
</tr>
<tr>
<td>--model IQ3_S</td>
<td>—</td>
<td>3.5-bit i-quant，官方标注质量等同整模</td>
</tr>
<tr>
<td>--context 131072</td>
<td>128K</td>
<td>实测四档通过（§7）</td>
</tr>
<tr>
<td>--vision cpu</td>
<td>—</td>
<td>AMD 上唯一可用的图像路径（坑 5）</td>
</tr>
<tr>
<td>--port 8090</td>
<td>—</td>
<td>避开 8080（坑 7）</td>
</tr>
<tr>
<td>--gguf-dir</td>
<td>独立目录</td>
<td>防 setup 改名（坑 1）</td>
</tr>
<tr>
<td>--vram-reserve-mib 3000</td>
<td>3 GB</td>
<td>与 <a class="plugin-mentions-user plugin-mentions-a" href="/user/guonetnet" aria-label="Profile: guonetnet">@<bdi>guonetnet</bdi></a> 一致，直接抄</td>
</tr>
<tr>
<td>--no-start</td>
<td>—</td>
<td>只装不启，便于先改 --host</td>
</tr>
</tbody>
</table>
<p dir="auto">期望输出（关键行）：</p>
<pre><code class="language-text">[ok] engine: /opt/strata/engine/strata, image encoder (CPU): .../strata-vision
[ok] vision encoder: /opt/strata/data/models/mmproj-Qwen3.8-Flash-Next-BF16.gguf
[ok] model prepared: /opt/strata/data/packs/iq3_s
[ok] MTP draft layer: /opt/strata/data/mtp/rt
[ok] KV streaming on: the context's KV cache lives in RAM (1.8 GB)
[ok] VRAM kept free for other programs: 3000 MiB
[ok] start script: run-iq3_s.sh
</code></pre>
<p dir="auto">编译耗时参考：引擎 1 分钟（复用系统 ROCm，官方估 10-20 分钟）；strata-vision 2-3 分钟；pack 准备 16 分钟。</p>
<p dir="auto"><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--warning" style="height:1.4em;width:auto;vertical-align:middle" title="⚠" alt="⚠" />️ strata-vision 那行 [ok] 出现前不要测图像（坑 5）。</p>
<h2>4. 单卡互斥：与 llama.cpp / ComfyUI 共存</h2>
<p dir="auto">目录完全隔离，不存在互相覆盖：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>服务</th>
<th>路径</th>
<th>模型</th>
<th>端口</th>
</tr>
</thead>
<tbody>
<tr>
<td>Strata</td>
<td>/opt/strata</td>
<td>/opt/strata/models</td>
<td>8090</td>
</tr>
<tr>
<td>llama.cpp</td>
<td>/opt/llama</td>
<td>/opt/llama/models</td>
<td>8080</td>
</tr>
<tr>
<td>ComfyUI</td>
<td>/opt/comfyui</td>
<td>/opt/models</td>
<td>8188</td>
</tr>
</tbody>
</table>
<p dir="auto">唯一共享资源是 GPU。用 systemd Conflicts 自动互斥：</p>
<pre><code class="language-ini"># /etc/systemd/system/strata.service
[Unit]
Description=Strata (Qwen3.8-Flash-Next abliterated IQ3_S, AMD HIP)
After=network-online.target
Conflicts=comfyui.service llama-server.service

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/opt/strata
ExecStart=/opt/strata/run-iq3_s.sh
Restart=on-failure
RestartSec=15
TimeoutStartSec=600
Environment=HOME=/home/ubuntu
Environment=ROCR_VISIBLE_DEVICES=0
Environment=HIP_VISIBLE_DEVICES=0
StandardOutput=append:/opt/strata/service.log
StandardError=append:/opt/strata/service.log

[Install]
WantedBy=multi-user.target
</code></pre>
<p dir="auto">另两个 unit 各加一行 Conflicts=strata.service：</p>
<pre><code class="language-bash">sudo sed -i "s|^Conflicts=|Conflicts=strata.service\nConflicts=|" /etc/systemd/system/comfyui.service
sudo sed -i "s|^Conflicts=|Conflicts=strata.service\nConflicts=|" /etc/systemd/system/llama-server.service
sudo systemctl daemon-reload
</code></pre>
<p dir="auto">切换脚本（任意路径可用）：</p>
<pre><code class="language-bash">#!/bin/bash
# /opt/strata/switch.sh
T=${1:-}
case "$T" in
  comfyui)
    sudo systemctl start comfyui
    for i in $(seq 1 30); do sleep 6
      [ "$(curl -s -m 3 -o /dev/null -w %{http_code} http://127.0.0.1:8188/system_stats)" = "200" ] &amp;&amp; { echo "ComfyUI 就绪"; exit 0; }
    done ;;
  llama)
    sudo systemctl start llama-server
    for i in $(seq 1 30); do sleep 4
      [ "$(curl -s -m 3 -o /dev/null -w %{http_code} http://127.0.0.1:8080/v1/models)" = "200" ] &amp;&amp; { echo "llama-server 就绪"; exit 0; }
    done ;;
  strata)
    sudo systemctl start strata
    for i in $(seq 1 40); do sleep 10
      [ "$(curl -s -m 5 -o /dev/null -w %{http_code} http://127.0.0.1:8090/v1/models)" = "200" ] &amp;&amp; { echo "Strata 就绪"; exit 0; }
    done ;;
  status) for U in comfyui llama-server strata; do printf "  %-14s %s\n" "$U" "$(systemctl is-active $U)"; done ;;
  *) echo "用法: $0 {comfyui|llama|strata|status}" ;;
esac
</code></pre>
<p dir="auto">实测三轮切换无损：</p>
<pre><code class="language-text">Strata → ComfyUI   HTTP 200   VRAM 277 MiB
ComfyUI → llama    HTTP 200   VRAM 21286 MiB
llama → Strata     HTTP 200   VRAM 21853 MiB
</code></pre>
<h2>5. 验证：确认真的在跑</h2>
<h3>5.1 最小冒烟（3 秒出字）</h3>
<pre><code class="language-bash">curl -s http://127.0.0.1:8090/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"local","messages":[{"role":"user","content":"说：你好"}],"max_tokens":20,"stream":false}'
</code></pre>
<h3>5.2 流式测速（★ 必须用流式，非流式数字会低 4 倍）</h3>
<pre><code class="language-python">import json, time, urllib.request
body = {"model":"local","messages":[{"role":"user","content":"用中文详细解释什么是向量数据库，举三个实际应用例子。"}],
        "max_tokens":600, "stream":True}
req = urllib.request.Request("http://127.0.0.1:8090/v1/chat/completions",
    data=json.dumps(body).encode(), headers={"Content-Type":"application/json"})
t0=time.time(); ttft=None; n=0
for raw in urllib.request.urlopen(req, timeout=600):
    line = raw.decode('utf-8',errors='replace').strip()
    if not line.startswith("data:"): continue
    p = line[5:].strip()
    if p == "[DONE]": break
    d = json.loads(p)
    t = (d.get("choices") or [{}])[0].get("delta",{}).get("content") or ""
    if t:
        if ttft is None: ttft = time.time()-t0
        n += 1
total = time.time()-t0
print(f"TTFT {ttft:.2f}s | {n} tok | {n/(total-ttft):.1f} tok/s")
</code></pre>
<p dir="auto">本机期望值：TTFT 1.65-2.57s | 440-470 tok | 64-70 tok/s</p>
<p dir="auto"><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--warning" style="height:1.4em;width:auto;vertical-align:middle" title="⚠" alt="⚠" />️ 非流式测出来的 ~18 tok/s 是错的——那把 prefill + 全部生成 + 传输都算进了总耗时。流式才是真实体感。</p>
<h3>5.3 长上下文验证</h3>
<pre><code class="language-python">filler = "数据分析与机器学习是现代技术的重要方向。" * 2400
body = {"model":"local","messages":[{"role":"user","content":filler+"\n\n请只回答三个字：最后一句？"}],
        "max_tokens":50,"stream":False}
# 期望：prompt_tokens ≈ 96000，耗时 &lt; 90s，回答正确指出最后那句
</code></pre>
<h3>5.4 图像验证（见坑 5，必须等 strata-vision 编译完）</h3>
<pre><code class="language-python">import base64, json, time, urllib.request
b64 = base64.b64encode(open("/path/to/test.png","rb").read()).decode()
body = {"model":"local","messages":[{"role":"user","content":[
        {"type":"text","text":"图中有几个圆形的物体？它们是什么颜色？"},
        {"type":"image_url","image_url":{"url":f"data:image/png;base64,{b64}"}}]}],
        "max_tokens":300,"stream":True}
req = urllib.request.Request("http://127.0.0.1:8090/v1/chat/completions",
    data=json.dumps(body).encode(), headers={"Content-Type":"application/json"})
# 期望：336×336 总 3.4s；512×512 总 5.1s
</code></pre>
<h2>6. 与 <a class="plugin-mentions-user plugin-mentions-a" href="/user/guonetnet" aria-label="Profile: guonetnet">@<bdi>guonetnet</bdi></a> X99 那台的对比</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>项</th>
<th>X99 四通道（2059）</th>
<th>本机 3900X 双通道</th>
</tr>
</thead>
<tbody>
<tr>
<td>CPU</td>
<td>E5-2683 v3，14C/28T @2.0GHz</td>
<td>Ryzen 9 3900X，12C/24T @3.8GHz</td>
</tr>
<tr>
<td>内存</td>
<td>64G DDR4-2133 四通道（~68 GB/s 理论）</td>
<td>128G DDR4-3200 双通道（50.7 GB/s 实测）</td>
</tr>
<tr>
<td>预填充</td>
<td>1460-1614 tok/s</td>
<td>900-1330 tok/s</td>
</tr>
<tr>
<td>短提示解码</td>
<td>40.8 tok/s (IQ3_S)</td>
<td>67.8 tok/s (IQ3_S)</td>
</tr>
<tr>
<td>GPU 专家槽</td>
<td>8903</td>
<td>7818</td>
</tr>
<tr>
<td>Strata 版本</td>
<td>0.1.34</td>
<td>0.1.32（6f32ec0）</td>
</tr>
<tr>
<td>亮机卡</td>
<td>有（R7 240）</td>
<td>无</td>
</tr>
<tr>
<td>上下文</td>
<td>262144</td>
<td>131072</td>
</tr>
<tr>
<td>视觉</td>
<td>支持</td>
<td>支持（开销 1.9-3.6s）</td>
</tr>
</tbody>
</table>
<p dir="auto">值得讨论的一点：按"内存带宽是 MoE 解码瓶颈"的推论，我少 34% 带宽、少 2 核，应该更慢——实测快 1.5 倍。</p>
<p dir="auto">可能原因：</p>
<p dir="auto">单核频率差 1.9 倍（3.8GHz vs 2.0GHz）。未命中显存的专家由 CPU 逐个计算，频率权重高于总带宽。<br />
版本差异（0.1.32 vs 0.1.34）。<br />
测试提示词不同（他"常规思考负载"，我"解释+三个例子"）。<br />
若你是 2.0GHz 时代的 Xeon 平台，可考虑换高主频 CPU 再测。</p>
<p dir="auto">他的配置确实占优的一项：亮机卡省下 1-3GB 显存，专家槽 8903 vs 7818，PCIe 搬运次数更少。同显存容量下，值得效仿。</p>
<h3>6.1 --pool-workers：默认 11 核最优，★ 开满 SMT 会掉 27%</h3>
<p dir="auto">论坛提示"全开超线程反而争用"，我在本机做了 A/B 验证（每档 3 次，同一提示词）：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>配置</th>
<th>decode (tok/s)</th>
<th>σ</th>
<th>结论</th>
</tr>
</thead>
<tbody>
<tr>
<td>默认（不设） = 11</td>
<td>64.0</td>
<td>3.7</td>
<td>最优</td>
</tr>
<tr>
<td>--pool-workers 12</td>
<td>63.8</td>
<td>3.8</td>
<td>与默认无差异（在噪声内）</td>
</tr>
<tr>
<td>--pool-workers 24</td>
<td>46.6</td>
<td>1.6</td>
<td>★ 掉 27%</td>
</tr>
</tbody>
</table>
<p dir="auto">结论：不要手动设 --pool-workers，用默认值。</p>
<p dir="auto">为什么 SMT 会掉这么多——官方 --help 的定义：</p>
<pre><code class="language-text">--pool-workers N    CPU expert pool worker count.
                    Default 0 = every physical core except the one the host loop spins on
                    (with --pool-affinity auto or p-cores on a hybrid CPU: P-cores minus 1).
</code></pre>
<p dir="auto">默认是 物理核数 − 1（12 核 → 11），减掉的那个核给 host loop——专职收 PCIe 传输、协调专家调度、维护 KV cache。</p>
<p dir="auto">SMT 掉速的机理：专家的反量化 + 矩阵乘是 AVX2 整数运算。Zen 3 的 256-bit AVX2 实际拆成两个 128-bit 单元走两条流水线。同一物理核的两个 SMT 线程发到的是同一组向量单元，拿不到 2 倍吞吐，反而多一份 L2/L3 与内存请求队列的争用。</p>
<p dir="auto">★ 一个反直觉的对照实验——本机内存带宽实测（sysbench）：</p>
<pre><code class="language-text">1 线程 : 45.8 GB/s
12线程 : 41.1 GB/s   ← 最差
24线程 : 50.7 GB/s   ← 最好
</code></pre>
<p dir="auto">24 线程带宽比 12 线程高 23%，但模型 decode 反而慢 27%。两者不矛盾，因为测的是不同瓶颈：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>负载</th>
<th>瓶颈</th>
<th>最优配置</th>
</tr>
</thead>
<tbody>
<tr>
<td>纯内存流式访存（sysbench）</td>
<td>内存通道</td>
<td>线程越多越好</td>
</tr>
<tr>
<td>专家反量化 + AVX2 矩阵乘</td>
<td>执行单元</td>
<td>只用物理核</td>
</tr>
</tbody>
</table>
<p dir="auto">⇒ 如果你看到 sysbench 说 24 线程带宽更高，别据此去开 SMT。判断依据应是执行单元，不是内存带宽。</p>
<p dir="auto">关于 12 和 11 相同：说明 host loop 并非"硬占一个核不让碰"，而是"最多用 N-1"的上限。既然 12 和 11 无差异，就用默认值，别动。</p>
<h2>7. 128K 上下文实测</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>prompt_tokens</th>
<th>耗时</th>
<th>速率</th>
<th>结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>16 061</td>
<td>17.8 s</td>
<td>905 tok/s</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
</tr>
<tr>
<td>48 061</td>
<td>51.9 s</td>
<td>926 tok/s</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
</tr>
<tr>
<td>96 061</td>
<td>72.2 s</td>
<td>1330 tok/s</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
</tr>
<tr>
<td>100 059</td>
<td>24.1 s</td>
<td>—</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 回答"好的"完全正确</td>
</tr>
</tbody>
</table>
<p dir="auto">每档都准确找出长文末尾那句——KV cache 跨 10 万 token 无退化。</p>
<p dir="auto">KV streaming 是 128GB 内存最值钱的地方：</p>
<pre><code class="language-text">[ok] KV streaming on: the context's KV cache lives in RAM (1.8 GB), more experts fit in VRAM
[ok] experts loaded: 46.84 GiB at 4.52 GiB/s (58 s so far)
[ok] filling the GPU's expert cache (7818 experts, 14.82 GiB of VRAM)
</code></pre>
<p dir="auto">KV cache 从显存挪到内存，换来 7818 个专家常驻显存。这是 TTFT 只有 0.43-2.68s 的原因。</p>
<h2>8. 启动参数完整清单</h2>
<p dir="auto">/opt/strata/strata-iq3_s.json 的 args 数组：</p>
<pre><code class="language-json">["--pack",        "/opt/strata/data/packs/iq3_s",
 "--native",      "/opt/strata/gguf/Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00001-of-00002.gguf",
 "--ple-gguf",    "/opt/strata/gguf/Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00002-of-00002.gguf",
 "--expert-profile", "/opt/strata/data/expert-profile.bin",
 "--expert-cache", "auto",
 "--prefill",      "auto",
 "--spec",         "4",
 "--spec-min-p",   "0.5",
 "--mtp",          "/opt/strata/data/mtp/rt",
 "--max-context",  "131072",
 "--kv",           "int8",
 "--kv-resident",  "32768",
 "--vram-reserve-mib", "3000"]
</code></pre>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>参数</th>
<th>值</th>
<th>来源</th>
</tr>
</thead>
<tbody>
<tr>
<td>--spec 4</td>
<td>4</td>
<td>与 <a class="plugin-mentions-user plugin-mentions-a" href="/user/guonetnet" aria-label="Profile: guonetnet">@<bdi>guonetnet</bdi></a> 相同，直接抄</td>
</tr>
<tr>
<td>--spec-min-p 0.5</td>
<td>0.5</td>
<td>同上</td>
</tr>
<tr>
<td>--vram-reserve-mib 3000</td>
<td>3000</td>
<td>同上</td>
</tr>
<tr>
<td>--pool-workers</td>
<td>不设（默认 = 核数−1）</td>
<td>见 §6.1</td>
</tr>
<tr>
<td>--max-context 131072</td>
<td>128K</td>
<td>想跑 262144 可改，注意内存</td>
</tr>
<tr>
<td>--prefill auto</td>
<td>auto</td>
<td>官方自动选择</td>
</tr>
</tbody>
</table>
<h2>9. 能力验证</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>测试</th>
<th>结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>算术 (17*23+45)/8</td>
<td>54.5 <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
</tr>
<tr>
<td>代码 is_palindrome()</td>
<td>完整可用，含类型标注 <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
</tr>
<tr>
<td>逻辑 三开关三灯泡</td>
<td>标准三步法 <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
</tr>
<tr>
<td>工具调用 get_weather({"city":"北京"})</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
</tr>
<tr>
<td>自我认知</td>
<td>准确解释 abliterated 技术本质 <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
</tr>
</tbody>
</table>
<h3>9.1 Agent 实测：单文件任务</h3>
<p dir="auto">任务：创建 strata_test.txt 写入指定内容，再读回<br />
结果：34.5 秒，2 次工具调用</p>
<h3>9.2 Agent 实测：多步 + 计算 + 校验</h3>
<p dir="auto">任务：建 f1/f2/f3.txt 写 1/2/3，求和写入 sum.txt，再列出全部内容<br />
结果：51 秒，10 次工具调用，4 条消息<br />
验证：f1=1  f2=2  f3=3  sum=6（独立 cat 验证，非模型自述）<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /></p>
<h3>9.3 Agent 实测：单文件 HTML 游戏（★ 一次成型 + 真机跑通）</h3>
<p dir="auto">任务：用单个 HTML 文件实现贪吃蛇<br />
产物：8.4 KB 单文件（HTML + CSS + JS 全内联）<br />
浏览器真机测试（Chrome 实际加载 + 键盘事件注入 + canvas 像素追踪）：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>功能</th>
<th>测试方法</th>
<th>结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>页面加载</td>
<td>document.title / canvas 尺寸</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/1f434.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--horse" style="height:1.4em;width:auto;vertical-align:middle" title="🐴" alt="🐴" /> 贪吃蛇，480×480</td>
</tr>
<tr>
<td>开始流程</td>
<td>点击 #startBtn</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 覆盖层隐藏，游戏开始</td>
</tr>
<tr>
<td>方向键</td>
<td>注入 ArrowUp 事件，追踪蛇头像素</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> (196,242) → (196,102) 向上</td>
</tr>
<tr>
<td>WASD 双映射</td>
<td>注入 KeyD 事件</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> (196,102) → (316,102) 向右</td>
</tr>
<tr>
<td>穿墙环绕</td>
<td>持续向右 3 次采样</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 436 → 36（480-60-20 精确换算）</td>
</tr>
<tr>
<td>移动连续性</td>
<td>0.4s × 8 次采样蛇头位置</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 8/8 位置全不同</td>
</tr>
<tr>
<td>暂停冻结</td>
<td>Space 后 1.2s 位置不变</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
</tr>
<tr>
<td>恢复</td>
<td>Space 后重新移动</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
</tr>
<tr>
<td>吃食物加分</td>
<td>21 秒随机游走</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--warning" style="height:1.4em;width:auto;vertical-align:middle" title="⚠" alt="⚠" />️ 未触发，无法证实</td>
</tr>
</tbody>
</table>
<p dir="auto"><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--warning" style="height:1.4em;width:auto;vertical-align:middle" title="⚠" alt="⚠" />️ 吃食物一项未能实测：食物坐标在 IIFE 内部，外部无法注入；随机布局下 21 秒内蛇头未与食物重合。代码审查显示逻辑正确（while (snake.some(...)) 避让 + 吃到后 unshift），但未实际验证，不做保证。</p>
<p dir="auto">代码审查（逐行核对）：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>检查项</th>
<th>结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>单文件自包含</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 8.4 KB</td>
</tr>
<tr>
<td>网格 24×24，Canvas 480×480</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 实测确认</td>
</tr>
<tr>
<td>穿墙环绕 (head.x + COLS) % COLS</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 实测通过</td>
</tr>
<tr>
<td>禁止 180° 掉头</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> if (x === -dir.x &amp;&amp; y === -dir.y) return</td>
</tr>
<tr>
<td>食物生成避开蛇身</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> while (snake.some(...)) 重试</td>
</tr>
<tr>
<td>提速曲线</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 每 50 分一档，Math.max(60, 160 - (level-1)*11) 封顶 60ms</td>
</tr>
<tr>
<td>最高分持久化</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> localStorage['snake_best']</td>
</tr>
<tr>
<td>键盘监听用 e.code 而非 e.key</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 正确，规避输入法干扰</td>
</tr>
<tr>
<td>触屏滑动</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 阈值 20px，横纵取大</td>
</tr>
<tr>
<td>暂停 / 重开状态机</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 实测通过</td>
</tr>
<tr>
<td>蛇身渐变</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> rgba(74,222,128, 1-t*0.6) 头尾透明度递减</td>
</tr>
<tr>
<td>眼睛朝向</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> 按 dir 偏移</td>
</tr>
<tr>
<td>IIFE 作用域隔离</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:1.4em;width:auto;vertical-align:middle" title="✅" alt="✅" /> (() =&gt; {...})()</td>
</tr>
<tr>
<td>Canvas 圆角</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--warning" style="height:1.4em;width:auto;vertical-align:middle" title="⚠" alt="⚠" />️ 用了 ctx.roundRect()（Chrome 99+ / Safari 16+）</td>
</tr>
<tr>
<td>食物颜色读取</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--warning" style="height:1.4em;width:auto;vertical-align:middle" title="⚠" alt="⚠" />️ getPropertyValue('--food') 带前导空格，浏览器可容忍，不如写死</td>
</tr>
</tbody>
</table>
<p dir="auto">结论：一次成型，实测 8 项功能全通过。 两处小瑕疵（roundRect 兼容性、颜色字符串），均不影响运行。</p>
<p dir="auto">一个测试方法上的提醒：我第一次用"绿色像素总数"判断是否在移动，结论是"<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=fe25256ab4a" class="not-responsive emoji emoji-android emoji--x" style="height:1.4em;width:auto;vertical-align:middle" title="❌" alt="❌" /> 没动"——但那是判据错了，蛇头蛇身同为绿色，蛇移动时总数不变。改用追踪蛇头坐标后立刻看到 8/8 全不同。验证动态行为要用位置/状态，不要用聚合计数。</p>
<p dir="auto">同一台机上同卡 llama.cpp（Qwen3.8-27B Q4_K_M）对照：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>引擎</th>
<th>模型</th>
<th>短提示解码</th>
<th>上下文</th>
</tr>
</thead>
<tbody>
<tr>
<td>Strata</td>
<td>Qwen3.8-Flash-Next IQ3_S (abliterated)</td>
<td>67.8 tok/s</td>
<td>131072</td>
</tr>
<tr>
<td>llama.cpp Vulkan</td>
<td>Qwen3.8-27B Q4_K_M</td>
<td>73.9 tok/s</td>
<td>131072</td>
</tr>
</tbody>
</table>
<p dir="auto">两者解码基本持平（差 8%），但定位不同：</p>
<p dir="auto">Flash-Next：125B MoE / 6B 激活，128K 上下文 + 视觉 + 无审查<br />
Qwen3.8-27B：稠密模型，逻辑严密场景<br />
Flash-Next 视觉开销 1.9-3.6 秒/图（CPU 编码），27B 无视觉能力。</p>
<h2>10. 资料与致谢</h2>
<h3>坛内参考</h3>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/guonetnet" aria-label="Profile: guonetnet">@<bdi>guonetnet</bdi></a> — X99 + 7900XTX 24G：四通道内存 + 14 核 CPU + 独立亮机卡（2026-10-03） 本文主要对照基准。 硬件三板斧（内存通道 / CPU 核数 / 亮机卡）、5 个量化档 A/B、参数基线（--spec 4 / --spec-min-p 0.5 / --vram-reserve-mib 3000）、"AMD 三件必须自己补"的判断，均来自此篇。<br />
Niko1221 — 3080 Ti 单卡 12GB 跑 Strata / Qwen3.8 Flash-Next IQ2_XS（2026-10-04）<br />
NY Zhao — 4090 48G + 128G，Strata 部署 Qwen3.8 Flash Next 无审查，均速 180+ tok/s<br />
kop wang — 无审查版来了！Qwen3.8-Flash-Next-GSQ-RCO-abliterated-GGUF 完全支持 Strata（无审查版仓库来源）<br />
<a class="plugin-mentions-user plugin-mentions-a" href="/user/terry" aria-label="Profile: terry">@<bdi>terry</bdi></a> — X99 洋垃圾服务器 E5-2666 V3 + 7900XTX + 4090D 48G<br />
johnnybegood — 单卡 3090 跑 Qwen3.8 Flash Next 可到 100 tok/s<br />
David Zhang — 7900XTX + llama.cpp Qwen3.6 27B TurboQuant + MTP（同卡 llama.cpp 基线：10 tok/s）<br />
CHIA AN YANG — 7900 XTX 跑 Qwen3.8-27B 实测 73.4 t/s（本机同卡 llama.cpp 实测 73.9）<br />
X超哥 — 无审查版 Strata 版部署教程（外部站，2026-10-03；模型档位与体积对照表）</p>
<h3>官方仓库 / 文档</h3>
<p dir="auto">引擎：<a href="https://github.com/Niko1221/Strata" rel="nofollow ugc">Niko1221/Strata</a>（本机 commit 6f32ec0）<br />
docs/AMD_HIP.md —— §2 坑 5、坑 6 直接引用<br />
docs/AMD_HIP_PERFORMANCE.md<br />
docs/INSTALL.md<br />
官方量化：ISTA-DASLab/Qwen3.8-Flash-Next-GSQ-RCO-GGUF<br />
无审查版：SC117/Qwen3.8-Flash-Next-GSQ-RCO-abliterated-GGUF<br />
基座 / 视觉 / MTP：Qwen/Qwen3.8-Flash-Next<br />
论坛 2059 提到的社区补丁来源：gfx11 WMMA（PR #260）、hipBLASLt 调优表<br />
本文所有数据均为本机实测（2026-10-04/05），不同硬件 / ROCm 版本会有差异，仅供参考。 §2 七个坑均为实际卡住 20 分钟以上的问题，其中坑 1、2、5、6 在上游文档与坛内现有帖中均未找到。 欢迎交流指正。</p>
]]></description><link>https://lcz.me/topic/2109</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 13:28:46 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/2109.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Oct 2026 10:03:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ryzen 9 3900X + 7900 XTX 24G + 128G DDR4：Strata 跑 Qwen3.8-Flash-Next 无审查版，预填充 900-1330 / 解码 67.8 tok/s / 128K 实测 on Sun, 11 Oct 2026 13:49:25 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/perter" aria-label="Profile: perter">@<bdi>perter</bdi></a> --pool-workers 15→11，解码提升 6~24% 这个值得尝试下 找到甜点位置 我的设备11 是最佳</p>
]]></description><link>https://lcz.me/post/24020</link><guid isPermaLink="true">https://lcz.me/post/24020</guid><dc:creator><![CDATA[Grayson Ren]]></dc:creator><pubDate>Sun, 11 Oct 2026 13:49:25 GMT</pubDate></item><item><title><![CDATA[Reply to Ryzen 9 3900X + 7900 XTX 24G + 128G DDR4：Strata 跑 Qwen3.8-Flash-Next 无审查版，预填充 900-1330 / 解码 67.8 tok/s / 128K 实测 on Tue, 06 Oct 2026 10:00:19 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/grayson-ren" aria-label="Profile: Grayson-Ren">@<bdi>Grayson-Ren</bdi></a><br />
是的，如果CPU不支持AVX-512，会降级到 AVX-2执行，速度会有一定的影响。</p>
]]></description><link>https://lcz.me/post/22805</link><guid isPermaLink="true">https://lcz.me/post/22805</guid><dc:creator><![CDATA[perter]]></dc:creator><pubDate>Tue, 06 Oct 2026 10:00:19 GMT</pubDate></item><item><title><![CDATA[Reply to Ryzen 9 3900X + 7900 XTX 24G + 128G DDR4：Strata 跑 Qwen3.8-Flash-Next 无审查版，预填充 900-1330 / 解码 67.8 tok/s / 128K 实测 on Tue, 06 Oct 2026 06:29:39 GMT]]></title><description><![CDATA[<p dir="auto">同个模型 我用x99 ddr3内存 256k上下文 平均54tok/s AI说是我CPU太差到不了别人70-80的速度 不过也将将够用</p>
]]></description><link>https://lcz.me/post/22784</link><guid isPermaLink="true">https://lcz.me/post/22784</guid><dc:creator><![CDATA[Grayson Ren]]></dc:creator><pubDate>Tue, 06 Oct 2026 06:29:39 GMT</pubDate></item><item><title><![CDATA[Reply to Ryzen 9 3900X + 7900 XTX 24G + 128G DDR4：Strata 跑 Qwen3.8-Flash-Next 无审查版，预填充 900-1330 / 解码 67.8 tok/s / 128K 实测 on Mon, 05 Oct 2026 10:18:41 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/terry" aria-label="Profile: terry">@<bdi>terry</bdi></a> 谢谢，我是新手，正在让MiniMax M3.1 Flash 驱动 Hermes 在弄，它不能登录直接发，贴上去就这样。我再研究研究具体怎么弄成 markdown 格式。</p>
]]></description><link>https://lcz.me/post/22558</link><guid isPermaLink="true">https://lcz.me/post/22558</guid><dc:creator><![CDATA[Data Wu]]></dc:creator><pubDate>Mon, 05 Oct 2026 10:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to Ryzen 9 3900X + 7900 XTX 24G + 128G DDR4：Strata 跑 Qwen3.8-Flash-Next 无审查版，预填充 900-1330 / 解码 67.8 tok/s / 128K 实测 on Mon, 05 Oct 2026 10:21:04 GMT]]></title><description><![CDATA[<p dir="auto">以后这么长的帖子让AI整理为markdown格式，这次帮你做了，下不为例。</p>
]]></description><link>https://lcz.me/post/22557</link><guid isPermaLink="true">https://lcz.me/post/22557</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Mon, 05 Oct 2026 10:21:04 GMT</pubDate></item></channel></rss>