程曼祺 Manqi Cheng
上个周五,DeepSeek 在官方 Twitter 上预告,下一周会连续 5 天开源 5 个成果,进入 Open Source Week,也就是开源周。我们录制节目的这一天是周一,DeepSeek 也正式放出了开源周的第 1 个开源项目 FlashMLA。
我一直很想和人好好聊一下,大模型开源到底是在开什么、怎么开。比如相比于闭源模型,开源要额外做哪些工作,才能让社区比较好地理解这个开源成果,并且更充分地把它用起来。
随着 DeepSeek 在春节期间爆火出圈,开源也正在成为一种趋势。比如之前一直保持模型闭源的公司,像 MiniMax、阶跃星辰,从 1 月到现在都陆续发布了自己的第 1 批开源模型。之前选择保留自己最强的模型、开源较小版本模型的公司,可能也会在 DeepSeek 的冲击波里有新的选择。
正好在 DeepSeek 开源周,我邀请到了正在美国西北大学 MLL Lab 攻读博士学位的王子涵。子涵今年刚读博 1 年级,之前毕业于人大。大四的时候,也就是 2024 年,他曾在 DeepSeek 实习过数个月;接下来今年暑假,他还将去一家美国的 AI Agent 创业公司 Utori 实习。
这期我和子涵聊到了开源模型不同的层级,主要有技术报告、模型权重、推理框架、训练框架,还有数据集。现在我们说一个模型是开源的,一般指的是有技术报告,也开放了模型权重。再往下、更深入的开源是推理框架和训练框架,而现在只有极少数机构,比如 AllenAI 和 EleutherAI,也开放过预训练或微调的数据集。
我们也一起围观了 DeepSeek 开源周的进展,回顾了他们之前开源模型的一些重点优化思路,以及他们为了让社区充分理解和使用开源成果,而专门花费精力去规范代码、撰写详细的技术报告。这背后其实是一个组织对优先级的选择。
在本期最后,子涵也分享了自己成为开源模型滥用受害者的亲身经历。开源在加速技术进化,也带来了一些需要一边技术进化、一边思考和防范的新问题。这让我想到最近刚看过的一句话:马斯克曾经说,有人问我是不是想死在火星上,我说当然,但别死于登陆器降落时的撞击。
王子涵,你可以和我们的听友先打个招呼,也简单介绍一下你之前的学习、工作经历,以及和开源的一些渊源与关系。
王子涵
大家好,我叫王子涵,非常开心今天能来曼祺的频道做客。我现在在西北大学读博士 1 年级,导师是李曼颖老师。我的方向有 large language model、agent reasoning 等,也包括我们最近在做的 long-context efficiency 相关内容。
因为我的导师李曼宁老师之前是在 Stanford 家俊和菲菲组里做 postdoc,所以我们组也做一些 vision-language model 和 robotics 方向。这些方向虽然我没有直接参与,但是听组里的同学做项目,也有一些了解。
我本科就读于人大高瓴人工智能学院。本科期间有一段实习经历,就是刚才曼祺提到的 DeepSeek。接下来暑假我也会继续做 Agent 这个方向,在一家创业公司实习。
程曼祺 Manqi Cheng
谢谢。你之前的工作,包括实习,如果都算上的话,有哪些和开源比较相关的工作吗?
王子涵
我觉得我绝大部分工作应该都开源了。最早的一篇,或者说我做得比较出名的一篇,可能是当时在暑研期间、季恒老师组里做的一篇关于 Agent 相关的工作。
我们当时做了一篇 benchmark。大概是在 2023 年 9 月发布的,但做这个课题其实是在 2023 年 2 月。当时做 Agent 还是一个比较超前的选择,因为我们初步发现,language model 有可能通过自身能力调用外部工具。
那时候很多公司已经在宣称自己能做 Agent 了,但是 benchmark 还比较少,没有一个比较统一的工具去评估这些系统,比较一下到底谁更厉害。所以我们就从网上已有的数据集里找了一些题目,再把它们重新组织成一种模型能够通过 Agent 的方式去学习、把题目做出来的形式。这可能是我第 1 个影响力比较大的开源工作。
当时在公司里面,DeepSeek-V2 我也有参与,但只能说是参与了研发,并不是特别核心的贡献。组会的时候可能聊一聊、提提意见,包括跑跑实验。
最近我们还做了一篇关于 DeepSeek-R1 加 Agent 的工作,目前算是一个开源的 repo,之后会考虑正式发布出来,并且发布一份正式报告。我们现在这份报告已经在写了,差不多写完了,主要是把这个问题用形式化的语言、各种数学公式给 formulate 一下。
我们也加了几个不同的 task,研究 reasoning agent 如果使用 DeepSeek-R1 这种纯 RL 训练的方法,再加上多轮 dynamics,大概能达到什么样的效果。
1. DeepSeek 开源周启动
程曼祺 Manqi Cheng
那我们第 1 部分先来聊一聊 DeepSeek 的开源周。我觉得这也是大家现在比较关注的一个事情。
开源周在上周释放出来的信息,主要是 DeepSeek 在 Twitter 上的一条预告,原文截图会贴在 show notes 里。这里我简单复述一下,它大概写的是:
第 0 天为开源周预热。我们是来自 DeepSeek AI 的一个小团队,致力于探索通用人工智能。从下周开始,我们将开源 5 个代码库,以完全透明的方式分享我们虽小但诚挚——原文是 small but sincere——的进展。在线服务中这些看似平平无奇的基础组件,也就是 humble building blocks,都已经被文档化、部署,并且在实际应用中经过了实战检验。
作为开源社区的一分子,我们相信每一行被分享的代码,都将汇聚成加速这趟旅程的集体势能。每日开源内容即将推出。这里没有高高在上的象牙塔,只有纯粹的车库精神和社区驱动的创新。
同一天,DeepSeek 也在 GitHub 上发布了一个和开源周有关的库,并且把它置顶了。这个库的名字叫 Open Infra Index,也就是开源的 Infra 指引。Infra 指的是 AI 的 infrastructure,也就是基础设施层。这个项目的地址我也贴在 show notes 里了。
顺便说一下,如果有听友不是特别了解 AI Infra 是做什么的,可以去听《晚点聊》第 58 期。我们和硅基流动的创始人袁进辉非常详细地聊了 AI Infra 到底是在做什么。
回到开源周,子涵,从 DeepSeek 的 Twitter 预告以及 Open Infra Index 这个 GitHub 库里面,你看到了哪些亮点?结合今天放出的 FlashMLA,你觉得这一周 DeepSeek 大概会连续开源些什么东西?
王子涵
这是一个很好的问题。我其实没有什么预判他们行动的能力。比如一个东西出来之后,我就很难预测他们接下来会有什么 action。
我觉得他们自己有一个框架,内部有一套训练模型的框架。今天这个 FlashMLA,我觉得如果说它算是一个推理加速的东西,里面可能也有训练相关的部分。但如果他们有机会的话,可能会开源一些 training framework,包括 DeepSeek-V3 的一些成果。
现在这个成果可能还是 V2 的训练框架,所以我觉得他们有可能会开源 V3 或者 R1 的训练和推理框架。
2. FlashMLA 优化推理效率
程曼祺 Manqi Cheng
因为 MLA 其实在 DeepSeek-V2 和 V3 里面,算是它的一个创新点吧?
王子涵
对。所以今天放出的 FlashMLA,如果总结来说,就是 V2 框架里的一个推理优化,可以加速推理效率。
程曼祺 Manqi Cheng
对。其实他们很多创新都是在 target,也就是针对提高效率。是每一个创新点都这样吗?
王子涵
我觉得可能真的是每一个。比如 V3 里面,整体总结起来有 3 个创新点。
第 1 个是沿用了 Meta 的 multi-token prediction,让模型一次能够吐出 2 个或者 3 个 token。这样模型就会更加 efficient。我记得他们报告里写的是 2 个 token,也就是一次并行地预测 2 个 token。
第 2 个是低精度训练。所谓低精度,其实就是把数字用更少的比特存下来,在达成差不多训练效果的同时,降低计算成本,这也是 efficiency,也就是效率。
还有一个和并行相关的创新,就是模型并行。它在做 pipeline parallel 的时候,模型会在不同部分运行,需要在不同部分之间做并行。
比如你要先做 forward,再做 backward,中间其实会有很多模型的不同层处于闲置状态,没有处理任何一个向量。DeepSeek 之前的工作是做 pipeline parallel:第 1 个模型,也就是第 1 层,处理完第 1 个 tensor 之后,把它交给第 2 层;第 1 层再处理第 2 个 tensor,就这样一直做流水线并行。
DeepSeek 相当于在这个过程中又做了一些优化。原本有些时候会出现闲置的块,他们把这些闲置的块变少了。所以我觉得每一个创新点都挺 efficiency 的,都是在追求效率。
3. 算子优化加速计算
程曼祺 Manqi Cheng
回到 FlashMLA,你觉得它对社区里的哪一类开发者最有用、最有帮助?
王子涵
我觉得对每一类开发者都挺有帮助。很多人会注意到它是 MLA,但也会注意到它是 Flash。也就是说,它对系统做了一些特别底层的优化,应该写了很多算子。
我和很多人交流时发现,他们自己写代码可能最多只写到比较上层,不会去做系统上的优化,把代码实现出来就好了。FlashAttention 之前做的就是系统上的优化。
比如 Attention 都是这么算的,但在计算过程中,仍然可以用更快的方法。比如把多个操作合并成一个操作,这样就会更快一些。这就需要写一些更底层的算子来实现。
程曼祺 Manqi Cheng
也就是说,即使计算方式还是一样的,但它可以让系统,或者说硬件,发挥出更好的效率?
王子涵
对。
程曼祺 Manqi Cheng
具体到这一次 FlashMLA 的开源,它把这些算子的代码也都开源出来了。我看了一下,它已经写到 C++ 这一层了,肯定是算子优化。
你也可以跟我们的听友解释一下,算子优化大概是什么意思,因为有的人可能不是专门做 AI 研究的。
王子涵
我想了想,算子优化可以用很简单的矩阵乘法来解释。
我们实际做矩阵乘法时,大家可能会想,一个一个算。在这个过程中,GPU 会并行处理一些操作。如果你能把计算方式用 GPU 能听懂的方式告诉它,比如第 1 个操作什么时候要在第 1 个 worker 上做,第 2 个操作什么时候要在第 2 个 worker 上做,它就会变得更 efficient。
其次,你还可以通过合并一些运算的方式,让计算更加 efficient。比如加法结合律、乘法结合律、加法交换律这些。先算 A 再算 B,或者先算 B 再算 A,可能也会有不同。
一个比较经典的例子就是 FlashAttention。整个 Attention 可能包含好几种不同的运算,它把这些运算合并成一种,在 GPU 里面一次完成。
如果我要对很大的矩阵做多次运算,就需要让矩阵通过 GPU 的那座“桥”。GPU 其实有好几层,最里面那一层最小,但计算速度也最快;外面有一个比较大的层,可以装下更多东西,但计算没有那么快。
在实际计算过程中,就是把外面这一层的大矩阵一批一批地送到里面去操作,算完之后再送出来。如果只做一次,这个操作把数据送进去、送出来,并不会花太多时间。但如果要做很多次,每一次传输都会花时间。
所以不如一次把这个矩阵送进去,在里面做完 5 种不同的操作,再把它送出来。这样就不需要多次通过那座狭窄的桥,因为矩阵在两个层之间传递也是需要时间的。
程曼祺 Manqi Cheng
这是一个很简单的算子优化例子。想象一下,你现在有一些粮食,比如小麦,要把它送到河对岸去加工,加工完之后再送回来。
它可能先变成一个中间产物,然后中间产物还要再送到桥的另一边,之后还要再运回来。中间有一座很狭窄的桥,每次通行都会花时间。
如果要走很多次这座桥,就会比较慢。于是有人想了一个办法:把粮食送到桥对面之后,一次把所有的操作都做完,不用再来回折腾这座桥,这样就能提高运算效率。
王子涵
对。在 GPU 运算里,比如有一个很大的矩阵,需要做好几次不同的运算。它需要从一个计算比较慢但比较大的地方,转移到一个计算比较快但比较小的地方,做一次运算之后再送回去,这样可能比较慢。
如果能把所有这些操作总结成一次操作,直接把这个大矩阵一批一批地送过去,处理完了再送回来,就会比较快。
程曼祺 Manqi Cheng
你刚才也提到,大部分人不会写到算子层的优化,但 DeepSeek 可能会自己写很多算子层的优化。能做这件事情,是能力差异还是意愿差异导致的?
王子涵
在我看来是能力差异,因为我自己不太会写,就会觉得这个很难。
我之前也经常觉得,自己的一些项目想起来比较简单,但实际上做起来很困难。比如我去年有一个失败的项目,是让 Large Language Model 做 online training。
之前很多语言模型都是直接做 offline training,相当于我有一些已经得到的数据,用这些数据和奖励信号训练模型。我们当时有一个 idea,前提是让模型实时生成数据。生成完数据之后,可以通过环境给的 feedback,或者奖励模型给的 feedback,判断它生成的数据好不好,然后再对它进行训练。
这个过程当时看起来很简单:模型生成数据,我们给数据一个 feedback,feedback 再回来 update 这个模型,模型继续生成新的数据。
但真正最难的一点在于,如果要写这个代码,它有两条路径。一个是使用当时比较厉害的推理框架,但那个框架已经写到了算子层的优化,我们看不太懂。它把模型 load 进来之后,模型就没有办法被改变了,所以不能一边让模型生成东西,一边对模型做优化,模型是固定的。
如果用最先进的框架,它生成得很快,但模型没法更新,做的还是类似之前的事情:一次生成完,然后再进行各种处理,再用它去优化模型。
另一种方式是我们自己写推理库,但我们确实没有能力做这件事情。我们要写一个生成速度很快、同时又能兼容模型不同更新的库,这就很难。
我讲这个例子,是想说很多时候一些看似简单的操作,都需要很大的 effort,才能从工程上实现。所以我觉得,很多人可能没有这样的 training。Code 这方面的教育一直在前沿发展得很快,但教育本身可能很难跟上。
程曼祺 Manqi Cheng
你刚才说到这个例子,让我想到他们在 Twitter 里说的 small but sincere,用来描述他们要开源的东西。
王子涵
我觉得确实挺真诚的。
程曼祺 Manqi Cheng
我看到 FlashMLA 的页面虽然今天才放出来,但在 issue,也就是社区反馈里,已经有很多人在讨论了。有人问,什么时候可以让 DeepSeek 快点开放支持 FP8 的 FlashMLA 部署代码;也有人问,什么时候可以发布支持 NPU 芯片的版本。
你可以给大家解释一下,现在开源的是什么版本,以及为什么大家希望它能支持 FP8 的部署代码吗?
王子涵
FP8 是 V3 里面的一项技术,也就是我刚才说的低精度训练。
FlashMLA 本身是用来优化 Attention 的 KV Cache 的技术。如果它和模型低精度结合起来,就会更快。
我觉得现在这些不同技术可能是一个一个开源的,大家都希望把它们综合起来,最后形成一个统一的库。到时候我想用哪个部分就用哪个部分,也可以把不同的部分叠加起来。
我觉得他们也许真的有这个计划,因为现在那个大的页面叫 DeepSeek Open Infra Index,看起来就是一个 Infra 工具的指引,可能会陆续开源一些东西。
程曼祺 Manqi Cheng
还有一件比较需要 effort、需要精力的事情是:它可能会开源 5 个库,但这 5 个库怎么综合起来?
索引是一个方面,另一个方面是把这 5 个库合并成一个库,让用户可以随时调用其中不同的部分。这可能就需要把它们 merge 起来,而 merge 的时候可能也会出现 bug,需要投入一些努力。
像这种开源项目发布之后,merge 的工作主要是 DeepSeek 自己的人来做,还是社区里一些厉害的人也会贡献?
王子涵
我觉得这要看他们自己的计划。但社区里的人复现这些技术应该还是挺积极的。我之前看到过非常多复现他们各种技术的工作。
4. GitHub 开源页面指南
程曼祺 Manqi Cheng
接下来我们可以从 FlashMLA 聊得更广一点,也就是我一直很想找人聊清楚的:大模型开源到底是在开什么、怎么开。因为它可能和以前传统软件的开源不太一样。
首先有一个特别实际、也很有用的问题,想请子涵带着我们去看一个开源项目的 GitHub 页面。这个页面里会有不同的栏目和子页面,你可以给我们讲讲,进入一个这样的 GitHub 开源页面之后,主要要看什么。正好我们就看今天这个 FlashMLA 的页面。
王子涵
好的,我需要共享一下屏幕,对吧?
程曼祺 Manqi Cheng
对。你可以先按你的逻辑讲,如果我有什么疑问,再问你。
王子涵
我们可以先从 DeepSeek 的主页开始看。在 GitHub 上进入 DeepSeek 的主页之后,会看到很多不同的功能。比如这里有搜索栏,搜索时可以直接搜 FlashMLA,就会出现一些代码,也会看到 FlashMLA。
也可以在这里找自己感兴趣的库。比如你想找某个库,就可以直接从这里点进去。
程曼祺 Manqi Cheng
可以先给大家解释一下“库”的概念。这个主页的主体就是放了很多库,叫 repo。你可以讲讲这个吗?
王子涵
一个 repo 就是一个比较完整的、能够实现某种算法或者概念的仓库。我觉得 repo 翻译成“仓库”比较合理。
仓库里可以放代码,也可以放很多别的东西。我记得之前有很多人在上面放自己的大作业。
程曼祺 Manqi Cheng
那是不是也可以放小说?
王子涵
可以放小说。其实很多人在上面放自己的大作业,所以它并不是单纯写代码的东西。它很自由,你想放什么都可以。
随便点进一个库,就可以点 Code 下载。第 1 种方式是直接 Download 下载;第 2 种方式是复制这个界面的地址,然后在电脑上,比如 VS Code 里输入 git clone,这样就能把它下载到本地,也是比较方便的方式。
程曼祺 Manqi Cheng
回到 DeepSeek 主页,你会看到它在陈列这些库的时候,前面会标注语言。比如刚才提到 FlashMLA 是 C++,所以大概率是做算子层的一些改进,因为 C++ 是比较底层的语言。有的标的是 Python。
但我看到 DeepSeek-R1 前面并没有编程语言标识,这是为什么?
王子涵
因为他们目前把它当成一个传递自己论文的库。实际上这里面主要是对论文的总结,可以理解成一个说明书,并不是详细告诉你应该怎么做。
比如你会看到它告诉你怎样运行 DeepSeek-R1 模型。你按照这里的代码运行,就可以跑起来。但这个库里主要就是这些内容。至于 R1 相关的训练内容,我觉得他们可能之后会开源,目前还没有开源他们自己的训练框架。
当然,每个人复现它都会有自己的结果,所以也还好。他们自己的方法可能会有更多我刚才说的算子层优化之类的内容,也很期待他们之后把这些东西开源出来。
程曼祺 Manqi Cheng
接下来我们进入一个库的主页。刚才是在一个机构的主页,进入一个具体的库之后,以 FlashMLA 为例,你会看什么?
王子涵
我可能会先看 license。比如这里是 MIT License。MIT License 基本上很短,没有什么要求,比较重要的要求就是 “as is”。
通俗理解就是:我开源这个库没有收你的钱,所以你用我的库出现问题,也别来找我。可以理解成免责声明。
MIT License 比较宽松,最大程度保护了开发者的利益。
程曼祺 Manqi Cheng
我看 DeepSeek 的大部分项目都是 MIT License。
王子涵
对,绝大部分都是。
另外我可能会先从 README 看起。README 里会告诉你怎么安装、怎么测试。比如这里会写怎么安装相关依赖,装完之后可能运行的第 1 个指令是什么。
这个指令基本上就是你了解这个库的入口。
程曼祺 Manqi Cheng
也就是说,benchmark 那一栏是装好之后要运行的第 1 个指令?
王子涵
对。我可以跳到自己的项目上举个例子。
比如我们这个库是 DeepSeek-R1 加 Agent,下面要运行的也是类似的概念。你可能会看到两行代码,第 1 个是 setup,也就是把环境装下来;第 2 个是 download data,也就是下载数据。做完之后,就可以运行第 1 行指令,比如 bash train.sh。
你需要通过这些代码,对这个库有一个基本认识。
再回到 DeepSeek 的例子。比如你看到 python test_flash_mla.py,就可以点进这个文件。里面可能会有一些调用,比如 from flash_mla import 之类的。这相当于一个入口,从宏观角度告诉你这个库在做什么。
如果想了解细节,就要点进具体的代码。点进去之后可以看它的 definition,再进入 definition 看细节,然后逐层深入,了解这个库。
FlashMLA 这个库可能没有完整展示出来,但大概就是这样的逻辑。
程曼祺 Manqi Cheng
所以接下来你会看 README,还会看些什么?
王子涵
我主要通过 README 了解这个库。README 相当于一个窗口。进入 README 之后,我就知道这个库大概是怎么组织的,能够一层一层点到自己感兴趣的地方,以树状图的形式把整个 code base 学下来。
还有一个点,我不知道算不算比较独特:我看 code base 一般不看它有多少 star,我一般看它有多少 issue。
程曼祺 Manqi Cheng
Star 可以理解成点赞,对吧?
王子涵
对。Issue 更像评论。Star 可能更多反映浅层使用这个库的人有多少。每个人 star 之后,可能会用一用这个库,拿它做一些事情。
但 issue 主要是问问题或者报告 bug。比如能不能适配某个东西,有哪些不同需求,或者遇到 metrics、compilation error 等问题。
这能证明他们确实深度使用了这个库,并且对它有一些评论,是真的在深入使用。
程曼祺 Manqi Cheng
这个补充很好,那以后我也知道要看什么了。
关于 issue,我想问一下,它上面分了两类,一个是 open,一个是 closed,区别是什么?
王子涵
如果一个 issue 没有被完全解决,就是 open;如果解决了,就是 closed。
程曼祺 Manqi Cheng
我想问一下,目前 FlashMLA 的 closed 里有两个 issue,其中有一个是“这个东西很好,但在昇腾上用不了”,为什么这个也被解决了?
王子涵
这是他自己解决的。
一般有两种人可以把 issue 关掉。第 1 种是发 issue 的人,他可能不想让这个话题继续讨论,或者自己已经解决了这个问题。比如他遇到一个 bug,后来发现是自己弄错了,就会自己把它关掉。
如果 bug 确实是开发者的问题,开发者也可以把它关掉。这个 issue 就是发帖的人自己关掉的。
程曼祺 Manqi Cheng
明白。这个不是一个典型的 close,它不是 bug,只是在评论为什么现在还不支持昇腾。
王子涵
对。比如还有一个 DeepSeek 交流群,也被 close 了。那相当于是在官方 repo 上发广告,不太合适,所以被关掉了。
程曼祺 Manqi Cheng
我看这个群发出来有 40 个踩。
王子涵
对,有 40 个踩。正常提问的话,一般要么是解决之后被 close,要么就会保持 open,不太会自己发出来再自己 close。
程曼祺 Manqi Cheng
我还有一个问题。在上面这一栏里,除了 issue,还有一个叫 pull requests,这是什么?
王子涵
这个更深层一些。Issue 可能是你对这个库有疑问,你去上面问问题,但通常并不指望自己去解答。
Pull request 的意思是:我主动对你的代码做了一些优化,想把这些修改贡献到你的库里,所以会有 pull request。
点进去之后,它会告诉你这个人希望解决什么需求。针对这个需求,点进 file changes,就能看到他修改了哪些内容。加号是他加进去的,减号是他删掉的,可以进行对比。
项目开发者看到 pull request 之后,会决定接受还是不接受。
有时候项目工作人员自己也会提交 PR。比如拿我自己的库来讲,我们组的库有 30 多个 PR,我们自己做了什么改动,也会通过 PR 提交上去。这样是一个比较透明的过程。
但 DeepSeek 本身已经做得非常好了,再把代码放出来,就不太需要开发者自己通过 PR 来提交。
程曼祺 Manqi Cheng
所以你们把 pull request 简称为 PR。
王子涵
对,PR。
程曼祺 Manqi Cheng
如果我在这个 PR 里看到一个修改,怎么知道它是社区贡献的,还是开发机构自己贡献的?
王子涵
可以点开提交者的个人信息,看这个人是不是 DeepSeek 的。
程曼祺 Manqi Cheng
我现在点开的这个人可能不是 DeepSeek 的,但他是北大的,我看出来了。
王子涵
对,我也觉得他应该是北大的,好像还是 BioTest 的。就是点进去看这个人是不是 DeepSeek 的,或者是不是这个库的贡献者、机构所有者。
程曼祺 Manqi Cheng
明白。所以 GitHub 不会直接给你标识出来,可能要自己看一下。
王子涵
对,要自己看一下。
程曼祺 Manqi Cheng
我觉得这也是一个观察开源项目社区参与度的好方法,对不对?
王子涵
但 pull request 里有价值的可能不太多。可能是因为我没有深度参与这个项目,很多时候大家不会特别深入地给不同项目提 pull request。
我觉得肯定是有的,只是目前没有特别强的 motivation,让大家主动做这件事情。唯一的 motivation,我觉得就是热爱。除此之外还能有什么 motivation?不给钱,也没有实际的物质报酬,所以做这件事的人还是比较少。
程曼祺 Manqi Cheng
这不就是开源精神吗?
王子涵
对,这就是开源精神。它首先需要热爱来支持,同时我觉得也需要一套对应的体系来鼓励这件事。
GitHub 自己会有一些鼓励机制,比如给你发一些小奖章,但我觉得作用还是见仁见智。如果你比较追求在社区里的影响力,或者从这件事里获得一点成就感,这些小奖章还是有一点激励作用的。
程曼祺 Manqi Cheng
刚才我们看的 FlashMLA 还是一个比较简单的库,对吧?
王子涵
对。相比一个大模型的开源库,我觉得它是比较简单的库。
5. 技术报告是开源起点
程曼祺 Manqi Cheng
接下来我们可以聊聊大模型的开源。我觉得这可能是一个分层的问题:大模型开源到底是在开放什么?它涉及很多流程和环节,有训练部分、推理部分,也可能涉及数据集和权重。
比如我们现在说一个模型是开源的,一般是哪些部分开放了?哪些部分即使是一个开源模型,也没有开放?
王子涵
这是一个非常好的问题。开源有不同的层次。
第 1 个,也是必须要开的,就是技术报告。如果技术报告都不开,后面的内容基本上也不太会开。一般肯定会有一份报告。有报告不一定有代码,但报告可以讲清楚技术。
DeepSeek 就是一个很明显的例子,它把很多东西都讲得非常清楚。也有一些报告讲得比较模糊。
DeepSeek 每个版本,包括 V2、V3 和 R1,都有非常详细的技术报告。
程曼祺 Manqi Cheng
这几个里面,你觉得 V3 是最详细的吗?
王子涵
对。V3 真的特别详细。
我觉得这和 DeepSeek 的工作模式有关。团队里每个人都写代码。技术组非常大,占整个团队的人数比例也很高。每个人都会想办法验证自己的 idea,如果验证通过,就把这个 idea 加到下一版模型的训练里。
所以每个人可能只负责一小块,但加起来就会非常多、非常详细。
程曼祺 Manqi Cheng
刚才你浏览 V3 技术报告时,拉到贡献者那一行,我刚好看到了梁文锋的名字。
王子涵
因为团队里每个人都有贡献。里面不只有梁文锋的名字,也会有 data annotation、business 等不同岗位的人。每个人都会写在里面。
我觉得这也是它比较好的一个点,不会非要区分什么。像这种大 paper,确实是每个人只要在团队里,都可能做出贡献。
而且 V3 是一个 base model,包括预训练、后训练、微调、数据等各种工作,工作量加起来肯定非常大。所以有一份 50 多页的报告,我觉得不足为奇。
R1 是在 V3 的 base model 上,迭代出了一套自己的 reinforcement learning,也就是强化学习方法。它只要把强化学习那一部分讲得非常清楚,我觉得就是一份非常好的技术报告。
程曼祺 Manqi Cheng
这一点我也想分享一下。DeepSeek-R1 这次是全民爆火、非常出圈,不光是 AI 圈在讨论。
但我自己对 DeepSeek 变火的传播路径有一个感受:V3 当时发布了一份非常详细的成果,而且展示了很多实验。你刚好翻到了消融实验这一页。
它展示了很多细致的实验结果。我觉得当时这份报告在全球,包括美国比较核心的技术圈层里,植入了一个比较深刻的印象:这是一家非常开放、非常认真开源模型的公司。
这让核心技术圈层对它有了一个印象和 respect。后来 R1,包括最近又开源的 NSA 等内容,能够慢慢获得越来越多人的关注,可能都建立在这个基础上。
王子涵
我觉得这也是他们为什么一开始就非常重视开源的原因。
他们去年其实并没有出圈,关注量远远没有今年多。但今年大家注意到它之后,会去看这家公司的技术报告,然后发现每一份报告都非常详细,写得非常好。
这就是我觉得开源要做好的第 1 步:需要写一份报告。它不一定是论文,也可能只是一份流水账式的报告,但要记录清楚到底做了什么,并且以服务读者的形式,让读者能够由高到低、由浅入深地了解技术。
所以我觉得,开源最重要的第 1 个部分,就是技术报告。
6. 推理训练框架生态
程曼祺 Manqi Cheng
刚才讲的是第 1 个基础部分,也就是报告。除此之外,还有训练和推理代码。
我这里展示两个来自不同机构的训练和推理代码。这个推理库是 vLLM,也就是我们之前一直在考虑使用的一个框架。我觉得它是目前推理领域最广为人知的库之一。
它的 star 有 30K,可能接近 40K,issue 也有几千个,pull request 也有几百个,生态做得比较好。
王子涵
对。
程曼祺 Manqi Cheng
vLLM 主要是谁在维护?
王子涵
基本上是伯克利的这群人。可以看最前面的开发者。
最开始那一版 paper 叫 PagedAttention,我记得绝大部分作者都是伯克利的,也有一些来自 Stanford、UC San Diego,还有 independent researcher,也就是个人开发者、个人研究者。
现在看,它可能已经有 800 多个 contributor,是一个生态做得比较好的库。它还支持 CPU、CUDA、NPU、HPU 等各种架构,很多公司也在贡献。
程曼祺 Manqi Cheng
我昨天刚好和 MiniMax 做线性注意力新架构的人聊了聊。他们当时把 MiniMax-01 开源之后,也有人反馈说不知道怎么优化,因为他们没有放优化的部分。
后来他们把优化部分放到了 vLLM 这个库里,相当于向这个库贡献代码。
王子涵
对。因为这个库的生态做得太好了。
最近也有一些新库,比如 SGLang,这是一个比较新的库,但它也获得了很多关注,contributor 也很多。我听一些人说,它的使用体验可能和 vLLM 不相上下,有些方面甚至更好。
我觉得做 SGLang 的那群人可能更跟潮流。R1 出来之后,他们第 1 时间就宣布支持 R1 的代码。vLLM 的库本身做得非常好,但对于紧跟潮流这件事可能比较佛系。
SGLang 会直接写明,它提供对 DeepSeek-V3、R1 等模型的支持,也是一个生态做得很好的库。
这就是不同框架各自比较有特色的地方。可能你有的功能我都有,我有的功能你也都有,但优化时可能会朝着不同方向去做。
程曼祺 Manqi Cheng
这是推理库。在推理库之前,其实还有一个模型权重。
模型权重一般是在 Hugging Face 上下载。各种各样的数据,包括模型数据和数据集,也都可以在上面下载。
比如这里有 files and versions,点进去之后就是不同的模型。你会发现这是一个特别大的模型,有 163 个切片,每个切片可能有 4 GB。
如果要下载,可以点 use this model。这里有不同的 library,比如用 Transformers library 是这样下载;如果用 vLLM,就是这样下载。
这里的 libraries,是不同推理框架的意思吗?
王子涵
这个其实是 Transformers。Transformers 是 Hugging Face 在维护的库。它可以算是一个推理框架,但不只是推理框架,也可以用来训练。
所以目前大家比较常用的推理框架,可能就是这两个。
整体来说,绝大部分公司应该会开源技术报告和模型权重。开源推理框架的稍微少一些,开源训练框架的就更少了。
程曼祺 Manqi Cheng
这里还有一个字节开源的训练框架。我们之前做 reasoning 那个 work 的时候,也用过这个框架。
王子涵
它叫 verl。它是一个比较好的、支持 RL 的框架。
训练时点进这里,会看到不同的 trainer,比如 PPO trainer。它会告诉你怎么做。里面可能还会有不同的并行模式。
FSDP 是一种并行训练模型的方式,也可能会有其他模式。
程曼祺 Manqi Cheng
字节开源的训练框架叫 verl,对吧?
王子涵
对,叫 verl。
程曼祺 Manqi Cheng
这个框架用的人多吗?
王子涵
看起来用的人还挺多。它的 pull request 很多,open 的有 30 个,closed 的有 196 个,加起来有 200 多个。Issue 加起来也有几百个,至少有一两百个。
程曼祺 Manqi Cheng
所以字节愿意开源一个训练框架,还是比较少见的选择?
王子涵
主要是开源训练框架需要做很多工作。
比如在公司内部写代码时,可能不会特别在意代码规范。但开源之后,就必须把代码写得特别清楚。所以我觉得字节开源自己的框架还是挺好的。
程曼祺 Manqi Cheng
在核心 AI 研究者和技术人员那里,字节开源训练框架这件事,会让大家产生一些好感吗?
王子涵
反正我是挺有好感的,因为我之前用的就是这套框架,它陪伴我度过了一些时期。
7. 数据集为何难以开源
程曼祺 Manqi Cheng
刚才我们讲了几个层次:最开始是技术报告,然后是权重,权重主要可以在 Hugging Face 上下载;还讲到了推理框架,以及比较少开源的训练框架。
数据这个层面呢?你刚才也提到数据集。现在数据开源是什么现状?
王子涵
数据开源的话,几乎没有公司会开源数据集。
他们可能会在技术报告里写一下使用了哪些不同数据、比例是多少,但具体开源数据的公司非常少。我觉得主要还是出于信息敏感性的考虑。
比如你在网上爬数据,只要是能看见的、法律允许的,就可以爬。但这些数据里面可能有一些比较敏感的内容。
假设你爬了很多人的个人网站,这些网站本身肯定能爬。但爬下来之后存进数据集,别人使用这个数据集,就可以把这些人的网站都找出来,可能会拿去做一些不好的事情。
所以开源数据的公司可能有安全性考虑,不完全是他们不想开,或者没有能力开源。
程曼祺 Manqi Cheng
DeepSeek 自己现在开源的内容,涉及我们刚才说的几个大的部分:技术报告、权重、推理框架、训练框架,哪些已经开源了?
王子涵
除了数据集之外,我觉得它基本都开源了。DeepSeek 的训练框架也开源了,我找一下。
他们现在逐渐在开一些。第 1 个开的应该是 ESFT,我自己的那篇工作。我很确定它开源了训练框架,而且我们还做了一些优化。
程曼祺 Manqi Cheng
ESFT 是你自己的哪一项工作?
王子涵
就是专家专业微调。它主要针对 MOE 模型。
MOE 模型里有不同的专家,每个专家都有一些特点。比如它可能倾向于处理不同的任务,在某个任务下,某些专家的激活会更明显。
我们就想,能不能利用这个特质,进行更 efficient 的模型微调。比如微调时选定几个和任务比较匹配的专家,只 fine-tune 这些专家,其他参数不微调。
这样一方面可以减少计算资源,另一方面是让专业的人做专业的事,识别不同专家适合哪些任务。这个工作我们也开源出来了。
程曼祺 Manqi Cheng
但这个代码是不是还可以写得更好?
王子涵
对。当时我们想着尽快把工作推出来,所以会再看一下 eval、train,train 里面可能还有 parallel,然后对它做一些优化。
8. 开源需要额外工程
程曼祺 Manqi Cheng
正好也可以讲讲,从闭源状态到开源状态,我额外要做哪些工作?
你刚才提到,自己内部写代码时,代码规范可能不需要做得那么好。但如果要开源、让所有人都能用起来,就要做这方面的工作。除此之外还有什么?
王子涵
我主要想到的就是这些。
另外,如果你要开源的是一个框架中的某个部分,而这个部分依赖于公司内部正在使用的一个库,但你暂时没有计划开源整个庞大的框架,那么就要让这一部分适配现在已经开源的框架。
我当时在这方面做了很多工作。因为他们当时暂时不打算开源整个很大的库,但我的代码都是在那个大库上写的。所以他们希望我用已经开源的框架重新写一遍。
我重新写了一遍,大概花了两三天,把代码变得更规范,也适配到一个公开的开源库上。
程曼祺 Manqi Cheng
代码规范和适配公开开源库,大概会占你们多少精力?你刚才说后面适配那部分花了两三天,那前面代码规范大概占多少时间?
王子涵
代码规范花了挺久,我花了一周多。
程曼祺 Manqi Cheng
一周多到两三天,在你们这种 AI 研究人员的评估维度里,算久还是不算久?
王子涵
挺久的。一周可以做不少事。
我觉得一周能干很多事情。开源只是一个优先级的问题。有时候你觉得算法很有前景,很想去优化它,就会先优化算法本身。
有时候你觉得开源之后,社区能够真正用上这项工作、享受到工作成果,那开源就是优先的事情。其实都是优先级的问题。
一周多的时间,我可以跑模型、做很多实验。如果去做开源框架,就是想服务社区,把这个东西让更多人用上。
程曼祺 Manqi Cheng
所以对一些原本一直闭源的公司来说,如果要开源模型,甚至之后开源更多框架,确实需要额外的人力支持。
王子涵
非常需要。而且很多公司在这方面积淀比较少,可能更需要多下功夫。
比如开源时怎么把代码写得规范,我觉得很多公司,或者说很多人,都没有受过系统的代码规范教育。现在所有人的代码规范,其实都没有一套系统课程,也没有系统教育。
比如我在美国,和一些 collaborator 合作时,经常觉得他的 idea 很好,但代码细节让人看了比较难受。
我记得之前看过一个别人做的工作。他开源了一个方法,里面有 3 个步骤,就把 3 个文件直接命名成 step 1、step 2、step 3。
我当时看了特别难受,很想跟他说,能不能把名字换一下。比如改成 3 个不同方法的名称也可以。
如果这样做,别人想用你的库做自己的事情,就可以直接再加一个文件,并命名成他要做的那件事。比如他想在 step 1 和 step 2 中间加一个步骤,就不用命名成 step 1.5。
如果把它命名成 step 2,后面的文件名都要改;如果只是把文件加进去,就要命名成 step 1.5,感觉很奇怪。还不如一开始就把不同代码文件的名字写好,后面维护也方便。
我觉得很多时候大家没有意识到,规范不是一日之功,需要练习和学习,才能把代码开得让大家读起来舒服。
程曼祺 Manqi Cheng
你说到这个点,我想起很久以前采访过阿里。他们有一个类似代码规范委员会的机构,专门制定代码规范。
不管你在外面的习惯是什么,进入阿里之后都有一套设计得很细的格式。比如怎么空格,一个东西前面空两格还是空 3 格,都会规定。
他们希望在一个大机构里,大家的代码都比较规范,这样相互协作,包括新人接手老人的工作时,也比较容易修改。
王子涵
对,这很重要。
程曼祺 Manqi Cheng
你刚才说的也解释了我的一个疑惑。文心不是最近宣布要开源吗?但他们宣布要到 6 月 30 日才正式开源。你觉得要这么久正常吗?是因为工作量确实很大吗?
王子涵
工作量很大肯定是其中一个重要原因,具体还是要看他们自己的计划。
9. 开源策略取决于商业模式
程曼祺 Manqi Cheng
刚才我们聊了开源的不同层次,接下来也想和子涵聊一聊不同公司的开源策略,以及目前全球正在发生的开源转向。
我们可以先从本身就在开源的公司聊起,其中当然很有代表性的就是刚才说了很多的 DeepSeek。
从 DeepSeek 的开源策略来说,它一直选择比较开放的 MIT 协议,也一直开源自己最强的模型。另一方面,有一些公司会把最强的模型保留为闭源,开源次强的或者更小版本的模型。
你觉得不同的开源策略,和公司的盈利模式有关吗?
王子涵
我觉得不同的开源策略,确实和公司的盈利模式有关。
有些公司最强的模型就是开源的,可能完全不赚模型本身的溢价。第 1 种可能是老板不想赚钱,开源就是为了造福社会。
第 2 种可能是它不想通过模型 API 赚钱,而是想做更大的事情。这个“大”有多大?我觉得最大可能是重构整个行业生态,比如以后大家都以这家公司的一套系统为标准。
如果想拿开源赚钱,而不是靠订阅费,就可能会开源自己最强的模型。
其实不只是 DeepSeek。比如 AllenAI,美国的另一个机构,也是开源自己最强的模型,根本不赚这笔钱。
而且 AllenAI 应该是唯一一个把数据集也开放出来的开源项目。除了 AllenAI 之外,还有一个叫 EleutherAI 的机构,上面有一个模型叫 Pythia。
它开源到了什么程度?它甚至担心你承担不起独自训练的风险,连预训练过程中的中间 checkpoint 都开源了。第 0 步、第 1 步、第 2 步、第 4 步,一直到第 1,000 步,每隔 1,000 步就开放一个权重。
程曼祺 Manqi Cheng
保姆式开源。
王子涵
对,真的是保姆式开源。因为这家公司可能也是研究型机构。
我觉得第 1 类开源力度最大的公司,包括 DeepSeek、AllenAI、EleutherAI,它们不靠这个赚钱。
第 2 类是开放较小型号的公司。一方面可能要赚订阅费,另一方面也想造福 community。
一些不涉及当前阶段核心商业机密的东西可能会开放。他希望在竞争对手那里保持优势,但同时也想让开源服务更多人,所以会开源一个小一点的模型。
如果社区想自己研究,就可以用这个模型。但如果涉及订阅费,或者任何可能和公司直接相关的内容,就不会开。
程曼祺 Manqi Cheng
你觉得今年我们会看到 OpenAI 开源最强的模型吗?
王子涵
我不太确定。我很期待他们的 plan。
最近 Sam Altman 发过一条 Twitter,说他们要开源,还发起了一个投票。当然现在不涉及最强模型,给的两个选项是 o3-mini 和一个 phone-size model,也就是可以部署在手机端的较小模型。
你比较期待他开源哪个?
程曼祺 Manqi Cheng
其实我觉得开哪个都挺好,都会服务一部分人。还是看他们自己的计划。
但整体来说,对大多数公司而言,即使只开源一小部分,对社会的贡献肯定也比完全不开源好。
王子涵
但不开源也有它可能 make sense 的地方。
我一直在构想一个场景:假如以后 language model,或者说整套 AI 足够强大了,到时候开源是不是仍然是一个好的选择?
后来我的直觉告诉我,到时候可能是第二种公司更 make sense:开源一个比较小的模型,最强的模型不开放。
因为把最强的模型开源之后,很难防止有人用它做一些不好的事情。
程曼祺 Manqi Cheng
你刚才这个观点不是从纯粹商业的角度考虑,而是从技术的社会影响角度考虑,对吧?
王子涵
对。
10. 开源模型带来滥用风险
比如我之前有一次 Twitter 账号被黑了。我觉得我之所以被黑,是因为有人在网上用大语言模型做了一个 Agent。
这个 Agent 会针对不同的人,用不同的方式、不同的角度,给他们发 Twitter 邀请,邀请他们参加各种活动,比如商业访谈之类的。最终目的是让对方点开一个链接。
他会让你觉得这个人特别靠谱,然后去点开链接。我估计他甚至在背后偷偷训练了一个模型,让 Twitter 用户更容易点进去。
一点进去,账号就被黑了。黑完之后,他会用你的账号做一些不好的事情,比如发广告。
我就想,这个人是把最强的大语言模型用于一个不太好的目标,比如以骗你点开链接为目标做优化,最后训练出一个能够骗很多人点开链接的模型。这不就是一件不好的事情吗?
这件事可能还需要一个足够强的模型才能做到。但如果以后我们有了更强的模型,他不只是用来骗人,可能还会用它做更不好的事情,比如直接在网上注册 100 个小号,进行网络暴力,那可能就更麻烦了。
程曼祺 Manqi Cheng
我们今天前面大部分聊的是开源对社区的贡献,以及开源对整个技术进展的加速。你最后说的这个点也非常好,因为你自己就是受害者,是开源的受害者,算是现身说法了。
这也让我想到,之前和一位投资人交流时,我看到他写的一篇分享,里面引用了伊利亚和 Sam Altman 产生分歧时,伊利亚发过的一条 Twitter。大概翻译成中文就是:
“如果你把智能看得比人类的其他所有品质都重要,那你日后的日子可不会好过。”
王子涵
对,不要太卷了。
我觉得他说得很有道理。很多时候,有了这么强的 AI 之后,人类会怀疑自己存在的价值。
但我觉得人类的价值本来就不在智力上。拼智力肯定拼不过 AI,那就不用拼了。
人类不需要证明自己有什么价值。活在世界上,就相当于你进入了一个新游戏,注册了一个账号,成为一名玩家。别人问你能为游戏带来什么,你说:“我为游戏带来一个新玩家。”这就是意义。
没必要比较谁的智力更高。人的某些方面比不过 AI,那就不比了,享受它就好。
围棋那帮人其实也经历了一个很漫长的接受过程,从抗拒 AI 到加入 AI。最后大家把它当成一种娱乐:我知道这个地方 AI 比人强,那我就不和它正面冲突,把它当成学习对象,我觉得也挺好的。
程曼祺 Manqi Cheng
非常感谢今天子涵来做客《晚点聊》,和我们分享他自己参与过的一些开源项目、对开源社区的观察,以及最后这个很特别的个人想法。
我和很多人讨论过,如果 AGI 真的到来,会发生什么。你应该是其中非常年轻的一位,你是 00 后,对吧?
王子涵
我是 2002 年的。
程曼祺 Manqi Cheng
我可能主要是在和 80 后、90 后讨论这类问题,所以大家的想法确实会很不一样。
王子涵
对。
程曼祺 Manqi Cheng
非常感谢你今天来做客《晚点聊》。我们今天的节目就到这里,各位听友,拜拜。
王子涵
好的,谢谢曼祺,非常非常开心。
程曼祺 Manqi Cheng
嗯,好的好的。本期节目就到这里,感谢收听。如果你对今天聊的话题有观察、好奇或疑问,欢迎在评论区分享想法,这也会成为我们节目的一部分,让整个讨论更完整。你也可以把我们的节目分享给对这个话题感兴趣的朋友,推荐更多你想听的主题和嘉宾。你可以从小宇宙、苹果 Podcast 等渠道关注“晚点聊 Late Talk”,也欢迎关注我们的公众号“晚点 Late Post”。下期再见。