本文深入探讨了大型语言模型(LLM)的推理过程,从 token 调度到采样输出,详细追踪了每一步张量维度的变化。文章首先介绍了连续批处理(Continuous Batching)的必要性及其调度策略,接着解释了 Paged Attention 如何借鉴虚拟内存思想管理 KV Cache。随后,文章剖析了 Embedding、Attention、FFN 和 Sampling 等关键组件的工程实现,揭示了它们在处理张量维度变化时的优化策略。最后,文章指出理解这些维度变化有助于深入理解 MoE、张量并行、长上下文优化等高级概念,并强调了工程优化的核心思路在于减少显存读写、提升计算强度和按需分配资源。
从 token 调度到采样输出,追踪每一步张量维度的变化,搞懂 LLM 推理到底在算什么
01
为什么需要 Continuous Batching
批处理能提升 GPU 利用率——复用权重来均摊显存访问开销。但生成式任务的输出序列长度不可预测且差异巨大,传统"齐步走"的批处理玩不转。
在 vLLM 调度器的视角里,没有 Prefill 和 Decode 的区分。它只盯着两个数字:num_computed_tokens(已经算过的)和num_tokens(当前应该有的)。每一步的目标就是让前者追上后者。差多少就调度多少,直到 token 预算用完。
调度受四个硬约束限制:
→最大并发请求数max_num_seqs
→Token budget — 单步所有请求的 token 总量上限,控制 GPU 计算量
→模型最大序列长度max_model_len
→是否还有空闲的 KV Cache blocks
调度的核心洞察
把调度粒度从 request 级下沉到 token 级,请求完成后槽位立刻释放,新请求无缝补入。这就是 continuous batching。不是什么高深的发明,是问题逼出来的自然选择。
02
Paged Attention:显存的虚拟内存
KV Cache 不能一次性申请所有显存——你不知道生成会多长。Paged Attention 借鉴操作系统的虚拟内存思想,按 block 分配、按需增长。
vLLM 启动时预分配 KV Cache,shape 为[num_layers, 2, num_blocks, block_size, num_kv_heads, head_dim]。block_table 没有num_layers维度——同一个 token 在所有层的 KV 值都存在同一个物理块位置。
推理过程中,slot_mapping告诉 kernel 把新产生的 KV 写到哪个 slot,block_table告诉 kernel 去哪些物理 block 读取已有的 KV Cache。一套映射管读写。
与操作系统的类比
虚拟地址 → 逻辑块号,页表 → block_table,物理页帧 → 物理块 ID。操作系统的虚拟内存解决内存不够用的问题,Paged Attention 解决 KV Cache 显存碎片化的问题。同一个思路。
03
从文本到向量:Embedding
用户输入的 prompt 先经过 BPE 分词变成数字 ID,再通过查表变成向量。Embedding 本质是索引取值,不是矩阵乘法。
BPE 的训练方式很直觉:从字符级开始,反复把出现频率最高的相邻 token 对合并成新 token,直到词表达到目标大小。Llama 3 的词表有 128256 个 token。
vLLM 把 batch 中所有请求的有效 token 拼成一维长向量,彻底消除 padding。所以 Embedding 的输入不是[batch_size, seq_len]而是[num_sched_tokens]——所有 token 打平后直接查表。
04
Attention:推理最复杂的环节
Attention 的数学不复杂,但工程实现极其精巧。FlashAttention 用 kernel 融合和分块计算绕开内存墙,而 Prefill 和 Decode 的计算特征差异巨大。
整个 Attention 流程在理论层面只有六步:GQA 共享 → Q-K 点积 → Scale → Mask → Softmax → 乘 V。但每一步的工程实现都有讲究。
GQA 让 1 个 KV Head 对应 4 个 Q Head,物理上不复制数据,通过索引映射kv_head_idx = q_head_idx / (num_heads / num_kv_heads)实现。Llama 3-8B 有 32 个 Q Head 和 8 个 KV Head,KV Cache 体积压缩到原来的 1/4。
FlashAttention 把从 Q-K 点积到乘 V 的 5 步融合成一个 CUDA kernel,中间矩阵 S 和 P 不写回 HBM。O(N²) 的中间结果留在 SRAM,只把最终输出写回显存。这是绕开内存墙的办法。
Flattened 到请求维度的切换
进入 Attention kernel 之前,需要从全局 Flattened 视角[num_sched_tokens, ...]切换到请求维度。Attention 计算本质上是请求内部的操作——不同请求的 KV Cache 不能交叉。vLLM 通过cu_seqlens(累积序列长度)数组实现变长序列的请求级隔离,无需真正 reshape 为规整张量。
Prefill 与 Decode 的本质差异
| 阶段 | query_lens | seq_lens | 计算特征 | 瓶颈 |
| Prefill | num_prompt_tokens | num_prompt_tokens | 稠密矩阵乘法 GEMM | 计算量 |
| Decode | 1 | 历史 token 总数 | 矩阵向量乘法 GEMV | 显存带宽 |
Decode 阶段每次只处理 1 个 token,计算量很小,但需要把整个 KV Cache 从 HBM 搬到 SRAM。随着序列变长,搬运的数据量持续增长——这就是为什么 Decode 阶段是访存密集型。Prefill 则相反,计算量大但比例合理,属于计算密集型。
残差连接的物理意义
不要推翻重来,在原有基础上学"修正值"。ResNet 让网络堆到 100 层以上还不梯度消失,后来的 BERT(24 层)和 GPT(96 层+)才敢设计得那么深。Scaling Law 要能跑起来,底层得有残差连接撑着。
05
FFN:参数和计算量的大头
Llama 3-8B 的 MLP 层参数占比约 70%,FLOPs 占比也约 70%。三个线性层 + SwiGLU 激活,是模型计算最重的部分。
FFN 的计算逻辑很直白:Gate 和 Up 两条并行线性变换,Gate 经过 SiLU 激活后和 Up 逐元素相乘,最后 Down Proj 投影回原维度。这就是 SwiGLU。
vLLM 的工程优化点:把W_gate和W_up按列拼接,两次中等规模的矩阵乘法变成一次宽矩阵 GEMM。Activation 用silu_and_mulkernel 在 SRAM 上直接输出点乘结果,不写回 HBM。Residual Add 和下一步的 RMSNorm 也融合成一个 CUDA kernel。每一步都在省一次显存读写。
06
Sampling:从 logits 到下一个 token
Transformer Block 的输出经过 LM Head 映射到整个词表空间,得到 128256 维的 logits。然后经过一系列后处理和采样,最终选出一个 token。
LM Head 只需要每个请求序列最后一个 token 的特征来预测下一个词,所以进入 LM Head 前会做一次 Gather 操作(Speculative Decoding 等场景除外)。权重矩阵[4096, 128256]极其庞大,vLLM 通常用张量并行按列切分来加速。
采样流程有几个实用的设计点。Greedy 先行——在 temperature 缩放之前先做 argmax,避免精度损失。整个 batch 都是 greedy 的话,后续步骤全部跳过。min_p是唯一的 argmax-invariant 处理器:阈值自适应,模型确定时砍得多,不确定时砍得少,但 argmax 结果永远不变。Top-K 和 Top-P 做硬截断,最后 Gumbel-Max 保证随机性。
结构化输出的工程实现
白名单过滤配合 grammar bitmask,每一步动态计算当前合法的 token 集合。比如情感分类只允许输出 “positive” “negative” “neutral” 对应的 token,多选题只允许 A B C D。这比在 prompt 里要求输出格式靠谱得多。
07
推理之外:这些基础如何延伸
理解了推理流程中每一步的张量维度变化,很多"高级"概念就变得自然。MoE、张量并行、长上下文优化,本质上都是在不同维度上拆分同样的计算。
理解了推理中每一步张量维度的变化,很多"高级"概念就没什么神秘的了。张量并行就是在不同轴上切分:Fused QKV 和 Fused Gate/Up 按列切分,O_Proj 和 Down_Proj 按行切分后 AllReduce。MoE 就是在 FFN 层加路由,每次只激活部分参数。长上下文的 chunked prefill、Flash-Decoding、Sequence Parallelism 是在不同维度拆分 prompt,解决的问题不同,但都用 Log-Sum-Exp 做重新归一化。
推理的原理说到底就那些。工程优化的核心思路也一致:减少显存读写,提升计算强度,按需分配资源。搞清楚每一步 shape 怎么变,剩下的就是工程取舍。
最后
我在一线科技企业深耕十二载,见证过太多因技术更迭而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。
我整理出这套 AI 大模型突围资料包:
- ✅AI大模型学习路线图
- ✅Agent行业报告
- ✅100集大模型视频教程
- ✅大模型书籍PDF
- ✅DeepSeek教程
- ✅AI产品经理入门资料
完整的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
为什么说现在普通人就业/升职加薪的首选是AI大模型?
人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。
智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200%,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。
AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。
资料包有什么?
①从入门到精通的全套视频教程⑤⑥
包含提示词工程、RAG、Agent等技术点
② AI大模型学习路线图(还有视频解说)
全过程AI大模型学习路线
③学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的
④各大厂大模型面试题目详解
⑤ 这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能 突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓**