ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

第 12 篇:推理引擎重启不丢记忆(零门槛入门系列)

第 12 篇:推理引擎重启不丢记忆(零门槛入门系列) 上一篇第 11 篇《多轮对话为什么第二轮更快》 下一篇第 13 篇《一次猜几个字草稿 验证》一句话导读推理引擎内存里的记忆会随进程一起消失。把它落盘成快照snapshot重启后先读目录找回匹配的那一段就能接着上次的位置继续聊——省下的是把前面所有词重算一遍的力气。关键词推理引擎入门、大模型推理、快照snapshot、落盘、目录、恢复restore、大小估算第 11 篇让第二轮对话复用了第一轮的成果也定下了最久没用过就收走的淘汰规则。可这套机制有个致命弱点它全在内存里——进程一停就没了。服务要升级、要重启、要挪机器聊到一半的会话就得从头再来。这一篇讲怎么给它存档。① 一句话概念把记忆落盘成快照重启后接着聊。② 起点打游戏的人都会存档玩过单机游戏的人对这件事再熟不过。你打到第八关眼看要关机出门——你不会指望下次开机还接着第八关而是存一次档。等你回来读档直接从第八关中间继续打前面七关不用重打。存档有三处讲究。第一存档要占地方所以你不会每走一步都存也不会把所有存档都留着旧的删掉——存和删是一对。第二存档得有个格式文件里得写清楚这是第几关、人物在哪、背包里有什么不然读回来是一堆乱码。第三读档比继续玩慢从硬盘里翻出来总要花点时间但再慢也比从第一关重打快——只有省下的重打量足够大读档才划算。③ 伪代码淘汰时存重启时读淘汰时: 段 最久没用过的 KV 段 写快照(目录文件, 数据文件, 段) # 落盘进程结束也不丢 重启时: 目录 读快照目录(目录文件) 匹配段 按前缀指纹 找回 目录里的一段 若 匹配段 存在: 恢复KV(匹配段) # 接着上次的位置继续算逐行要点段 最久没用过的 KV 段写快照的时机是被淘汰的时候。反正这段要腾出内存了不如顺手存到硬盘上——丢之前先留个底和第 11 篇的淘汰规则是同一条线。写快照(目录文件, 数据文件)分成两个文件写。目录文件很小只记有哪些段、在数据文件里的位置数据文件大装真正的内容。好处是找东西时只读小目录不用翻整个大文件。按前缀指纹 找回 目录里的一段找的钥匙还是前缀指纹。和第 11 篇一模一样——同一段内容指纹相同所以能对上。恢复KV(匹配段)把硬盘上的内容读回内存缓存然后继续算。省下的就是把前面所有词重算一遍的时间和第 11 篇是同一笔账。从内存到快照、再到重启恢复的整条路如图 1 所示。图 1内存 KV → 快照 → 重启恢复最左边是进程 A 的内存 KV它被淘汰时整段写出去中间是快照文件分成小小的目录和大块的数据两部分最右边是进程 B——先读目录、对上前缀指纹再把数据读回内存接着继续聊。页面底部的横条给出大小估算式层数 × 长度 ×头数 × 每头维度× 每个数字的字节数——这只是 K、V 里的一份完整快照还要再乘2。④ 纸笔实验必做任务一道估算题给定一份快照的参数32 层、8192 个词、每个词每一层有2 × 512个 8 位元素2 K、V 各一份512 头数 × 每头维度。算式先算总元素数再乘每个元素的字节数总元素数 层数 × 长度 ×头数 × 每头维度× 2 32 × 8192 × 512 × 2 268,435,456个元素每个 8 位元素占 1 字节 ⇒ 总字节数 268,435,456 字节换算268,435,456 ÷ (1024 × 1024 × 1024) ≈0.25 GiB若按 1 GB 10⁹ 字节算约 0.27 GB预期结果约0.25 GiB。把公式背下来——层数 × 长度 ×头数 × 每头维度× 每元素字节数 × 2K 与 V换一组参数直接代进去就行。两个观察① 快照大小与长度成正比聊得越长存档越大② 这只是每个元素占 1 字节的版本元素占得越多存档成比例变大。所以要不要存取决于能不能省下足够多的重算。可选 REPL 版Python 伪代码层数,长度,头数乘每头维度,每元素字节,两份32,8192,512,1,2总字节层数*长度*头数乘每头维度*每元素字节*两份# 两份 K 与 Vprint(总字节,总字节/1024**3)# 预期 268435456 0.25⑤ 进阶锚点进阶锚点本篇概念在《30 天手搓推理引擎》Day 12里被真正实现——12-1 跨进程恢复服务重启了会话不能断/12-2 磁盘 KV 快照格式0.47 GB 从哪来/12-3 复现 13.1×跨进程恢复实测怎么做含口径拆解。入门版到这里就够了进阶版会多出快照文件的真实字段与目录格式、跨进程恢复的完整实现以及复现恢复带来约 13.1 倍加速那组读数的方法。其中锚点里那个 0.47 GB 用的是另一套几何口径层数 × 词数 ×头数 × 每头维度× 每元素字节 × 2与本篇 ④ 的 0.25 GiB 不是同一个例子——属引用不是本篇结论。想动手 → 仓库https://gitee.com/pei-xiaoguang/kestrel-llm从 Day 1 开始。下篇预告第 13 篇换个思路——既然逐词生成一次只能吐一个字那能不能先猜几个、再一次性验证猜对了就白赚。
返回列表