附录 C 名词表
CHAPTER 25

附录 C 名词表

12 分钟阅读 · 3,217 字

收录 docs/项目背景与问题总览.md §4 的全部 12 条(标 总览),加本书 03–19 章新增的术语(标 本书)。
"一句话"只求能用,不求严谨;需要边界时看辨析列或指向的章节。
数字一律带出处,口径冲突不合并(README 约定 2)。


C.1 模型与解码

词 一句话 辨析 / 见
MoE / 专家 稀疏混合专家:每层 512 个专家,每 token 只走 10 个(总览 §4) 慢的从来不是算,是把专家搬到显存 → 11 章
专家三级存储 热专家在显存、全部在内存 arena、磁盘兜底;命中率决定解码速度 与 --expert-cache auto 是同一件事的两层 → 11 章、附录 B
命中率(hit rate) 查专家时本来就在显存里的比例 现在只有请求结束时一个全局值,逐槽看不到 → 19.3 盲区
CPU 专家池 / --pool-workers 用主机 CPU 算冷专家的线程池 两实例共享核段会互相抢核 → 事故 1(9.3 tok/s)
PLE 逐层位置嵌入表(28.8 G),走页缓存(总览 §4) 本部署放主机 RAM(--ple-io ram);分片 2 是 PLE GGUF → 11 章
IQ3_XXS / imatrix 3-bit 级量化档(importance-matrix 标定);本生产用的档 已否决 Q2_0(质量不可接受)、Coder 变体(中文变差)→ 19.5
GSQ / RCO 权重文件名里的两组标定/训练变体标记,不是旋钮 只出现在文件名 …-GSQ-RCO-IQ3_XXS-00001-of-00002.gguf
MTP / 投机解码 / 草稿链 用一个小草稿头一次猜多个 token,再并行验证,接受就一次出多个(总览 §4) 本部署用 MTP GGUF(--mtp …/mtp/rt)+ --spec 4 → 10 章
校验窗口 T / kVerifyMaxT 一次并行验证最多几个草稿 token;硬编码 8(verify_kernels.hpp:28) --spec 4 是生产值;改 T 要过 parity → 10 章
批槽(batch slot) 一张卡上同时跑多路请求(--batch 4),解码交错(总览 §4) 并发上限在这里,不在网关 → 10 章
链式(BCHAIN / --batch-mtp) 批槽也用投机链,每槽一次多出 token(总览 §4) v1 只对 greedy 槽;BCHAIN <slot> <L> <tokens> 是调试命令 → 10 章
GMAX 一个批窗口内路由到同一专家的条目上限,硬编码 8(s2_expert_grouped.cu:1359–1365) static_assert(GMAX >= kVerifyMaxT);超过静默丢条目 → 19 章 P2
chain_off 链捕获显存不足时,批槽永久降级为单 token 窗口 症状是"批还在但速度像没批" → 10 章
准入(admission) 新请求能不能挤进当前批窗口 失败只写日志(generate.cpp:7092, 7122–7125)→ 19.3
--serve 模式 引擎常驻、由 serve 层通过 HTTP 驱动的模式(区别于一次性 generate) 缺 --spec/--mtp/--prefill 直接 return 2(:4501)→ 硬约束
finish_reason / EOS 引擎的合法停止条件;EOS 是 token 248044 / 248046 "没正文"常常是合法 EOS,不是截断 → 事故 3/4/5

C.2 prefill、前缀缓存与停车

词 一句话 辨析 / 见
prefill "读提示词"阶段(相对 decode 解码);本项目最大瓶颈(总览 §4) 254K ≈ 81–91 s;全局串行 → 09 章
prefill 全局串行 serve 层一次只准一个请求读提示词,其余排队 现成缓解是 STRATA_PREFILL_YIELD_CHUNKS/_STEPS(未启用)→ 09、附录 B
TTFT 首字延迟(time to first token) 8 并发可达 4.7 分钟;口径是"从请求进网关到第一个 token" → 09、14 章
前缀缓存 / 复用 提示词前缀没变就能跳过重读;实测把 64k 提示词 TTFT 从 13.4 s 降到 0.79 s(总览 §4) 引擎日志写成 prompt N = R reused + F read → 12 章
检查点(prompt cache) 请求之间保留的对话快照点,默认 6 个、每 16384 token 一个、根密度 2048,每个约 118 MB 主机 RAM 三个旋钮生产都没设 → 附录 B.1.2
会话停车(parking) 把对话快照缓存在显存/内存,下次同会话请求能复用前缀(总览 §4) 一条 254k 会话快照 4.7 GB → 事故 2
停车槽 / --conversation-cache-slots / -mib 能停几条、给多少 RAM(生产 20 槽 / 8192 MiB) 预算小于快照 ×2 → 必然驱逐 → 12 章
驱逐(eviction) 预算不够时把停车快照丢掉;下一轮只能靠检查点 10-07 全天 2508 次;只在引擎日志里(evictions=)→ 19.3
整段重读 被驱逐的会话下一轮把 ~238k token 重新 prefill 194 条 ≥200k 提示词里 123 条只复用 16384 → 事故 2
前缀缓存友好 让同一会话的 prompt 前缀保持稳定,从而命中复用 组装块 TTL、稳定 system、不随意改工具顺序都是为此 → 05、12 章

C.3 通道、部署与进程

词 一句话 辨析 / 见
lane / 通道 一条独立的"引擎 + serve"实例链路,本生产两条 别与"模型"混:lane 由端口 + CWD + GPU 定义 → 15 章
快道 A / 普道 B A = 8091 / GPU0 / taskset 0-15 / qwen3.8-flash-fast;B = 8092 / GPU1 / 38-53 / 默认上游 压测只打 B(红线 2);两 lane 引擎 args 完全相同 → 附录 B.7
默认上游 没在 model_routes 里登记的模型走 8092 所以"随便发个模型名"= 打到普道 → 04 章
模型路由 / 会话粘性 网关按模型 ID 选 lane,同一会话粘在同一条 不做 failover:lane 挂了不会自动切 → 16 章 §16.4
布局(layout) single / split(一引擎跨卡)/ dual(每卡一引擎);当前 dual 状态文件 ~/deploy/layout.mode;layout-restore.sh 开机恢复 → 15 章
钉核(taskset) 给进程指定可用 CPU 核段 唯一"改错就崩一个数量级"的配置(红线 3);构建用 16-31
profile(legacy / ssebed) 引擎切换工具选的"引擎身份":legacy = Strata,ssebed = SSEStraBed B 侧没有 active-b.env → 走脚本默认 legacy → 16 章
active-<lane>.env 每条 lane 的当前引擎指向与覆盖变量 可覆盖 TASKSET/CONFIG/CWD → 必须复查
引擎身份 / engine_version <name>-<version>-b<build>,如 ssebed-0.1.38-b1 来自 build/build-number.txt + build/BUILD.json(必须与二进制同目录)→ 16 章
dry-run / --yes switch-engine 不带 --yes 只打印计划 这是红线 1 的代码化闸门 → 16、17 章
停服窗口 重启一条 lane 的真实不可用时长:6–13 分钟(实测 4m55s / 6m02s / 6m36s / 7m15s) 网关重启只需 5 秒但清空内存状态 → 16 章 §16.6
sidecar(strata-vision) 常驻图像编码进程,mmproj BF16,单图 ≤1024 token 由 serve 的 vision.* 配置启动 → 08 章、附录 B.3
中继 / frps / $PUBLIC_URL 公网入口:Pod 8080 → NodePort → frps → 公网(TLS 在中继侧终结) 本 Pod 侧是明文 HTTP,不要自己起 TLS → 15 章

C.4 网关、窗口与计数

词 一句话 辨析 / 见
网关 / rag-proxy :8080 上唯一的对外面,做鉴权、路由、计数守卫、文档抽取、留档 当前 rag_enabled=false = 纯透传 → 04 章
透传(no_rag) 不做检索组装,原样转给上游引擎 有效窗口回到引擎原生 262,144 → 19.2
组装块(assembly block) 网关为超窗会话拼出来的"检索块",TTL 内复用是前缀缓存友好的关键(总览 §4) mode=assembled 时旧消息会被替换 → 事故 5
任务锚点 组装时必须保留的"原始用户任务 + 约束 + 下一步" 事故 5 丢了 168 条旧消息,丢的不是 schema → 18.6
窗口预检(window guard) 转发前用 serve 的 count_tokens 精确计数,超窗本地拒绝、不进引擎 计数器 window_guard_rejects;10-19 新增 → 04 章
上界估算器 拿不到精确计数时的保守估算:CJK 1.05 / digit 1.05 / other 0.70 tok/字符 英文高估 ~3.3×(实测 0.19)→ 事故 6
四层计数 客户端 CC / 中继 / 网关估算 / 引擎实测,四个数可以互相打架 本书一律以引擎实测为权威;CC 中文低估 ~2.4× → 14 章
权威口径 计费与窗口判定以引擎 usage 为准(400 不占 GPU、不计费) 中继 256,000 vs 引擎 262,144 待对齐 → 19.6
#545 serve 层超窗错误的内部错误码,曾被网关透传给用户 10-19 起改写成 prompt is too long: N > M + 中文 hint → 18.7
盲重试(retry_on_overfit) 上游报超窗后把 max_tokens 压到 1 再试一次 已改为按引擎给的余量重试,room<1 不再重试 → 18.7
思考预算守卫 防止 thinking 把输出预算吃光(answer_reserve_tokens 4096 / div 3) 会被上界估算虚高压缩 → 04 章
文档抽取(doc_extract) PDF/DOCX/XLSX/XLS/CSV/文本自动识别与抽取,扫描 PDF 走页面图 按 256K 剩余预算头尾截断(保留 70% 头部)→ 08 章

C.5 观测、留档与日志

词 一句话 辨析 / 见
/metrics 引擎侧状态 + 八项硬件指标 + 最近 12 次 timings 单路视角;并发时 timings 偶发缺失(#3)→ 19.3
/slots 引擎槽位列表 永远只返回 1 个合成槽(server.py:2594–2601)→ 盲区第一条
/concurrency 网关视角的在途请求(状态 / TTFT / 实时速度 / 两通道 GPU) 是"请求在飞",不是引擎槽位 → 19.3
/v1/status 模型名、窗口、批槽数、GPU/RAM、engine_version、prompt_escapes 只读 GET,一次,是排障首选 → 17.4
prompt_escapes / stops_while_reasoning 特殊 token 转义命中计数 / "思考中结束"计数 事故 3 的修复自带了观测 → 18.4
infer_store / infer.db 网关请求留档(SQLite 索引 + infer-segs/*.jsonl.gz,MinIO 前缀 infer) 判断"是否被截断"的权威依据 → 18.5
api_monitor serve 侧每请求内容留存(默认关,生产 404) 有内存与隐私代价 → 附录 B.3
UTC vs 北京时间 supervisord.log 与 rag-proxy 的 [HH:MM:SS] 前缀 = UTC;switch-engine.log、infer_store 归档名 = 北京时间 跨日志对齐前先换算,否则差 8 小时 → 18.7
/shared/pressure/pressure.json 宿主机整体压力,每 ~2 s 刷新 任一 level=="high" 就降级或退避(CLAUDE.md §8)

C.6 测试与精度

词 一句话 辨析 / 见
逐 token 一致性(GEN vs BGEN) 同一批 prompt 单跑与批窗口跑,逐 token 必须完全相同 官方 tools/batch_test.py;需独占 GPU → 红线 6
A/B 交替 对照实验要交换顺序,防系统性偏移 总览 §12.3;bench/single_ab.py、freeze_ab.py → 13 章
NIAH(大海捞针) 长上下文里找回插入的一句事实 本部署 15/15,但不等于通用 1M 能力 → 14.8
BABILong 长文档问答/散落事实召回 最好 2/15;会自信答错 → 14.8
thinking-only 只有 reasoning 没有正文的响应 事故 3 的 A 模式已修;B 模式(plan-then-EOS)仍在 → 18.4/18.6
A 模式 / B 模式 A = prompt 含特殊 token 字面量 → 模型复述 → 生成真 EOS;B = 计划完就 EOS,无特殊 token A 已在 serve 层修复;B 未根因 → 18 章
SPECIAL_MARKER 一个 U+2063 INVISIBLE SEPARATOR,插在特殊 token 字面量首字符后 输出侧由 Detokenizer.push 剥离,客户端看到原样 → 18.4
CONTROL 类 token GGUF token_type==3 的特殊 token(本 pack 27 个) 转义只处理这些;不要把它们的字面量写进任何正文(红线)

C.7 容易混淆的词对

混淆 区别
前缀缓存 vs 会话停车 前缀缓存 = 同一会话内跳过重读(检查点);停车 = 跨请求把整段对话快照留在 RAM/显存等下次。两者互相依赖:停车被驱逐就退化成检查点复用
--batch 4 vs 网关并发数 批槽是引擎一次并行跑几条;/concurrency 是在途请求数。8 个在途请求 ≠ 8 个批槽
快道快 vs 参数不同 两条 lane 的引擎 args 完全相同;快是因为车道分工 + 钉核 + 流量少
rag_enabled=false vs 网关关闭 网关仍在工作(鉴权、路由、窗口预检、文档抽取、留档),关的只是检索组装
262,144 vs 256,000 引擎 --max-context 262144;中继侧登记 256,000。不一致是待办,不是笔误
“读不到” vs “被删” 前者是路径不存在/路径幻觉;后者需要"此前成功读取过"的证据。事故 4 的误判
“没正文” vs “被截断” 用 infer.db 判:prompt 是否变长、原始 content 长度、finish_reason、有无 tool_calls
note vs agent-qa note = 我改了什么(notes.jsonl);agent-qa = 用户问过的可复用知识(agent-qa.md)
~/docs vs MinIO 本机路径是工作副本,MinIO 桶 qwen-3.8-flash 是备份副本。两份都要有(红线 9)

C.8 本附录小结

  • 最该先记住的五个词:lane、批槽、停车、prefill 全局串行、权威口径——
    本书所有性能讨论都建立在这五个之上。
  • 最容易被误用的是**“前缀缓存”**:它同时指检查点、停车、以及网关组装块的稳定性,
    三者失效方式完全不同(12 章分别讲)。
  • 最危险的一组是特殊 token 相关(CONTROL 类 / SPECIAL_MARKER / A 模式):
    把字面量写进任何会被模型读到的文本,就等于给它一个 EOS。
  • 术语本身也在漂移:总览 §4 写"1M",而 10-19 起有效窗口是 262,144。
    用词之前先确认它属于哪个时代(14.11 的 15 条过期口径大半是这种)。
全部章节