完整深入材料 · 保留原页与全部停点。回到相关主讲
一个请求的当前记忆,可以占到多少空间?
N54/b0 · 先核对模型规格
上一页的一列缓存,换成字节到底有多大?先读四张规格卡:三十二层,每层八组K/V,每组一百二十八个数,每个数按BF16占两字节。我们先只算一个token;它在每层都要留下K和V两份。这是本页指定的教学配置,不是所有模型都采用这四个数。
教师备课:指图与模拟问答
指图与推进 · 不朗读逐项指四张规格卡,再指左侧一个token的K与V;此时不提前读还未出现的乘法。
N54/b1 · 从一个 token 逐维相乘
两份K/V,乘三十二层,乘八组,乘每组一百二十八个数,最后乘每数两字节。注意首尾两个二:前面的二来自两份对象,最后的二来自每个数占的字节。结果是131072字节,也就是每token 128KiB。这样,上一页的一列状态就变成了可以按长度加总的空间成本。
进一步解释
KiB=1024 bytes,所以131072÷1024=128 KiB。这里按指定存储格式估算KV数据本体,尚未加入分配空余、临时工作区等开销。
教师备课:指图与模拟问答
指图与推进 · 不朗读推进到b1,沿乘法逐项读;分别指首项K/V两份和末项bytes/数,再指128 KiB/token结果。
N54/b2 · 长度与独立请求数进入账本
现在把输入和已生成、已进入缓存的部分合起来,共8192个token。乘刚才每token的成本,一个请求就是1GiB。如果八个独立请求都有同样长度,各自保存缓存,总共就是8GiB。右边模型权重可以共享一份;八份不同上下文状态,不能因为参数相同就自动合并。
进一步解释
8192×128 KiB=1 GiB,GiB=2³⁰ bytes;前面训练账本的GB是十进制单位。若长度改为32768个已缓存token,同配置为4 GiB,这是延伸算例。
教师备课:指图与模拟问答
指图与推进 · 不朗读推进到b2,先指8192已缓存token和输入加生成部分,再指共享权重框与八份缓存;不指未出现的32K延伸例。
N54/b3 · 生成继续,缓存继续增长
回答还没结束,已缓存长度会接着增长。请求刚进来时,我们通常不知道最后会生成多长。那空间是一开始按最大长度整块预留,还是需要多少再逐步分配?下一页先保留逻辑上的token顺序,再把它与显存中的物理位置分开。
教师备课:指图与模拟问答
指图与推进 · 不朗读推进到b3,指缓存条新增的金色段和增长方向;由“最终长度未知”转到下一页的块分配。
补充推导、边界与来源
本课指定教学配置为 L=32 层、每层 h_KV=8 组、每组维度 d_head=128,每数 BF16 占 b=2 bytes。KV 的常用存储估算为 $M_{KV}=2LTh_{KV}d_{head}b$,T 是已经进入缓存的输入与生成 token 总长度。首项 2 表示 K 与 V 两份,最后的 b 表示每数存储字节。
每 token:2×32×8×128×2=131072 bytes=128 KiB。8192 token:1073741824 bytes=1 GiB;32768 token=4 GiB。8 个互不共享、各长 8192 token 的请求共需 8 GiB KV。权重可以共享,当前上下文状态不能任意合并。
KiB=2¹⁰ bytes,GiB=2³⁰ bytes;与训练账本的十进制 GB 分开。GQA 是这种减少实际 KV 头/组数的一类架构安排,但本配置不是所有 8B 模型的固定规格。
本页证据与条件
指定配置的教学算例:32 层、8 KV 组、128 维、BF16;二进制 KiB / GiB