工作清單

DeepSeek V4.1:40层模型,读入只跑20层?CED架构与KV Cache优化

逐字稿文字預覽

Hello,大家好,我是Tommy。今天很高興跟大家分享最新的前置內容。
那上一次我們講過Deepseek V4.1 Flash,怎麼降低KP Cache的存儲開銷。
那麼這一次我們繼續看它怎麼減少脫離計算和緩存成本。
那核心呢就兩件事。第一個就是重新計算上下文的時候呢,只計算前一半的層。
那麼後面一半是直接附用已有的結果。
那第二個呢就是一部分短期緩存不再長期保存,而是在需要時重新計算。
那最终呢
计算量降低约一半
持久化缓存降到原来的1%
同时性能基本不受影响
那么这里呢
最关键的是两个问题
那第一个就是
为什么只计算一半的层就够了
第二个呢
为什么重新计算
反而比把缓存一直存下来更划算
那下面我们就直接来看它的具体设计
上一集那个编码agent
修一个仓库里的bug
跑了三个小时
上下文堆到50万token
上一集算的是它要存多少
40层只存4份KV
每个Token890字节
这一集算的是它要读多少
上一集结尾留了一句
4份里解码器那一份
还是从编码器投影来的
这意味着读入新内容时
只用跑前20层
后20层不用算
这一招叫CED
全称因果编码器解码器
这一集就讲它
它把40层分成前后两半
前20层叫编码器
负责读上下文
后20层叫解码器负责生成
解码器要用的KV
从编码器的输出投影出来
所以读入的时候
后20层可以不跑
为什么能这么干
代价是什么
就是这一集的内容
先看读入这一步为什么贵
Agent每掉一次工具
工具的返回都要接到上下文后面
模型再把新内容读一遍
也就是上一集说过的prefill
有缓存的时候
只读新增的那一段
缓存一旦没命中
整段50万都要重算
一次任务几十次工具调用
就是几十次读入
读一次
40层每一层都要算
上下文越长
这比算力越大
这还只是算力
50万token的KV还得留着
等下一轮
甚至等第二天用户回来接着聊
所以它要从显存落到硬盘上
V4的线上部署里
这份缓存要在硬盘上留72小时以上
显存装不装的下
硬盘存不存的起
机器之间搬不搬的动
三处都是压力
算力和硬盘两笔成本
问题来了
独入这一步
V4.1凭什么算力砍一半
硬盘砍到1%
先说算力
2024年有篇论文叫Yoko
意思是你只缓存一次
它把模型前后两半分开
后半层不再各自算KV
直接用前半层算好的那一份
后半层在独入阶段
就可以整个跳过
代价是后半层共用同一份KV
每一层没法有自己的一份
能存的信息就少了
CD顺着这个思路改了两处
解码器要用的全局KV
拿编码器第20层的输出
乘一个投影矩阵得到
第一处改动
投影矩阵可以逐层不同
每层能有自己的一份KV
容量比YOKO共用一份大
第二处
滑动窗口那条局部分支
不投影
每一层还是自己算
局部信息的计算深度保住了
在V4.1里
配合上一集讲的共用
真正做投影的是解码器那一个负层
其余层沿用它
独入阶段编码器20层算完
解码器要的全局KV顺手投影出来
后20层根本不用跑
算力从40层变20层
激活参数从160亿降到80亿
生成阶段才用满160亿
这里有个缺口要补
滑动窗口KV每一层自己算
可独入阶段解码器根本没跑
解码器20层的滑动窗口KV就是空的
生成第一个Token时
解码器要用到前面128个Token的窗口KV
手里却是空的
想精确补上
就得让解码器
把前面那些token重新算一遍
算多少
窗口是一层套一层的
解码器第一层的一个位置
只看它前面128个
第二层的同一个位置
看的是第一层算出的那128个
而那128个
各自又看过更前面的128个
所以第二层实际牵扯到前面256个
一层多128个
到第二层就是20乘128
2560个
也就是说
要把第20层的窗口KV算准
得从2560个Token之前开始
把解码器重新跑一遍
Agent的场景是多轮短消息
每轮新内容可能就几百个Token
为了补窗口再多跑2560个
这比开销不小
这个版本的做法叫
滑动窗口有界回放
不回退2560个
只回退末尾128个
把这128个Token的编码器输出
送进解码器跑一遍
开销是128个Token乘20层
跟50万笔可以忽略
窗口也只在这128个里面看
再往前的一律不看
因为再往前的token没经过解码器
没有东西可看
回放段里的第一个token
窗口里就只有他自己
越往后能看到的越多
到末尾正好是完整的128个
算出来的滑动窗口KV只拿来生成
不存进缓存
为什么敢
因为窗口的有效视野远比理论知晓
有篇叫PowerAttention的工作专门测过这件事
理论上第20层的视野
能到2560个token之外
实际上远处的信息
一层一层传过来
早就衰减到可以忽略
远处的东西
本来就归全局分支管
窗口只负责眼前这一段
这样补出来的KV
和完整跑一遍
不完全一样
报告说实测几乎不掉点
为了保险
后训练时
把同样的回放模拟进去
模型是在这种近似下练出来的
顺便说一句
这两集提到的前变量
稀疏注意力
后训练里的这种训练感知
都出自DeepSeek这套技术战
我做了一门DeepSeek专题的实战课
从MLA MOE ROPE这些核心机制
讲到GRPO对齐训练
再到VLLM SGLAN固鼓鼠
共计11张配项目代码
想把这两集背后的底子补齐
链接在简介和置顶评论里
算力说完
说硬盘
这一半省得更巧
先看V4是怎么存的
落到硬盘的缓存
叫持久化缓存
分两类
全局KV整段存
只要新请求的开头和缓存里的一样
就整段复用
滑动窗口KV不整段存
只在两个位置各存128个
一段提示词的末尾
一段回答的末尾
为的是重新生成和多轮接续
两类各自淘汰
最久没被用到的先删
硬盘配的够大
两类都能留72小时以上
就这样
滑动窗口KV还是占了持久化缓存将近一半
它没有压缩
每个位置128个Token
每一层各一份的8比特KV原样存
多轮对话每轮都要存一份
轮次多每轮短分数就多
问题处在访问模式
全局KV是常委复用
一天以后用户回来还会命中
滑动窗口KV只在一次绘画里
几分钟之内被用到
绘画一结束或者进到下一轮
它就再也不会被用到
把一份分钟级的东西放进保留72小时的缓存
又贵又没用
V4的报告提过干脆不存
要用再算
叫做Zero SWA Catching
可精确重算
要按层数乘128个token跑一遍完整前向
线上扛不住
这个版本改了两条
第一条
滑动窗口KV不再进硬盘
改放进一个内存池
所有机器各拿出10%的内存拼成一个池子
注意是机器的内存不是显存
池子总量比硬盘小得多
但有效期只有几分钟
过期立刻腾给新绘画
真实负载下这种高周转
够服务绝大多数正在进行的绘画
全局KV照旧流硬盘
保证72小时
第二条池子小必然有未命中
未命中指的是全局KV硬盘上还在
滑动窗口KV在池子里已经过期
编码器也是20层
精确补齐同样要2560个
现在只回放128个
补出来的窗口KV是近似的
缓存到哪里为止
回放就从哪里开始
起点不同
补出来的KV就略有不同
报告说这对回答质量几乎没有影响
还用了一个说法
把灾难性的未命中
变成了优雅又便宜的降级
正因为兜底便宜
才敢把滑动窗口KV从硬盘上拿掉
两种回放别混
解码器回放每次独入都做
补的是解码器的窗口KV
因为解码器从来不跑独入
编码器回放只在未命中识做
补的是编码器的窗口KV
因为硬盘上不再存它
两个都只回放末尾128个
都基于同一个判断
窗口的记忆很短
1%就是这么算出来的
不存滑动窗口KV
19化缓存少一半
剩下的全局KV
上一集讲过
是上一代的四分之一
二分之一乘四分之一
八分之一
把三层存储放在一起看就清楚了
显存里放正在用的全局KV
每个Token890字节
机器内存里放几分钟内会用的
滑动窗口KV
过期就扔
硬盘上放几天内可能会用的全局KV
留72小时
三层各管一个时间尺度
每一层只存它该存的
回到那个50万Token的绘画
看两个时刻
第一个时刻
工具返回一段新内容
读入直跑编码器20层
激活80亿参数
解码器要的全局KV顺手投影出来
滑动窗口回放128个
开始生成
第二个时刻
第二天用户回来接着聊
硬盘上取出来的只有全局KV400多兆
滑动窗口那份现算还是128个
两处近似
报告给的结论是性能与基线相当
读入的计算量减半
部署上还把视觉编码读入生成分成三段
各自扩缩容
读入密集的agent负载可以单独加机器
多轮短消息的agent绘画
就是报告点名要服务的场景
局限一共三条
第一条
有界回放是近似
尤其是缓存和新内容接缝的地方
报告承认还没充分验证
接下来要加压力测试
也要在真实负载里继续观察
后两条是我自己的判断
第二条
收益跟场景绑定
多轮每轮短的agent绘画收益最大
一次性为一份几十万token的长文档
省的主要是算力那一半
硬盘那一半的好处基本用不上
第三条
10%的内存池
几分钟的有效期
72小时的硬盘保留
都是按Deepseek自家的线上负载掉出来的
换一种负载分布
未命中率和回放开销都要重新测
回到开头的问题
算力砍一半
靠CED解码器的全局KV
从编码器投影
独入只跑20层
硬盘砍到1%
靠不存滑动窗口KV
为民众就回放128个补出来
再乘上上一集全局KV的1%
两件事背后是同一个判断
滑动窗口的记忆很短
短到可以现算
上一集的共用
加上这一集的回放
长上下文的存和算一起压了下来
成绩还没有掉
如果这一集让你有点收获
欢迎点赞转发
关注
评论区也聊聊
换你来做部署
滑动窗口KV
你会存硬盘保命中率
还是不存
靠回放节省硬盘
好
我们下期继续

來源:transcript.txt

本次執行流程與問題處理

  1. 下達指令

    指令:videonote https://www.youtube.com/watch?v=ZD471Y57pdU --language zh

    來源:https://www.youtube.com/watch?v=ZD471Y57pdU

    辨識語言:zh | 參數:--language zh

  2. 預期流程

    依指令產生的處理順序:

    1. 下載與語音辨識
    2. 來源選擇與品質檢查
    3. 文字校正與句子單元
    4. 筆記與發布
    5. 公開網頁發布
  3. 1. 下載與語音辨識

    工具:videonote-transcribe-url(主辨識管線:下載、Whisper 辨識與選稿)

    處理:下載音訊、以 Whisper 辨識並選出最佳逐字稿

    產出:yt_dlp_meta.json(影片元資料)、audio_16k_mono.wav(16kHz 單聲道音訊)、transcript.whisper.json(Whisper 辨識結果)、transcript.json(正式逐字稿)、transcript_selection_report.json(來源選擇報告)

    耗時:38.5 秒

    關係:依序執行

    結果:完成

  4. 2. 全文快速校讀

    工具:videonote_rapid_transcript_review.py

    處理:先速讀完整逐字稿,再修正高可信突兀詞句並列出待確認項目

    產出:rapid_transcript_review_report.json(產出檔案)

    耗時:44.2 秒

    關係:依序執行

    結果:完成

  5. 3. 建立句子單元

    工具:videonote-build-sentence-units

    處理:將逐字稿切成帶時間軸的句子單元

    產出:sentence_units.json(句子單元)

    耗時:0.3 秒

    關係:依序執行

    結果:完成

  6. 4. 句子密度平衡

    工具:videonote_balance_sentence_units.py

    處理:平衡句子長度與密度

    產出:sentence_units.json(句子單元)

    耗時:0.3 秒

    關係:依序執行

    結果:完成

  7. 5. 時間軸稽核

    工具:videonote_timeline_audit.py

    處理:檢查時間軸與音訊對齊

    產出:timeline_audit_report.json(時間軸稽核)

    耗時:0.3 秒

    關係:依序執行

    結果:完成

  8. 6. 品質檢查

    工具:videonote_controlled_quality.py(檢查時間軸與品質)

    處理:檢查語言、時間軸與可讀性品質

    產出:controlled_quality_report.json(品質報告)、language_sanity_report.json(語言檢查)

    耗時:0.4 秒

    關係:依序執行

    結果:完成

  9. 7. 播放時間軸回填

    工具:videonote_rebase_display_timeline.py

    處理:將網頁播放時間軸回填為校正字幕時間

    產出:display_timeline_rebase_report.json(時間軸回填報告)

    耗時:0.4 秒

    關係:依序執行

    結果:完成

  10. 8. 逐字稿交叉檢查

    工具:videonote_cross_check_transcript.py

    處理:交叉檢查逐字稿與來源字幕

    產出:transcript_crosscheck_report.json(交叉檢查)

    耗時:0.4 秒

    關係:依序執行

    結果:完成

  11. 9. 來源句整理

    工具:videonote_prepare_source_entries.py

    處理:整理來源句子供時間軸與頁面使用

    產出:sentence_units.json(句子單元)

    耗時:0.4 秒

    關係:依序執行

    結果:完成

  12. 10. 生成筆記摘要

    工具:videonote-generate-note(生成筆記摘要)

    處理:生成筆記摘要與重點

    產出:note.md(筆記 Markdown)、note.html(筆記 HTML)

    耗時:128.8 秒

    關係:依序執行

    結果:完成

  13. 11. 建立筆記頁面

    工具:videonote-render-html(產生筆記 HTML)

    處理:產生可閱讀的筆記 HTML 頁面

    產出:note.html(筆記 HTML)

    耗時:0.9 秒

    關係:依序執行

    結果:完成

  14. 12. 發布公開頁面

    工具:videonote-publish(發布公開頁面)

    處理:發布到公開網站與每日列表

    產出:公開筆記網址、result.json(管線結果)

    耗時:1.0 秒

    關係:依序執行

    結果:完成

手動來源字幕

自動來源字幕

Whisper 字幕

Qwen 字幕

Parakeet 字幕

MOSS 字幕

聲學時間證據(PyAnnote / WhisperX)

校正前後逐字稿

目前待解決問題與初步改善方向

進一步精進字幕與筆記
使用 Workbench 上傳校正字幕、中文參考稿或回饋 SRT,重新產生雙語與學習單元。
開啟 Workbench