工作清單

DeepSeek-V4.1 Flash:迄今为止最疯狂的优化 - bycloud - 英语原声/中配 p01 配音

逐字稿文字預覽

几个月前我们惊掉下巴
当时发现Deep Seek
基本上重新设计了整个V4模型架构
核心就是让百万Token上下文便宜的离谱
我们花了足足两期总共50分钟的系列视频
拆解它们为打造这样一部杰作
做了什么
所以虽然我们本以为那已经是
有史以来优化最激进的长上下文模型
几周前我们却迎来了Deep Seek V4.1 Flash
这款最新模型的架构改造甚至更疯狂
V4.1Flash的参数量
几乎是V4Flash的2倍
从2840亿增长到5520亿
而且其新架构还做了多方面精简
足以把KV缓存再压缩4倍
为了让你明白这有多厉害
过去9个月里
DeepSeek已经把每个Token的KV
缓存大小压缩了54倍
实在太惊人了
所以在今天的视频里
我们就来看看
DeepSeek是如何降低前沿AI模型成本的
以及他们想出了哪些疯狂的新技术
才让这一切成为可能
总之回到视频正题
现在我觉得很明显
Deep Seek并没有追逐
基准测试中的最先进地位
而是把实际运行大元模型这件事
优化到了极致
你多少能从性能跃升中看出这一点
而事后看来
这种跃升也并不算特别疯狂
但当你进一步细看
他们创造并落地的所有创新
尤其是考虑到模型规模后的
每百万Token价格
他们无疑正在建立一种
其他实验室望尘莫及的惊人优势
而当你站在企业的角度想一想
如果一个模型质量能达到九成
成本却只要1%
你大概率会选这个方案对吧
再往高了吹点
在TerminalBench2.1上
它的成本仅为Opus 5的5%
是GPT5.6艘的5.8%
是KIMI K3的8%
同时性能还超过了这三款模型
这就是Deep Seek的优势所在
这是难度高得多的竞争赛道
因为做优化可比刷宝难多了
在这款全新的V4.1 Flash模型中
它们的核心思路
基本就是如何在做大模型的同时
大幅降低它的内存占用
这是一个优化问题
目标是降低大元模型的使用成本
更具体的说
是降低重度智能体场景的使用成本
因为如今大元模型的大部分工作负载
都需要反复读取
塞满了工具输出和代码库的海量历史记录
Deepsy基本是全新投入优化
投入优化 常上下文下
注意力开销过大的问题
虽然说他们现有的稀疏注意力方案
已经降低了注意力成本
但另一个问题开始浮现
那就是模型仍然需要存储
搬运重新加载巨量的KV缓存
下面我快速讲下
KV缓存和注意力的关系
大元模型生成一个Token时
每个注意力层都需要用到
此前所有Token的缓存键和纸
键主要用来帮它判断
哪些历史信息是相关的
职责包含它实际要调取的信息
但要是每生成一个Token
但要是每生成一个token都重新计算所有这些表征浪费会大的离谱
所以模型会把它们存下来
这些存储下来的状态就是kb缓存
token越多kb缓存就越大
层数越多kb缓存也越大
所以当上下文规模达到100万token时
瓶颈就不再只是算力速度了
kb缓存带来的延迟和成本问题会逐渐凸显
你需要一次性计算搬运的token数量
是注意力机制最初设计承载量的10到100倍
所有预天穷算力
HBM SSD 还有带宽
如今都得适配这类需求
这是因为我们大量使用智能体工具
至少也是当下的模型服务模式导致的
V4.1的优化思路从这里开始就很有意思了
因为在V4版本中
他们已经用压缩吸收注意力
CSA将多个Token压缩为更少的KV条目
之后再用吸收索引器
判断这些压缩后的内存里
哪些部分真正值得读取
因此为了应对不断增长的上下文长度
他们已经采用了大量压缩手段
但V4.1 Flash的论文指出
KV缓存还会随着模型深度的增加而变大
模型深度与模型规模高度相关
因为如果想要更大的模型
增加深度是最直接的选择之一
所以在其他条件相同的情况下
从12层增至120层
可能意味着要存储约10倍的层专属KV状态
即使你激进的压缩上下文本身
无论剩下多少KV
他们仍会沿网络深度成倍增加
这就引出一个问题
如果某一层已经生成了有用的
全局记忆表示
下一层真的需要从头构建一个
全新的表示吗
Deepsy发现
至少对某些层来说
答案是否定的
这基本上就是压缩
吸收注意力2
CSAR背后的思路
不再只沿Token纬度压缩
还开始沿层纬度压缩
他们的做法是将注意力层
分成三种不同模式
完整层模式
重索引模式
和复用模式
完整层会正常执行所有操作
它会生成全局KV
生成锁引起K
运行吸收锁引起
并选择自己的TopK记忆条目
如果需要快速回顾一下吸收注意力
吸收锁引起基本上就是KV缓存的一个低成本搜索引擎
它会给缓存的全局KV条目打分
选出最相关的TopK条目
而注意力只读取这些被选中的条目
接下来是重锁引模式
该层会使用上一层已经生成的全局KV
但它对哪些信息重要可能有不同判断
因此它会附用上一层的主KV和索引器K
但生成自己的query并重新选择TopK
最后一种是附用模式
这种模式会附用一切
包括主KV和TopK索引
甚至不需要再次运行索引器
它只对上一层已经选中的内容执行注意力
除了改造CSA2之外
V4.1 Flash还移除了V4中那种
在SWA与HCA或CSA之间
HCA或CSA之间交错的混乱混合注意力
它们的主要改动是彻底弃用HCA
于是全聚分支现在只剩纯CSAR
从而得到更简单的CSAR SWA混合架构
但即便CSAR已经减少了跨层所需存储的KV量
仍存在另一个相当巨大的低效问题
因为无论预填充阶段的注意力被压缩到什么程度
模型人必须先让所有这些输入Token通过网络
才能生成第一个Token
设想你给一个常规40层Transformer
一个常规40层Transformer
输入100万Token的提示词
全部100万个Token
仍必须从第一层一路通过到第40层
对智能体操作来说
这相当棘手
因为如今模型会不断调用工具
读取文件
获取搜索结果
浏览代码库
然后把所有这些再加回上下文理
这意味着模型会反复耗费多的离谱的算力
只是阅读
在推理场景下
大多数前沿实验室和推理服务商
已经将预填充和解码拆分到不同的
解码拆分到不同的GPU集群运行
因为这两种工作负载的需求差异极大
其中预填充属于算力密集型任务
解码则属于内存带宽密集型任务
DeepSea也采用了这一做法
但在架构层面进行了调整
推出了名为CED的方案
全称为因果编码器解码器架构
实际上CED背后的核心构想
并非DeepSea首创
这一构想的灵感来自2024年发表的一篇论文
论文题为You only catch once
简称Yoko
优酷方面发现
Yoko方面发现在常规Transformer架构中
每一层都会生成并存储专属的全局KB缓存
所以如果模型有40层
你实际上要保存40份不同版本的记忆数据
为了解决这种重复存储的问题
他们提出了名为解码器解码器架构的解决方案
模型的下半部分是自解码器
通过高效的因果自注意力机制处理输入序列
生成提示词的上下文化表示
随后Yoko基于下半部分的输出生成共享的全局KB缓存
模型上半部分则为交叉
模型上半部分则为交叉解码器
其中每一层都有独立的query
但所有层都会对同一份共享的k和v
执行注意力计算
这样一来无需每一层都存储
各自体量庞大的kv缓存
Yoko基本上只需要生成一次全局记忆
就能供所有层服用
这也是其you only cache once命名的由来
尽管Yoko将其称为解码器
解码器架构
但它的训练和使用方式
仍与常规自回规语言模型一致
这个名称听起来可能和编码器
解码器架构相似
容易让人联想到他与最终的
容易让人联想到它与最初的注意力机制存在关联
但它取这个名字仅仅是因为架构包含两种不同类型的解码器
下半部分名为自解码器
是因为它采用因果资注意力处理序列
构建共享的全局KV
上半部分名为交叉解码器
是因为每个上层都会生成独立的query
并对下半部分生成的KV执行交叉注意力计算
这种设计还有个更棒的好处
既然上半部分只需要用到下半部分生成的KV
那么在玉田充阶段
严格来说
你完全不需要让提示词
经过上半部分的计算
你只需要超长提示词
通过自解码器处理
生成共享全局记忆后
就可以停止操作
这意味着
Yoko其实首创了这一思路
预填充和解码阶段
未必要用到同等规模的模型
当输入规模
甚至达到100万tokens时
这个设计思路的优势
就十分突出了
因此Deepseek借鉴了这一构想
并对其进行适配
使其能兼容V4的现有架构
Deepseek不再把下半部分称为自解码器
而是称之为因果编码器
它没有像Yoko那样让上半部分共享同一份全局KV
而是让每个解码器层从最终编码器表示派生各自的全局KV
所以从功能上讲
Yoko在KV缓存共享方面要激进的多
而Deepseek的因果编码器
仍会在模型前半部分之后给出这一个最终表示
但它并没有把这个表示变成所有层都必须共享的同一层
所有层都必须共享的同一份KV缓存
而是让每个解码器层
都对该最终表示进行各自学习到的投影
第20层之后的每一层
都可以从该最终表示进行投影
并通过各自层专属的权重
得到不同结果
但这种做法为什么可行呢
他们的理由是
这是模型当前对该token已知信息的
一个庞大的学习性表示
因为在经过20个Transformer层之后
每个token表示都已经经历了
相当深度的上下文处理
基本上已经成为一个
丰富的公共信息源
注意力所使用的K和V
基本上就是
该信息源的不同学习试图
建会确定这条信息
要如何表示
以便后续的查询
能够与它匹配
值则决定当它被注意到时
应当返回哪一项内容
所以通常情况下
如果你想得到
第35层的KV
每个历史提示词
Token都必须先
实际留进第21层
一直到第35层
然后第35层
再把新的隐藏状态
投影成它的KV
这里DeepSeek基本上是在质疑
仅仅为了创建全局记忆库
是否真的需要所有这些非线性计算
于是直接砍掉中间的每一个串行流程
使用该隐藏状态
再交给第35层投影
借此获得KV信息
不过如果你还记得前面讲过的内容
DeepSeek其实并不是每次都为每一层生成
完全独立的庞大KV缓存
CSAR已经通过三种不同模式
让相邻层共享全局KV
所以只有真正需要创建新全局KV的解码器层
才会用自身层专属的投影
直接从最终编码器状态将其派生出来
至于每一层具体使用哪种模式
Deep Seek几乎是把这些模式硬编码进了层布局中
在编码器中
前两个仅使用SWA的层之后
剩余18层按每6层一组划分
一个完整层后面接5个复用层
而在解码器中20层按每4层一组划分
D组以一个完整层开头
后面接三个复用层
后面的各组则以一个众索引层开头
再接三个复用层
所以综合起来看
你基本上同时获得了两个层面的成本节省
首先
CD避免了仅仅为了生成解码器全局KV
就让整个预填充跑变模型上半部分
相反
它直接从最终编码器表示派生这份KV
然后借助CSAR
一旦某个解码器层生成了这份KV
接下来的几层
也不一定需要再生成
另一份副本
而这种组合
正是DeepSeq的方案激进的多
且专门针对V4.1优化的原因
除此之外
DeepSeq V4.1的情况
也要复杂的多
它在每一层中
都仍然保留着
滑动窗口注意力分支
所以每个解码器层
其实有两种不同的记忆
一种是来自编码器表示
并通过CSAR共享的全局记忆
另一种是来自
该解码器层自身
隐藏状态的局部进气记忆
所以这里有一点很需要澄清
CSAR的KV共享只适用于全局注意力分支
这并不意味着滑动窗口注意力的KV缓存
会在各层之间共享
每个层仍然保留自己的局部SWA KV缓存
因为这种局部记忆是由该层实际的隐藏状态产生的
因此即使5个CSAR曾共享同一个全局KV
它们仍然可以有5份不同的滑动窗口KV缓存
除此之外
SWA只保留最近的128个TOKENS
因此全局KV会随着整个100万Token的上下文增长
而运行时
SWA缓存实际上始终受限于那个固定窗口
但由于它仍未压缩且未每层独有
所以仍然不是零成本
尤其是要跨大量绘画持久保存这些状态时
那么如果我们不共享SWA KV缓存
这不就意味着还得把提示词送过这些解码7层吗
而麻烦的地方在于
这个128Token的窗口实际上会随着层深不断累积
第40层的SWA状态依赖第39层
第39层本身又依赖更早的局部窗口
依此类推
所以Deepseek基本上切断了这条依赖链
只把最后128个tokens重放给每个解码7层
这正是他们所说的
SWA有借重放发挥作用的地方
所以不是让100万个tokens经过全部40层
而是让100万个经过前20层
只让128个经过剩下的20层
这意味着现在完整的预填
这意味着现在完整的预填充成本
大致等于完整提示词经过一半模型
再加上128个tokens
经过其余各层
在100万tokens上下文的情况下
那128个tokens的重放
基本可以忽略不计
所以整体预填充仍接近减半
虽说只运行这128个tokens
重建出的状态严格来说是近似的
但Deepseek仍表示对质量的影响微乎其微
而且有借重放实际上还带来了
另一个相当大的好处
因为Deepseek基本意识到
基本意识到已经不值得再把SWA-KV缓存
当作长期记忆对待了
在Deepseek V4中
当它们缓存前缀已共复用时
固态硬盘上的持久化缓存
会同时存储全局KV和SWA-KV缓存
令人惊讶的是
尽管SWA只覆盖一个很小的局部窗口
那些未压缩逐层生成的SWA状态
仍几乎占了持久化KV存储的一半
除此之外
这两种缓存的生命周期完全不同
如果同一个长前缀被复用
全局KV缓存
可能在数小时或数天后
仍然有用
但SWAKV缓存
其实仅对活跃绘画的
当前局部状态有用
有效期通常只有几分钟
因此在V4.1中
Deepseek完全不再把SWAKV缓存
存入长生命周期的持久化缓存
而是将其临时存放在
小得多的主机内存池中
一旦过期或被驱逐
就直接用有界重放重建
最后128个Token
再来说Token
与此同时
与此同时全局KV可以存储在固态硬盘这类持久化存储中
这部分的持久化KV缩减幅度非常可观
CSAR搭配FP4已经能把全局KV压缩到V4时期容量的四分之一左右
而将SWAKV移出持久化存储后
缓存规模几乎直接再减一半
回看V4的设计
持久化KV的占用空间大概一半来自SWA
另一半来自全局KV
V4.1首先通过CSAR和FP4把这占一半
和FP4把这占一半的全局KV
压缩到原大小的四分之一左右
这就使得全局KV本身的占用
降至每Token近890字节
在HBM存储上
直接节省了7

來源:transcript.txt

本次執行流程與問題處理

  1. 下達指令

    指令:videonote https://b23.tv/JJ0ze0T --language zh --allowed-language zh --language-mode PRIMARY

    來源:https://b23.tv/JJ0ze0T

    辨識語言:zh | 參數:--language zh --allowed-language zh --language-mode PRIMARY

  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(來源選擇報告)

    耗時:1677.2 秒

    關係:依序執行

    結果:完成

  4. 2. 建立筆記頁面

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

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

    產出:note.html(筆記 HTML)

    耗時:0.4 秒

    關係:依序執行

    結果:完成

  5. 3. 發布公開頁面

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

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

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

    耗時:0.5 秒

    關係:依序執行

    結果:完成

手動來源字幕

自動來源字幕

Whisper 字幕

Qwen 字幕

Parakeet 字幕

MOSS 字幕

聲學時間證據(PyAnnote / WhisperX)

校正前後逐字稿

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

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