推友xorswap在深入研究deepseek的开源文件系统3FS后做的解读:
DeepSeek 构建了一个独特的、领域特定的机器学习训练/推理分布式文件系统。 它再次证明,有可能从现有硬件中榨取更多性能。 目前似乎也没有可比的开源项目。
传统文件系统通常针对顺序的、线性的访问模式进行了优化。这有利于关系型数据库引擎等等。 然而预训练主要以随机的、短时的方式访问数据——完全相反。
为什么要以这种方式访问数据呢?
假设我们有一个大型文本语料库,它无法全部放入 GPU 的 RAM 中。我们也不想一次处理一个 token,因为那样会导致计算和内存资源的严重浪费。
更优的方法是每次训练一个“批次”的数据。 在顺序数据上训练的模型有“记住”数据顺序性质的风险,而不是学习底层的特征。随机抽样在很大程度上消除了这种风险。
因此,这实际上是一个罕见的用错工具的案例——传统的文件系统并不适合大规模预训练这项工作。 同样重要的是要注意,理论上,固态硬盘 (SSD) 相对于机械硬盘,在随机和顺序访问方面都能提供相同的性能。
当读取文件时,程序通常会通过一个中间人——内核——它提供文件缓存等功能。 文件缓存的目标是检测频繁读取的块,将它们存储在内存中,并在再次访问时节省时间。
(文件缓存也会导致不可预测的内存使用/延迟峰值)
DeepSeek 的文件系统完全消除了它,客户端直接访问驱动器 (Direct IO)——移除了中间人(这是一种在数据库管理系统(如 Postgres 或 OracleDB)中常见的技术)。
DeepSeek 的文件系统也针对 KV 缓存进行了优化。 Transformer 的核心部分是在因果注意力机制中使用的 Query、Key、Value 张量。 KV 缓存是一种通过重新获取 Q 和 K 张量而不是在每一层重新计算来大幅提高推理性能的简单技术。
到目前为止,KV 缓存通常驻留在 GPU 的易失性内存中,而 DeepSeek 的文件系统现在可以实现更大的缓存和更大的 K 和 V 张量容量(以略微的带宽权衡为代价)——总体而言,性能有所提升。
该文件系统还具有一流的高度优化的数据格式——“FFRecord”——它可以很好地与现有 ML 框架(torch、Jax 等)的数据加载器集成。
差不多就是这样,还有一些其他小的改进。 同样重要的是要注意,编写正确的高度分布式系统非常非常困难。