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 条过期口径大半是这种)。