QWEN / INFERENCE SYSTEMS / INTERACTIVE FIELD GUIDE

Qwen3.8-27B
从模型结构到 vLLM 推理数据流

输入如何从字符串变成张量?每一层怎样读取记忆、纠正状态、改变向量?打开64层逐算子计算剖面,再沿缓存与调度追到推理引擎。

打开逐层计算剖面 真实维度 / 教学数值,严格分开
MODEL PROFILEDENSE · VISION-LANGUAGE
27B参数 · Dense
64语言层
5,120hidden size
248,320vocab padded
Gated DeltaNet ×48 Gated Attention ×16
FP8 E4M3 · BLOCK 128×128262,144 NATIVE CONTEXT
阅读深度

先建立心智模型,再下钻公式与 runtime。

01

LAYER-BY-LAYER / FORWARD PASS

把每一层打开,
看表示怎样改变。

不要把“模型思考”想成64个文字处理框。实际发生的是:数值向量反复投影、读取记忆、非线性变换与残差相加。下面同时提供真实张量规格与可验算的教学中间值。

进入第0层之前:字符串已经消失了

messagesCPU · JSON{role: "user", content: "猫坐在垫上"}
chat template / tokenizerCPU · token IDs + positionsinput_ids [T] · positions [T] 或 [3,T]
embedding lookupGPU · E[ids]E [248320,5120] → X⁰ [T,5120]
真实 tokenizer 只读验算 · 不含 chat template

同一句「猫坐在垫上」并不是5个 token:固定服务器 snapshot 的结果为 猫→98500 · 坐在→108604 · 垫→99333 · 上→95802。裸文本查表得到 [4,5120];完整聊天还要计入角色/特殊 token。

2026-08-31 · local_files_only=True · add_special_tokens=False · 只加载 CPU tokenizer,没有启动模型或请求服务。

ID 不是语义坐标。 tokenizer 用词表把字符串分成 token,中文不保证一字一 token。Embedding 用整数 ID 取矩阵中的一行;不是把 ID 乘进每层。相同 token 的初始 embedding 相同,上下文影响由后续层产生。

图像从另一条路合流。 processor 给出像素/网格和占位位置;视觉编码器输出 [V,5120],替换对应位置的 embedding,再进入同一64层。thinking tokens 也进入这条路径,MTP 不属于这64层主干。

真实规格来自 固定 revision 的 FP8 config ↗;chat template 还会加入角色和特殊 token,下面的字符示例刻意不模拟这些 ID。

为什么多数层压缩、每第四层再检索?

两种记忆,付出不同代价。 GDN 每步更新固定大小的 S,mixer 核心 decode 成本不随历史长度 L 增长,约为 O(Hᵥdᵥdₖ);GQA 读每个位置的 K/V,decode 核心随 L 线性增长,约 O(LHqdh)。prefill 的标准全注意力有二次 token 配对;Flash/Paged 优化存储和执行,不取消这些配对。

压缩不是无损,寻址也不是保证答对。 GDN 的有限状态可能让相似 key 干扰,或让衰减抹掉细节;GQA 保留按位置访问历史表示的能力。3:1 把两种机制交错,让较少全注意力层参与补充检索。比例来自 config;这里解释其设计动机,不声称它对所有任务都是最优。

Gated DeltaNet论文 ↗ · 复杂度为固定head维度下的数学推导,仅针对mixer核心,不包含投影/FFN,也不是实测延迟。

可验算的教学网络 · 非 Qwen 激活

4维 hidden · GDN 状态2×2 · GQA 2Q:1KV · FFN8维 · 64层独立未训练权重 · 浏览器 JavaScript number。不调用远端推理,也不更新模型权重。

本轮一次处理 5 个已知字符;当前追踪 t4,仍只能读取 ≤t4 的历史。真实推理只在需要预测的位置计算 logits。

时间轴 t4字符「
深度轴 L00GDN · 第 1/64 层
本层状态归属S[0] + conv[0]
L00 / GDN · 步骤 1 / 13

逐步播放只移动计算焦点;任意选择层或 token 会暂停。

L00 · INPUT · t4

接收上一层的残差流

X⁽ℓ⁾ ∈ ℝᵀˣ⁵¹²⁰

真实 Qwen 规格[T, 5120]

直觉:这一步在做什么

每个 token 是一行 5120 个数,不再是汉字字符串。层号向下推进,但行仍对应原来的 token 位置;上一层增加的上下文信息已包含在这些数里。第 0 层接收 embedding,其他层接收上一层输出。

展开另外两种阅读深度

数学ℓ=0…63 表示网络深度,t 表示序列位置。X[t,:] 是一个位置的表示。T 是本次实际安排计算的 token 总数,不是最大上下文长度。残差流不是 KV cache,也不是 GDN 的 S。

工程GPU · 逻辑 BF16 · 当前前向临时量。vLLM 可把多个请求打包为 [T,5120];query_start_loc/seq_lens 把各请求分隔,不能让不同用户互相注意。权重是模型常驻量。

依据:vLLM decoder 源码 · 安装源码只读复核于2026-08-31;维度为 config/源码推导。

把这一步算出来以下全部是教学网络数值
当前 token 的教学表示 · 4个坐标
-0.2227-0.68840.75400.7126

t=4,沿网络深度向下传递这行向量;词的位置不变,特征值会改变。颜色只表示数值的正负与大小,不表示语义或可信度。

L00 的数据结构、dtype、生命周期与 TP4 分片

T=本轮被调度的 token 数;R=缓存中的请求/state槽位;P=物理页数。下表 shape 是逻辑视图,不宣称某后端的实际 stride/对齐布局。

数据结构全局逻辑 shapeTP4 每 rank位置 / dtype生命周期 / 含义
残差流 X / Y[T,5120][T,5120]GPU · 逻辑 BF16;归约精度由 kernel 决定当前层/前向;不是请求历史缓存
Q / K[T,16,128][T,4,128]GPU · 逻辑 activation dtype当前层临时量;Q/K L2 归一化
V / Z[T,48,128][T,12,128]GPU · 逻辑 activation dtype当前层临时量
S recurrent state[R,48,128,128][R,12,128,128]GPU · config SSM=float32;引擎 auto 另行解析每层每请求固定状态;FP32 时全局每序列每层3 MiB
conv history[R,10240,3][R,2560,3]GPU · 独立 conv cache dtype保留3个历史输入,4-tap含当前;额外投机槽位另计
FFN gate / up各 [T,17408]各 [T,4352]GPU · BF16逻辑激活,量化GEMM内部另计单层临时量,执行后可复用
权重与缩放按每层独立矩阵列/行分片;norm复制GPU · FP8 block权重 + scales;排除模块非FP8模型装载到卸载;推理时不被提示词更新

状态shape来源:MambaStateShapeCalculator ↗。模型 weight ≠ 当前 hidden activation ≠ 请求 cache,三者不能互换。

这一层究竟“扭转”了什么?

变的是向量数值,不是 token ID。将输入、本层两次修正与输出并排,看每个坐标是增加还是抵消。注意力混合历史,FFN 改变特征;最后由残差合在一起。

‖输入‖=1.2648 → ‖输出‖=1.2758
‖总修正 Δ‖=0.0512

同一 token 在同一层的4个教学坐标
X输入-0.2227-0.68840.75400.7126
Δmix0.0434-0.03850.01550.0067
Δffn-0.00970.00880.0013-0.0249
X输出-0.1890-0.71810.77080.6944

同一 token,穿过全部64层后的数值轨迹

每行均来自实际执行的教学计算。点击任一行进入那一层。颜色表示正负和幅度;不做“某层负责语法/某层负责推理”的无证据分工。

全部64层的计算清单:同类型,同结构,不同参数

层号使用源码的0基索引:L03 是第4层。每一项都列出完整算子链;不要把48个 GDN 接成一段、再接16个 attention。真实顺序始终是 GDN → GDN → GDN → GQA,重复16次。

L00GDNEmbedding → [T,5120] → L01

model.language_model.layers.0(checkpoint 路径;加载后前缀可能重映射)。本层有自己的两个 norm、linear_attn + S/conv 和 dense MLP;参数与任何其他层不共享。

本层以固定状态压缩该层所见前缀。上一层的 S 不会直接传进本层;本层接收到的是上一层的 hidden 输出。

算子计算真实逻辑 shape
X⁽ℓ⁾ ∈ ℝᵀˣ⁵¹²⁰[T, 5120]
U = X / √(mean(X², hidden) + ε) ⊙ γ[T, 5120] → [T, 5120]
[Q₀,K₀,V₀,Z]=U Wqkvz; a=U Wa; b=U WbQ/K [T,16,128] · V/Z [T,48,128] · a/b [T,48]
cₜ=SiLU(Σᵢ₌₀³ wᵢ ⊙ QKV₀,ₜ₋ᵢ); q=normalize(q); k=normalize(k)QKV [T,10240] → 同 shape;conv 历史 [10240,3]
S̄=αSprev; e=v−S̄k; S=S̄+βekᵀ; o=S q/√dₖS [R,48,128,128];o [T,48,128]
Ogate = RMSNorm(o) ⊙ SiLU(Z)[T,48,128] → [T,6144]
Δmix = Ogate Wo[T,6144] × [6144,5120] → [T,5120]
Y = X + Δmix[T,5120] + [T,5120] → [T,5120]
N = RMSNorm(Y)[T,5120] → [T,5120]
G=N Wgate; Uffn=N Wup各 [T,5120] × [5120,17408] → [T,17408]
F = SiLU(G) ⊙ Uffn[T,17408] ⊙ [T,17408] → [T,17408]
Δffn = F Wdown[T,17408] × [17408,5120] → [T,5120]
X⁽ℓ⁺¹⁾ = Y + Δffn[T,5120] → 下一层 [T,5120]

输入来自embedding lookup;输出交给第1层。L0 的缓存只沿 token 时间轴延续;层间传递的是 hidden,不是整套 cache。

L01GDNL00 → [T,5120] → L02
L02GDNL01 → [T,5120] → L03
L03GQAL02 → [T,5120] → L04
L04GDNL03 → [T,5120] → L05
L05GDNL04 → [T,5120] → L06
L06GDNL05 → [T,5120] → L07
L07GQAL06 → [T,5120] → L08
L08GDNL07 → [T,5120] → L09
L09GDNL08 → [T,5120] → L10
L10GDNL09 → [T,5120] → L11
L11GQAL10 → [T,5120] → L12
L12GDNL11 → [T,5120] → L13
L13GDNL12 → [T,5120] → L14
L14GDNL13 → [T,5120] → L15
L15GQAL14 → [T,5120] → L16
L16GDNL15 → [T,5120] → L17
L17GDNL16 → [T,5120] → L18
L18GDNL17 → [T,5120] → L19
L19GQAL18 → [T,5120] → L20
L20GDNL19 → [T,5120] → L21
L21GDNL20 → [T,5120] → L22
L22GDNL21 → [T,5120] → L23
L23GQAL22 → [T,5120] → L24
L24GDNL23 → [T,5120] → L25
L25GDNL24 → [T,5120] → L26
L26GDNL25 → [T,5120] → L27
L27GQAL26 → [T,5120] → L28
L28GDNL27 → [T,5120] → L29
L29GDNL28 → [T,5120] → L30
L30GDNL29 → [T,5120] → L31
L31GQAL30 → [T,5120] → L32
L32GDNL31 → [T,5120] → L33
L33GDNL32 → [T,5120] → L34
L34GDNL33 → [T,5120] → L35
L35GQAL34 → [T,5120] → L36
L36GDNL35 → [T,5120] → L37
L37GDNL36 → [T,5120] → L38
L38GDNL37 → [T,5120] → L39
L39GQAL38 → [T,5120] → L40
L40GDNL39 → [T,5120] → L41
L41GDNL40 → [T,5120] → L42
L42GDNL41 → [T,5120] → L43
L43GQAL42 → [T,5120] → L44
L44GDNL43 → [T,5120] → L45
L45GDNL44 → [T,5120] → L46
L46GDNL45 → [T,5120] → L47
L47GQAL46 → [T,5120] → L48
L48GDNL47 → [T,5120] → L49
L49GDNL48 → [T,5120] → L50
L50GDNL49 → [T,5120] → L51
L51GQAL50 → [T,5120] → L52
L52GDNL51 → [T,5120] → L53
L53GDNL52 → [T,5120] → L54
L54GDNL53 → [T,5120] → L55
L55GQAL54 → [T,5120] → L56
L56GDNL55 → [T,5120] → L57
L57GDNL56 → [T,5120] → L58
L58GDNL57 → [T,5120] → L59
L59GQAL58 → [T,5120] → L60
L60GDNL59 → [T,5120] → L61
L61GDNL60 → [T,5120] → L62
L62GDNL61 → [T,5120] → L63
L63GQAL62 → [T,5120] → Final norm

第63层之后:向量才变成“下一个 token 的概率”

hfinal = RMSNorm(X⁶⁴[last]); logits = hfinal Wlm; p = softmax(logits / τ)

没有每层一个文字答案。 Wlm 的逻辑形状 [5120,248320];tie_word_embeddings=false,LM head 不与输入 embedding 绑定。标准生成只取待采样位置,得到 [待采样位置数,248320] 的 logits。logit 是未归一化分数,不是概率。

采样在完整前向之后。 温度、top-k、top-p 和惩罚等会改变选择方式;greedy 直接取最大 logit,随机采样按分布抽样。选出的 token 追加到序列,然后只让它经过下一轮64层,读取已建好的各层缓存。

教学 t4:最后一层输出 → final norm → 6项 LM head
X⁶⁴-0.9603-0.21410.52760.7945
norm-1.4016-0.31250.77001.1596
logits0.44290.0097-0.69280.7211-0.1869-0.1017
22.71%
14.73%
7.29%
29.99%
12.10%
13.17%

这6个候选只用于演示归一化;网络未训练,分布没有语言意义,不能当作 Qwen 对提示词的回答。中间位置的分布也只是教学检查,真实普通生成关注最后待预测位置。

Prefill 能并行,不是能偷看未来。 已知所有输入向量,所以 GEMM 可按多行批量计算;attention 仍用 causal mask。GDN 的块递推利用关联结构并行化。整个输出回答仍须逐轮生成,因为后一轮的输入 token 尚未采样。

提示词不改权重,状态会改。 W、norm 参数来自训练;一次推理通常固定不动。随着 prompt 和输出进入,变化的是 activations、GDN S/conv 与 K/V。请求结束后缓存可释放;后续独立请求不是在继续训练这份 checkpoint。

LM head、forward 和配置加载源码 ↗ · vocab / tie_word_embeddings 配置 ↗

02

ONE TOKEN JOURNEY

同一条路径,两种工作负载

prefill 处理许多已知 token,decode 每轮只推进一个新 token。引擎把它们放进同一个动态 token budget。

01 / 11
CPU

ACTIVE STAGE

OpenAI API 请求

解析 messages、采样参数与媒体引用。

TENSOR / OBJECTJSON / strings批量 token 路径

自动播放仅移动高亮;系统开启 reduced-motion 时会自动禁用。

03

MEMORY LABS

把记忆机制拆到可操作

小尺寸实验不是模型仿真,而是用可见状态解释真实公式中的更新、共享与损失边界。

教学类比

GDN 状态实验台

STATE UPDATE

S̄ₜ = αₜSₜ₋₁; Sₜ = S̄ₜ + βₜ(vₜ − S̄ₜkₜ)kₜᵀ

t1
0.140.000.580.00
t2
0.430.130.44-0.00
t3
0.390.610.350.04
t4
0.280.470.550.10
t5
0.280.470.490.20

门控 α 小,旧状态快速擦除;α 大,记忆延续更久。

Delta 写入 写的是预测误差,不是简单累加 value。

风险 多个 token 竞争固定状态,精确细节可能相互干扰。

REAL CONFIG · PER GDN LAYERQK [T,16,128] · V [T,48,128]decode 保存 recurrent + conv state;config 声明 mamba_ssm_dtype=float32,但当前 vLLM cache override=auto,需与实际 cache resolution 分开
配置/源码推导

GQA / Attention 实验台

HEAD SHARING

A = softmax(QKᵀ / √256 + causal mask) · V

Q7 → shares → KV1
K0
V0Q 05
K1
V1Q 611
K2
V2Q 1217
K3
V3Q 1823
token 00.195
token 10.072
token 20.389
token 30.047
token 40.238
token 50.059

partial RoPE 每个 256-d Q/K head 只旋转 64 维(0.25)。

共享 六个 Q heads 共用一组 K/V,降低 cache 体积。

output gate 已安装源码在 O projection 前使用 sigmoid gate;GDN 输出门才使用 swish/SiLU。

FULL ATTENTION · GPUQ [T,24,256] · K/V [T,4,256]TP4 时每 rank 6 个 Q heads、1 个 KV head;paged K/V 随上下文增长
04

PRECISION & CACHE

FP8 checkpoint,不等于一切都是 FP8

权重文件、线性层激活、attention KV 与 GDN/Mamba state 是四个不同的 dtype 决策。

128 × 128
weight tile
官方事实服务器快照

block-128 metadata 表示什么?

checkpoint 的 quantization_config 是 FP8 E4M3、动态 activation scheme,weight_block_size=[128,128]。含义是权重按二维 128×128 block 搭配缩放信息存储/反量化;它不是“每 128 个 token 一组”,也不规定 KV cache 或 recurrent state。

对象当前证据生命周期
Linear weightsFP8 E4M3 blockwise;部分模块明确不转换模型生命周期 · GPU
Activations模型逻辑 dtype=BF16;量化线性层可动态转 FP8 operands/accumulate单 kernel / 单层
Attention KV服务器 profile:fp8_e4m3请求上下文生命周期
GDN conv / SSM服务器 override:auto / auto;不得由 FP8 checkpoint 反推请求生命周期 · 固定 shape

LOGICAL KV CALCULATOR

只计算 16 个全注意力层

公式:C × N × 16 layers × 2(K,V) × 4 KV heads × 256 × bytes

每 token · 每 attention 层2.00 KiB
TP4 全局逻辑 KV4.00 GiB
每 rank 理想均分1.00 GiB

逻辑估算 ≠ vLLM 实际显存预留。实际还包含 block 对齐、hybrid page grouping、可能的复制、prefix cache 未使用页、allocator 元数据、graph capture 与 kernel workspace;GDN state 另算。

05

VLLM ENGINE

调度的单位,是下一小段工作

vLLM V1 统一调度 prompt 与 output token;continuous batching 发生在每个 engine step,而不是请求到达时一次性锁死批次。

01OpenAI API
02input processor
03V1 scheduler
04KV manager
05GPU model runner
06sampler
07SSE stream
源码推导

Scheduler + Paged KV 模拟器

TOKEN BUDGET / TICK = 18
R1waiting
0/46 prompt · 0/4 out
R2waiting
16/27 prompt · 0/5 outPREFIX HIT 16
PHYSICAL BLOCK POOL1 / 18 allocated
B00R2
B01FREE
B02FREE
B03FREE
B04FREE
B05FREE
B06FREE
B07FREE
B08FREE
B09FREE
B10FREE
B11FREE
B12FREE
B13FREE
B14FREE
B15FREE
B16FREE
B17FREE

decode 请求每 tick 通常推进 1 token

长 prompt 被切成 chunk,填入剩余 token budget

prefix 命中复用已计算整块,跳过对应 prefill

PAGEDATTENTION

block table 是一次间接寻址

逻辑 token 位置映射到非连续物理 page;请求增长时追加 block,结束时释放,不要求预留最大上下文的连续显存。

GRAPH CAPTURE

重放固定 shape 的执行图

CUDA/HIP graph 捕获减少 CPU launch 开销;不规则 shape 或未捕获 batch 仍可走 eager。它是执行优化,不改变 attention/GDN 数学。

ROCM DISPATCH

同一模型,多条 kernel 路径

当前 profile 指定 TRITON_ATTN,且 vLLM 源码在 ROCm 平台选择 forward_hip;GDN prefill/decode、attention 与 GEMM 可各自分派。

06

TP4 / RDNA4

四张 GPU 并不是一张 128GB 大卡

权重和 heads 沿 tensor-parallel 维切开;每个 rank 计算局部结果,在 row-parallel 边界同步。

权重装载无运行时 collective
RANK 0R9700 / gfx1201
GQA Q05KV0 · GDN QK 03 · V 011
RANK 1R9700 / gfx1201
GQA Q611KV1 · GDN QK 47 · V 1223
RANK 2R9700 / gfx1201
GQA Q1217KV2 · GDN QK 811 · V 2435
RANK 3R9700 / gfx1201
GQA Q1823KV3 · GDN QK 1215 · V 3647
RCCL无运行时 collective
STAGE 1 / 5

Column/row-parallel 线性层按输出或输入维切片;norm 等小权重可复制。

模型算法

GDN recurrence、GQA、partial RoPE、FFN、MTP 训练头、vision encoder。

vLLM 实现

TP 切分、scheduler、hybrid cache manager、PagedAttention、prefix caching、graph capture、sampling。

ROCm / RDNA4

gfx1201 编译目标、HIP runtime、Triton AMD attention/GDN kernels、RCCL collective 与设备内存。

07

MULTIMODAL / THINKING / MTP

三条容易被放错位置的路径

视觉处理发生在语言 backbone 之前;思考模式是 token/模板行为;MTP 是候选 token 生成与验证路径。

IMAGE / VIDEOpatchify16×16 spatial · temporal patch 2
VISION ENCODER27 layershidden 1152 · 16 heads
MERGE / PROJECT[V, 5120]spatial merge 2
TEXT + VISUALembedding stream[T, 5120]
SHARED BACKBONE64 hybrid layers同一 causal token 序列
THINKING MODE

不是另一套神经网络

Qwen3.8 默认 thinking;chat template 和 API 参数控制是否生成/保留 reasoning tokens。它们仍沿同一 64 层自回归路径,占上下文与 decode 轮次。

MTP

主模型之后的候选路径

config 显示 1 个 MTP hidden layer;部署只有启用 speculative config 时,vLLM 才用 MTP 产生多个候选并由主模型验证。当前 27B profile 的 speculative config 为空。

VISION TOKENS

不是 vocab 查表得到的像素 token

processor 生成视觉输入与占位;vision encoder 输出 5120 维向量,替换语言 embedding 流中的视觉位置,然后一起进入 backbone。

08

EVIDENCE MATRIX

每个结论,都知道自己站在哪一级

官方资料、配置/源码推导、教学类比和服务器快照严格分开;本教程不复述或编造 benchmark。

结论证据等级来源 / 推导
27B dense、64 层、16×(3 GDN + 1 GQA)、heads 与维度官方事实Qwen 官方模型卡 ↗
layer_types、partial RoPE、mamba_ssm_dtype、vision config官方事实Qwen 官方 config.json ↗
FP8 E4M3、dynamic activation、128×128 weight block官方事实FP8 config + quantization metadata ↗
GDN 必须先衰减状态,再从衰减状态读出误差预测官方事实Gated Delta Networks · 公式10 ↗
GQA 输出门=sigmoid;GDN 输出门=RMSNorm后SiLU;融合残差/FFN顺序源码推导vLLM 0.28.0 · 2026-08-31安装源码复核 ↗
统一 scheduler、chunked prefill、prefix caching、AMD 支持官方事实vLLM V1 guide ↗
hybrid cache 的 layer-specific blocks 与 page-size 约束官方事实vLLM hybrid KV design ↗
TP4 head 切分、GDN HIP 分派、row-parallel collective源码推导vLLM Qwen3.5 implementation ↗
vLLM 0.28.0、TP4 shared config、4×gfx1201、27B profile KV=FP8 / Triton attention服务器快照只读 SSH · 2026-08-28 07:40 UTC

术语表

Prefill
并行处理 prompt token,建立后续 decode 所需 cache/state。
Decode
每个活跃序列每轮推进一个新 token,并更新状态。
GDN
Gated DeltaNet;用固定大小矩阵状态执行门控 delta 更新。
GQA
Grouped-Query Attention;多组 Q heads 共享较少 K/V heads。
KV page
保存固定数量 token 的 K/V 的物理 cache 块。
Continuous batching
每个 engine step 动态重组正在运行与新到达的请求。
Prefix caching
按完整 cache block 复用相同 token prefix 的已计算状态。
TP4
tensor parallel size 4;一个模型运算跨四个 rank 切分。
MTP
Multi-Token Prediction;为 speculative decoding 提供多个候选 token。