LogoCookLLM文档
LogoCookLLM文档
首页CookLLM

原理精讲

词元化
Tokenization 基础BPE 算法详解GPT 系列 TokenizerBPE 训练工程化
模型架构
Transformer LM
从 token ids 到 logitsEmbedding 与 LM Head
Attention 机制
Self-Attention 到 GQAAttention Sink
位置编码
位置编码基础RoPE 数学推导RoPE 代码实现长度外推
GPU 编程基础
GPU 架构基础张量布局Triton 入门:向量加法
FlashAttention
Flash Attention 原理详解从朴素实现到 Auto-TuningBlock Pointer 与多维支持Causal Masking 优化Grouped Query Attention反向传播实现
分布式训练
数据并行ZeRO 优化器全分片数据并行张量并行流水线并行多维混合并行
推理优化
KV CacheContinuous BatchingPagedAttention

动手训练

概述
预训练
预训练数据Tokenizer 训练模型架构数据流水线训练循环监控与验证
X (Twitter)
系统工程推理优化

PagedAttention

会员专享

按最大长度预留连续显存只用上了两三成,用操作系统的分页思路把利用率做到 96%

在权益中心获取代码

前两章我们做了两件事:用 KV cache 省掉重复计算,用 continuous batching 让 GPU 不再空转。但每一章的结尾都指向同一个没解决的问题:这些缓存到底该怎么在显存里摆放。

这一章要回答的就是它。我们会先算清楚显存到底被谁吃掉了,看到一个相当难堪的事实:现有系统里真正用于存 token 的显存只有两三成。然后引入一个四十多年前操作系统就用过的办法,把利用率拉到 96%,顺便白送一个意想不到的能力。

显存到底被谁吃掉了

先做一道算术题,感受一下 KV cache 有多占地方。

登录以继续阅读

这是一篇付费内容,请登录您的账户以访问完整内容。

拿 OPT-13B 举例,算一个 token 要存多少:KKK 和 VVV 各一份,每份的宽度是 hidden size 5120,每一层都要存一份、共 40 层,FP16 每个数 2 字节。乘起来:

2×5120×40×2 B=800 KB2 \times 5120 \times 40 \times 2\,\text{B} = 800\ \text{KB}2×5120×40×2B=800 KB

一个 token 就要 800 KB。OPT 支持生成到 2048 个 token,所以一个请求的 KV cache 最多能吃掉 1.6 GB。

再看这块卡上还剩多少地方。一张 A100 40GB,装完 13B 模型的 FP16 权重(约 26 GB,占 65%)后,留给 KV cache 的空间只有十几 GB。按每请求 1.6 GB 算,同时只能服务十来个请求。

这就是第一层认识:KV cache 不是什么边角开销,它和模型权重是同一个量级的对手。而上一章刚讲过,batch 越大吞吐越高,所以能同时装下多少请求,直接决定了这台机器值多少钱。

Continuous Batching

静态批处理让 GPU 大量空转,迭代级调度、selective batching 与 chunked prefill 怎么把它填满

概述

cookllm-bento 训练框架介绍

目录

显存到底被谁吃掉了
装得下的比你以为的还少
这个问题,操作系统四十年前就解决过
PagedAttention:把缓存切成块
注意力怎么在散落的块上算
分页白送的能力:共享
块该切多大
代价:这不是免费的抽象
一个后续:prefix caching 的演进
总结