一文详解:DeepSeek 第五天开源的 3FS 文件系统

这个那个 

DeepSeek开源周的最后一天,迎来的是支撑其V3/R1模型全生命周期数据访问需求的核心基础设施 — Fire-Flyer File System(3FS) 和构建于其上的Smallpond数据处理框架


📥 3FS
https://github.com/deepseek-ai/3FS

3FS是一种充分利用现代SSD和RDMA网络全带宽的并行文件系统,在180节点集群上实现了6.6 TiB/s的聚合读取吞吐量,在25节点集群的GraySort基准测试中达到3.66 TiB/分钟的吞吐量,并且在KVCache查找中每个客户端节点可达40+ GiB/s的峰值吞吐量


⛲ Smallpond
https://github.com/deepseek-ai/smallpond
Smallpond则是建立在3FS之上的轻量级数据处理框架,具有高性能、可扩展性和易用性特点。

3FS的关键特性与优势

Fire-Flyer文件系统(3FS)专为解决AI训练和推理工作负载的挑战而设计,具有以下关键特性:

性能与可用性

  • • 分离式架构(Disaggregated Architecture):结合了数千个SSD和数百个存储节点的网络带宽,使应用程序可以不受位置限制地访问存储资源
  • • 强一致性(Strong Consistency):实现了链式复制与分配查询(CRAQ)协议,确保数据的强一致性,简化应用程序开发
  • • 文件接口(File Interfaces):提供基于事务性键值存储(如FoundationDB)支持的无状态元数据服务,使用通用的文件接口,无需学习新的存储API

多样化工作负载支持

  • • 数据准备:高效组织数据分析管道的输出和管理大量中间结果
  • • 数据加载:支持计算节点间的训练样本随机访问,消除预取或打乱数据集的需求
  • • 检查点保存:支持大规模训练的高吞吐并行检查点保存
  • • 推理KVCache:提供比基于内存缓存更具成本效益的替代方案,同时提供高吞吐量和更大容量

3FS的性能表现

1. 峰值吞吐量

在一个由180个存储节点组成的大型3FS集群上,每个节点配备2×200Gbps InfiniBand网卡和16个14TiB NVMe SSD,使用约500+客户端节点进行读取压力测试(每个客户端有1x200Gbps InfiniBand网卡),最终聚合读取吞吐量达到约6.6 TiB/s,并且这一性能在有训练作业的背景流量下仍然保持稳定。


2. GraySort基准测试

DeepSeek使用基于3FS的Smallpond进行GraySort基准测试,这是衡量大规模数据排序性能的标准测试。其实现采用两阶段方法:

  1. 1. 通过键的前缀位进行shuffle实现数据分区
  2. 2. 在分区内部进行排序

测试集群由25个存储节点(每节点2个NUMA域/节点,每NUMA 1个存储服务,2×400Gbps网卡)和50个计算节点(每节点2个NUMA域,192个物理核心,2.2 TiB RAM,1×200Gbps网卡)组成。对110.5 TiB数据进行8,192个分区的排序在30分14秒内完成,平均吞吐量达到3.66 TiB/分钟。


3. KVCache性能

KVCache是优化LLM推理过程的技术,通过缓存解码器层中之前token的键值向量避免重复计算。3FS的KVCache实现提供了显著的性能优势:

  • • 所有KVCache客户端的读取吞吐量峰值可达40 GiB/s
  • • 高效的垃圾回收机制,支持大规模并发操作


使用3FS

获取源代码

# 从GitHub克隆3FS仓库
git clone https://github.com/deepseek-ai/3fs

# 初始化子模块
cd 3fs
git submodule update --init --recursive
./patches/apply.sh

安装依赖

# Ubuntu 20.04
apt install cmake libuv1-dev liblz4-dev liblzma-dev libdouble-conversion-dev libprocps-dev libdwarf-dev libunwind-dev \
  libaio-dev libgflags-dev libgoogle-glog-dev libgtest-dev libgmock-dev clang-format-14 clang-14 clang-tidy-14 lld-14 \
  libgoogle-perftools-dev google-perftools libssl-dev ccache libclang-rt-14-dev gcc-10 g++-10 libboost1.71-all-dev

# Ubuntu 22.04
apt install cmake libuv1-dev liblz4-dev liblzma-dev libdouble-conversion-dev libprocps-dev libdwarf-dev libunwind-dev \
  libaio-dev libgflags-dev libgoogle-glog-dev libgtest-dev libgmock-dev clang-format-14 clang-14 clang-tidy-14 lld-14 \
  libgoogle-perftools-dev google-perftools libssl-dev ccache gcc-12 g++-12 libboost-all-dev

还需要安装其他构建前提条件:

  • • libfuse 3.16.1或更新版本
  • • FoundationDB 7.1或更新版本
  • • Rust工具链

构建3FS

cmake -S . -B build -DCMAKE_CXX_COMPILER=clang++-14 -DCMAKE_C_COMPILER=clang-14 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
cmake --build build -j 32

可以按照设置指南的说明运行测试集群。

Smallpond数据处理框架

Smallpond是一个构建在DuckDB和3FS之上的轻量级数据处理框架,具有以下特点:

  • • 🚀 由DuckDB提供支持的高性能数据处理
  • • 🌍 可扩展到处理PB级数据集
  • • 🛠️ 简单操作,无需长期运行的服务

安装Smallpond

Smallpond支持Python 3.8到3.12:

pip install smallpond

快速入门示例

首先下载示例数据:

# 下载示例数据
wget https://duckdb.org/data/prices.parquet

然后可以使用以下Python代码处理数据:

import smallpond

# 初始化会话
sp = smallpond.init()

# 加载数据
df = sp.read_parquet("prices.parquet")

# 处理数据
df = df.repartition(3, hash_by="ticker")
df = sp.partial_sql("SELECT ticker, min(price), max(price) FROM {0} GROUP BY ticker", df)

# 保存结果
df.write_parquet("output/")
# 显示结果
print(df.to_pandas())

Smallpond已在GraySort基准测试中进行了评估,在由50个计算节点和25个存储节点组成的3FS集群上,成功在30分14秒内对110.5TiB数据进行排序,平均吞吐量达3.66TiB/分钟。

回顾

回顾本周发布,DeepSeek已经构建了一个完整的大模型技术栈:

  • • Day 1 – FlashMLA:高效的MLA解码内核,优化了变长序列处理
  • • Day 2 – DeepEP:首个开源专家并行通信库,支持MoE模型训练和推理
  • • Day 3 – DeepGEMM:支持密集和MoE计算的FP8 GEMM库
  • • Day 4 – 并行计算策略:包括DualPipe双向流水线并行算法和EPLB专家并行负载均衡器
  • • Day 5 – 3FS与Smallpond:高性能数据存储和处理基础设施

对此,张涛老哥表示“够造超算的了”


顺道着…老哥的 Monica,国内 3 月要整个大活。

 

(文:赛博禅心)

欢迎分享

发表评论