Strata 是一款专为大 MoE(混合专家)模型打造的开源本地推理引擎,能让一台配备 12-24GB 显存的消费级游戏电脑跑起 1250 亿参数的 Qwen3.8-Flash-Next,并以 OpenAI 与 Anthropic 双协议对外提供本地 API。本教程完整记录从硬件自检、环境准备、模型下载、引擎安装、启动验证,到接入 AI 编程 Agent、量化档位与上下文调优的全过程,所有步骤均在一台 RTX 2080 Ti 22G + 32GB 内存的实机上跑通,实测出字速度 35-41 tokens/s,可直接作为同档位机器的部署蓝本。

前置教程

如想快速开始学习本教程,你可能需要先完成以下前置教程:

资源下载

  • Strata 部署资源包(引擎 + strata-dl 多连接下载器 + 双档位配置样例):夸克网盘整理中,上传后本区块更新直链
  • Strata 官方仓库,开源项目主页(MIT 协议),备选获取渠道
  • 模型分片(IQ1_M 约 58GB、Q2_0 约 66GB):体积较大,随资源包分卷打包后一并提供

1. 认识 Strata 与 Qwen3.8-Flash-Next

1.1 这个项目解决什么问题

主流大模型的参数量越大,对显存的要求越高,125B 级别的模型通常被认为是数据中心设备专属。Strata 的思路是把 MoE 模型拆成两部分对待:稀疏激活的专家权重按量化档位切成分片,一部分常驻显存、一部分驻留内存;稠密权重与注意力结构则完整放进显存高速计算。配合 MTP(多 token 预测)投机解码,消费级平台就能以每秒几十 token 的速度驱动 125B 模型。

graph LR A[125B MoE 模型分片] --> B[引擎加载器] B --> C[显存: 稠密权重 + KV 缓存 + 热门专家缓存] B --> D[内存: 其余专家常驻] B --> E[SSD: 极低内存模式的兜底读取] F[客户端: 浏览器 / AI 编程 Agent] --> G[本地 API 8080 端口] G --> B style A fill:#d6eaf8,stroke:#2980b9 style B fill:#e8f4f8,stroke:#1a6b8a style C fill:#d5f5e3,stroke:#27ae60 style D fill:#ffecd6,stroke:#b7950b style E fill:#fadbd8,stroke:#c0392b style F fill:#ebdef0,stroke:#8e44ad style G fill:#fdebd0,stroke:#e67e22

1.2 量化档位与资源需求

Strata 为 Qwen3.8-Flash-Next 提供六个官方档位,核心指标是专家总量(arena)——它决定了显存与内存的分配策略。写作本教程时引擎版本为 v0.1.38,各档位官方数据如下:

档位 下载体积 专家总量 内存需求 质量定位
IQ1_M(Coder) 58.4 GB 23.4 GB 32 GB 保留 256/512 个编码相关专家,存储精度相当于 3.5 bit,编码场景特化
Q2_0 66.4 GB 34.0 GB 48 GB 2-bit 全量专家,速度最快的全专家档
IQ2_XS 68.0 GB 35.5 GB 48 GB 2-bit 改进版,质量略优
IQ3_XXS 75.8 GB 42.9 GB 60 GB 3-bit,质量再上一级,CPU 侧计算量增大
IQ3_S 83.6 GB 50.3 GB 62 GB 3.5-bit,官方口径追平原版 BF16 模型
UD-Q4_K_XL 111.3 GB 77.0 GB 48 GB(预算模式) 4-bit 动态量化,质量最高的实验档

内存需求一列的含义:64GB 内存的机器全档位可跑;48GB 可跑 Q2_0 与 IQ2_XS;32GB 机器的对应选择是 Coder 档。内存不足时引擎会进入低内存驻留模式——显存能装多少专家就装多少,其余驻留内存并按需搬运,这正是 32GB 内存机器也能跑 125B 模型的关键。

1.3 硬件与系统要求

项目 要求 说明
显卡 NVIDIA RTX 20/30/40/50 系,12GB 起步 8GB 可启动但明显变慢;预编译引擎内置 sm_75/86/89/120 四种架构代码
内存 32GB 起步,64GB 推荐 双通道对速度影响显著,后文调优章节有实测
CPU x86-64 并支持 AVX2 近八年的主流处理器均满足
磁盘 80-120GB 空闲 模型分片 + 拼装后的模型包 + MTP 草稿层
系统 Windows 10/11 或 Linux Windows 提供一键脚本
驱动 NVIDIA 驱动 580 以上 引擎依赖的 CUDA 运行库随安装自动配置

2. 部署前自检

2.1 官方自检命令

获取项目代码后(见第 3 章),先运行自检,引擎会给出这台机器适配哪些档位的官方判定:

git clone https://github.com/Niko1221/Strata.git
cd Strata
START-HERE.bat --check

在一台 RTX 2080 Ti 22G + 32GB 内存的实机上,判定结果如下:

[ok] GPU: NVIDIA GeForce RTX 2080 Ti, 22.0 GB VRAM, compute capability 7.5, driver 591.86
[ok] RAM: 31 GB
[ok] CPU: AMD Ryzen 5 5600G with Radeon Graphics (AVX2)

  Q2_0     fits in the low-RAM mode (the GPU holds ~50% of its experts)
  IQ2_XS   fits in the low-RAM mode (the GPU holds ~48% of its experts)
  IQ3_XXS  does not fit
  IQ3_S    does not fit
  IQ1_M    fits in the low-RAM mode (the GPU holds ~73% of its experts)
  UD-Q4_K_XL does not fit

This PC can run Strata. Run it again without --check to install.

2.2 判读要点

does not fit 的档位不要强上:32GB 内存的机器硬跑 IQ3 档会进入 SSD 兜底读取,实测仅 7-8.5 tokens/s。32GB 内存机器的建议路径是先跑 Coder 档;升级内存前先对照 1.2 节的档位表估算需求,规则是内存 ≥ 专家总量 + 10GB 系统预留:Q2_0 与 IQ2_XS 需 48GB、IQ3_XXS 需 60GB、IQ3_S 需 62GB,4-bit 档要全速运行需 87GB 以上(77GB 专家 + 系统预留)。自检通过后,按官方提示选择档位进入安装流程。

3. 获取项目与环境准备

3.1 获取项目代码

国内网络优先从资源下载区的网盘包获取项目代码与引擎,解压到任意空间充足的目录(下文以 C:\ProgramMine\Strata 为例)。备选方式是官方仓库克隆:

git clone --depth 1 https://github.com/Niko1221/Strata.git

3.2 一键安装脚本做了什么

项目根目录的 START-HERE.bat 是总入口,首次运行会依次完成:检测并安装 Python 3.12(用户级安装,无需管理员)→ 创建项目私有虚拟环境 .venv → 调用 setup.py 走完安装全流程。后续每次双击它就直接启动模型。

setup.py 的安装流程共七步:硬件检查 → 档位选择 → Python 依赖 → 引擎获取 → 模型下载 → 模型包拼装 → 生成启动脚本。全程幂等,中断后重跑只会补齐缺失部分。

引擎默认使用官方预编译版本(约 124MB 的 zip),内置四种显卡架构的支持,无需本地安装 CUDA 编译工具链。安装过程还会通过 pip 拉取约 0.4GB 的 NVIDIA CUDA 运行库。另一个约 40MB 的工具源码包走国际线路,下载偏慢属正常现象,耐心等待即可。

3.3 手动准备环境的注意事项

希望精细控制流程的读者可以绕过一键脚本手动建环境,此时有一个已知坑:Windows 的 py -3 可能指向 Python 3.14,而依赖清单中的 numpy 尚无对应版本的预编译包,安装会报错。解决方法是显式使用 3.12 创建虚拟环境:

py -0p
py -V:Astral/CPython3.12 -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

4. 模型分片下载与放置

4.1 从网盘获取模型

模型分片体积在 58-112GB 之间,统一从资源下载区的网盘链接获取。以 Coder 档为例,下载后得到两个分片文件与一个可选的视觉编码器文件,放入模型目录(本教程约定 C:\models\ 下按档位建目录):

C:\models\Qwen3.8-Flash-Next-GSQ-RCO-Coder-IQ1_M\
├── Qwen3.8-Flash-Next-GSQ-RCO-IQ1_M-00001-of-00002.gguf
├── Qwen3.8-Flash-Next-GSQ-RCO-IQ1_M-00002-of-00002.gguf
└── mmproj-Qwen3.8-Flash-Next-BF16.gguf

分片文件名必须保留原名,安装脚本按 -0000i-of-0000N 的命名规则识别分片顺序并校验完整性。各档位的第二分片是全档位共用的查找表(28.8GB),如果同时部署多个档位也无法省略,每个档位的目录需要各自完整。

4.2 大文件下载的断点续传工具

网盘客户端中断后可续传。如果需要从镜像源直接下载数十 GB 的大文件,推荐使用本教程资源包中的 strata-dl 多连接下载器:单连接下载大文件往往只有 2-5 MB/s,该工具把文件切成 512MB 的块、以 16 连接并行抓取,实测能稳定跑到 15-18 MB/s,且支持断点续传与失败重试。

用法(三个必填参数:镜像源地址前缀、输出目录、文件清单):

python strata_dl.py --url-base "https://你的镜像源地址/仓库路径/" --out "C:\models\Qwen3.8-Flash-Next-GSQ-RCO-Coder-IQ1_M" --file "IQ1_M/Qwen3.8-Flash-Next-GSQ-RCO-IQ1_M-00001-of-00002.gguf" --file "IQ1_M/Qwen3.8-Flash-Next-GSQ-RCO-IQ1_M-00002-of-00002.gguf"

其核心逻辑是按块记录进度文件,每块下载完成后校验,全部到齐后按序合并并核对总大小。下面是并行调度部分的核心片段:

def download(remote, final):
    total = head_size(url)
    n_chunks = (total + CHUNK - 1) // CHUNK
    parts = [(i, OUT / f"{final}.part{i:04d}") for i in range(n_chunks)]
    with ThreadPoolExecutor(THREADS) as ex:
        futures = []
        for i, p in parts:
            start = i * CHUNK
            end = min(total, start + CHUNK) - 1
            futures.append(ex.submit(fetch_range, url, start, end, p, i))
        for fu in futures:
            fu.result()
    merge_parts(fpath, parts)

完整代码请查看 strata-dl/strata_dl.py。该脚本仅依赖 Python 标准库,无需安装第三方包。

4.3 校验与放置

分片下载完成后核对两点:文件字节数与网盘说明一致;目录内无 .part 后缀的残留临时块。安装脚本在拼装前还会读取 GGUF 文件头做二次校验,缺字节或截断的分片会被拒绝并提示重新下载对应文件。

5. 安装引擎与模型包拼装

5.1 安装命令

模型分片就位后,运行安装命令把它注册为可启动的档位。以 Coder 档为例:

cd /d C:\ProgramMine\Strata
.venv\Scripts\python.exe setup.py --family coder --model IQ1_M --gguf-dir "C:\models\Qwen3.8-Flash-Next-GSQ-RCO-Coder-IQ1_M" --context 262144 --kv q4_0 --no-start --yes

关键参数说明:

参数 作用
--family coder --model IQ1_M 选择档位,原版全专家模型用 --family qwen --model Q2_0
--gguf-dir 指向已下载的分片目录,安装脚本就地取材不再联网下载
--context 262144 上下文长度,可选 8K 至 512K,详见调优章节
--kv q4_0 KV 缓存量化精度,可选 int8 或 q4_0
--no-start 仅安装不启动
--yes 全部采用推荐配置,跳过交互问答

5.2 拼装过程发生了什么

安装脚本会把 GGUF 分片重新整理为引擎专用的模型包(核心是一个按专家组织、便于显存缓存随机存取的 experts.bin),并从原始模型检查点获取约 5GB 的 MTP 草稿层——它是投机解码的加速器,能带来约两倍的出字速度提升。全程约需 10-20 分钟,主要耗时在 25-35GB 模型包的写入。

完成后项目根目录会生成两样东西:配置文件 strata-<档位>.json 和启动脚本 run-<档位>.bat。不同档位的模型包可以共存,各自独立启动。

6. 启动与基础使用

6.1 启动与首次加载

双击 run-coder-iq1_m.bat(或对应档位的启动脚本),首次加载需要一到两分钟。启动日志中出现下面两行属正常现象:

[strata] loading the experts the GPU does not hold into RAM ... YOUR PC CAN BE SLOW OR STOP RESPONDING FOR 1-3 MINUTES NOW - this is normal.
[strata] filling the GPU's expert cache (6838 experts, 13.01 GiB of VRAM) ...

第二行是显存专家缓存的建立结果,括号里的容量就是后续调优时重点关注的数字。加载完成后命令行显示 ready:,浏览器会自动打开 http://127.0.0.1:8080/ 聊天首页。关闭命令行窗口即停止服务。

6.2 三种使用方式

方式 地址 说明
网页聊天 http://127.0.0.1:8080/ 自带对话界面,会话记录仅保存在浏览器本地(localStorage 键 strata.chat),点 New chat 清空,或在控制台执行 localStorage.removeItem("strata.chat") 彻底清除
OpenAI 兼容 API http://127.0.0.1:8080/v1/chat/completions API Key 与模型名均可随意填写,服务端不校验
Anthropic 兼容 API http://127.0.0.1:8080/v1/messages 供以 Anthropic 协议接入的客户端与 Agent 使用

用任意 OpenAI 客户端验证服务的例子:

import urllib.request, json
body = json.dumps({"model": "strata", "messages": [{"role": "user", "content": "自我介绍一下"}], "max_tokens": 500}).encode()
req = urllib.request.Request("http://127.0.0.1:8080/v1/chat/completions", data=body, headers={"Content-Type": "application/json"})
r = json.load(urllib.request.urlopen(req, timeout=300))
print(r["choices"][0]["message"]["content"])

6.3 实测性能基线

实机(RTX 2080 Ti 22G + 32GB 双通道内存)的验证数据,供同档位机器对照:Coder 档预热后稳定 35 tokens/s、显存专家缓存命中率 95%;Q2_0 档首请求即达 41.3 tokens/s、命中率 76.5%。低于此量级时优先检查后文调优章节的显存占用项。

7. 接入 AI 编程 Agent

7.1 ZCode 的配置方法

Strata 的本地 API 可以直接充当 AI 编程 Agent 的模型后端。以 ZCode 桌面版为例,其模型配置存放在 C:\Users\<用户名>\.zcode\v2\provider_config.json(注意与 CLI 的 config.json 是两套配置),在 providerConfigRules 中新增一个服务商条目:

{
  "providerId": "strata-local",
  "providerName": "strata-local",
  "config": {
    "group": "standard-personal",
    "access": { "type": "api-key", "apiKey": "strata" },
    "api": { "type": "openai-chat-completions", "baseUrl": "http://127.0.0.1:8080/v1" },
    "personalModelIds": ["qwen3.8-flash-next"],
    "modelOrder": ["qwen3.8-flash-next"]
  }
}

同时在 modelConfigRules 的 providerModelRules 中为该模型声明上下文窗口,数值与启动配置一致(引擎 262144 时此处填 256000 至 262144 均可,声明略小更安全,客户端会提前压缩长对话而不是撞上硬限制):

{
  "modelId": "qwen3.8-flash-next",
  "providerId": "strata-local",
  "config": { "enabled": true, "properties": { "contextWindow": 256000 } }
}

保存后重启 ZCode,模型列表里即可看到本地模型。使用前确认 Strata 服务正在运行,否则客户端会报连接失败。

7.2 必须同步修改的两个服务端开关

Agent 类客户端有一个共同行为:按「最大输出额度」请求 max_tokens,提示词加上这个额度很容易超出上下文上限,服务端按设计返回 400,客户端则渲染为「Model request exceeded the provider context window」。解决方法是在 strata-<档位>.json 中加入两个顶层配置:

"fit_max_tokens": true,
"reasoning_budget_tokens": 16384

fit_max_tokens 让服务端把超限的 max_tokens 自动收缩到剩余空间,不再拒绝请求;reasoning_budget_tokens 给思考型模型的思考过程设置 16384 token 的硬上限,防止输出配额被思考阶段全部消耗、正文为空。修改后重启启动脚本生效。

排障线索:如果客户端报上下文类错误但引擎日志里没有任何 error 记录,优先检查配置文件是否漏加这两项,以及客户端声明的窗口值与引擎实际值是否一致。

8. 量化档位与上下文调优

8.1 双档位组合策略

实机最终的形态是双档位并存:Coder 档负责编码场景,Q2_0 档负责通用问答。两个档位的模型包共存于磁盘,切换时停掉当前启动脚本、再运行另一个即可(同一个 8080 端口,客户端零改动)。两档的实测对照:

维度 Coder IQ1_M Q2_0
出字速度(实测) 35 tokens/s 41.3 tokens/s
内存驻留 约 8 GB,可同时挂微信 约 19 GB,需关闭大内存程序
显存专家缓存命中 95% 76.5%
适用场景 编码、工具调用、Agent 后端 通用问答、写作、知识面

8.2 KV 缓存量化的账目

KV 缓存随上下文线性增长,是长上下文场景的最大变量。该模型为 13 层 KV 结构,两种精度的账目如下:

上下文 int8 KV q4_0 KV
每 token 约 13.4 KB 约 7.3 KB
128K 1.8 GB 1.0 GB
256K 3.6 GB 2.0 GB

32GB 内存机器的 KV 只能住显存(内存被专家占满),因此 q4_0 是长上下文场景的推荐精度——它把开 256K 的显存代价从 3.6GB 降到 2.0GB,相当于专家缓存只缩小 0.6GB 而不是 1.6GB。v0.1.38 起 q4_0 的提示词预填充走 tensor core,长提示处理速度无损。内存升级到 64GB 以上后 --kv-streaming auto 会自动把 KV 搬进内存,显存完全腾空,届时 int8 的检索精度优势可以找回来。

8.3 上下文档位的边界

上下文档位共七档:8K、32K、64K、128K、256K、384K、512K。其中 256K(262144)是模型训练的原生上限,设置时无需任何外推;384K 与 512K 由 yarn 旋转位置编码外推 1.5 倍与 2 倍实现,远距离检索精度会有可见下降。超过 512K 官方不再提供档位。日常编码建议 128K 或 256K,512K 留给整仓库、超长文档的一次性分析任务。

8.4 显存专家缓存的腾挪

显存专家缓存越大,命中率越高,出字越快。三个不花钱的抓手:

  • 跑 Strata 时关闭游戏、ComfyUI 等显存大户,桌面程序能省 1-2GB
  • 用过一段时间后执行 --expert-profile-save,引擎会按你的真实工作负载把热点专家固定在显存
  • 观察 ready: 行括号里的缓存容量,它就是当前显存富余量的直接体现

8.5 内存双通道的实测方法

内存带宽决定驻留专家向显存搬运的速度,而很多整机存在两根内存条插在同一通道的单通道问题。不装任何工具的验证方法:用 numpy 对大数组做拷贝计时,单通道实测约 18-19 GB/s(读加写),双通道约 32-36 GB/s。低于 20 GB/s 时关机把一根内存条挪到另一通道(常见主板双条标准位为第 2、4 槽)。实机修正双通道后带宽提升 71%,模型出字速度随之受益。

9. 总结

9.1 核心内容回顾

  • Strata 通过「显存专家缓存 + 内存常驻 + MTP 投机解码」三层结构,让 12-24GB 显存的消费级电脑跑起 125B MoE 模型
  • 部署五步:自检、取码、放分片、setup 安装、双击启动;分片文件名与字节数必须完整保留
  • 32GB 内存机器首选 Coder 档,量化与上下文按「q4_0 KV + 256K」组合性价比最高
  • 接入 Agent 必须同步加 fit_max_tokens 与 reasoning_budget_tokens,否则必遇上下文报错与空回复
  • 双档位(Coder + Q2_0)覆盖编码与通用两类场景,切换零成本
  • 内存双通道、显存腾挪、专家热度画像是不花钱的三板斧

9.2 常见问题与解答

问:启动后电脑卡住一两分钟正常吗?

答:正常。低内存驻留模式要把约 19GB 的专家数据一次性载入内存并锁定,系统在装载期间响应变慢属预期行为,日志里也有明确提示,等待即可。

问:客户端报「Model request exceeded the provider context window」怎么办?

答:这是 Agent 类客户端按满额输出额度请求导致提示词加 max_tokens 超限。在 strata-<档位>.json 中加入 "fit_max_tokens": true 并重启服务即可,服务端会自动收缩额度而不是拒绝请求。

问:回复的 content 字段是空的?

答:思考型模型把输出配额全部消耗在思考阶段了。两种解法:客户端调大 max_tokens(800 以上);或在服务端配置 "reasoning_budget_tokens": 16384 强制为正文保留空间。

问:手动创建虚拟环境后安装 numpy 失败?

答:py -3 可能指向尚无对应预编译包的过新 Python 版本,显式用 Python 3.12 创建虚拟环境即可,参见 3.3 节。

问:8080 端口被占用或想同时开两个档位?

答:启动配置中修改 "port" 字段换端口。但不建议同时启动两个档位,显存与内存都无法支撑双模型并存,实际用法是停一个启另一个。

问:想清空网页聊天的历史记录?

答:会话记录仅存于浏览器 localStorage(键 strata.chat),点页面上的 New chat 即可清空当前会话,彻底清除则在开发者工具控制台执行 localStorage.removeItem("strata.chat") 后刷新。