7.5 KiB
Note
本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
English · 原始项目 · 上游 README
原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
Fire-Flyer File System
Fire-Flyer File System(3FS)是一种高性能分布式文件系统,旨在应对 AI 训练与推理工作负载的挑战。它利用现代 SSD 和 RDMA 网络提供共享存储层,从而简化分布式应用的开发。3FS 的主要特性与优势包括:
-
性能与易用性
- 解耦架构(Disaggregated Architecture) 汇聚数千块 SSD 的吞吐量与数百个存储节点的网络带宽,使应用能够以无需感知数据局部性的方式访问存储资源。
- 强一致性(Strong Consistency) 采用带分摊查询的链式复制(Chain Replication with Apportioned Queries,CRAQ)实现强一致性,使应用代码简单且易于推理。
- 文件接口(File Interfaces) 构建由事务型键值存储(例如 FoundationDB)支撑的无状态元数据服务。文件接口广为人知、应用广泛,无需学习新的存储 API。
-
多样化工作负载
- 数据准备(Data Preparation) 将数据分析流水线的输出组织为分层目录结构,并高效管理大量中间输出。
- 数据加载器(Dataloaders) 支持跨计算节点对训练样本进行随机访问,从而无需预取或打乱数据集。
- 检查点(Checkpointing) 支持大规模训练的高吞吐量并行检查点。
- 推理用 KVCache(KVCache for Inference) 提供相比基于 DRAM 缓存更具成本效益的替代方案,具备高吞吐量且容量显著更大。
文档
性能
1. 峰值吞吐量
下图展示了大型 3FS 集群上读压力测试的吞吐量。该集群由 180 个存储节点组成,每个节点配备 2×200Gbps InfiniBand 网卡和十六块 14TiB NVMe SSD。读压力测试使用了约 500+ 个客户端节点,每个客户端节点配置 1×200Gbps InfiniBand 网卡。在训练作业后台流量的影响下,最终聚合读吞吐量达到约 6.6 TiB/s。
要对 3FS 进行基准测试,请使用我们的 fio engine for USRBIO。
2. GraySort
我们使用 smallpond 评估 GraySort 基准测试,该测试用于衡量大规模数据集上的排序性能。我们的实现采用两阶段方法:(1)通过按键前缀位进行 shuffle 来分区数据;(2)分区内排序。两个阶段均从 3FS 读取/写入数据。
测试集群包含 25 个存储节点(每节点 2 个 NUMA 域,每 NUMA 1 个存储服务,每节点 2×400Gbps 网卡)和 50 个计算节点(2 个 NUMA 域、192 个物理核心、2.2 TiB RAM,每节点 1×200 Gbps 网卡)。对 8,192 个分区中的 110.5 TiB 数据进行排序,耗时 30 分 14 秒,平均吞吐量达到 3.66 TiB/min。
3. KVCache
KVCache 是一种用于优化 LLM 推理过程的技术。它通过在解码器层中缓存先前 token 的 key 和 value 向量,避免冗余计算。 上图展示了所有 KVCache 客户端(每节点 1×400Gbps 网卡)的读吞吐量,同时突出峰值与平均值,峰值吞吐量最高可达 40 GiB/s。下图展示了同一时间段内垃圾回收(GC)期间删除操作的 IOPS。
获取源代码
从 GitHub 克隆 3FS 仓库:
git clone https://github.com/deepseek-ai/3fs
当 deepseek-ai/3fs 已克隆到本地文件系统后,运行以下命令检出子模块:
cd 3fs
git submodule update --init --recursive
./patches/apply.sh
安装依赖
安装依赖:
# for Ubuntu 20.04.
apt install cmake libuv1-dev liblz4-dev liblzma-dev libdouble-conversion-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 libclang-rt-14-dev gcc-10 g++-10 libboost1.71-all-dev build-essential
# for Ubuntu 22.04.
apt install cmake libuv1-dev liblz4-dev liblzma-dev libdouble-conversion-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 gcc-12 g++-12 libboost-all-dev build-essential
# for openEuler 2403sp1
yum install cmake libuv-devel lz4-devel xz-devel double-conversion-devel libdwarf-devel libunwind-devel \
libaio-devel gflags-devel glog-devel gtest-devel gmock-devel clang-tools-extra clang lld \
gperftools-devel gperftools openssl-devel gcc gcc-c++ boost-devel
# for OpenCloudOS 9 and TencentOS 4
dnf install epol-release wget git meson cmake perl lld gcc gcc-c++ autoconf lz4 lz4-devel xz xz-devel \
double-conversion-devel libdwarf-devel libunwind-devel libaio-devel gflags-devel glog-devel \
libuv-devel gmock-devel gperftools gperftools-devel openssl-devel boost-static boost-devel mono-devel \
libevent-devel libibverbs-devel numactl-devel python3-devel
安装其他构建前置依赖:
libfuse3.16.1 或更高版本- FoundationDB 7.1 或更高版本
- Rust toolchain:最低 1.75.0,推荐 1.85.0 或更高版本(最新稳定版)
构建 3FS
在 build 文件夹中构建 3FS:
# Replace <method> with 'g++10' or 'g++11' based on your environment
cmake -S . -B build \
-DCMAKE_CXX_COMPILER=clang++-14 -DCMAKE_C_COMPILER=clang-14 \
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DSHUFFLE_METHOD=<method>
cmake --build build -j 32
由于历史上使用了 std::shuffle,使用不同编译器版本(例如 g++10 与 g++11 +)编译的二进制文件可能不兼容(issue). 为解决此问题,你必须在编译时显式指定 -DSHUFFLE_METHOD,以锁定一致的 shuffle 算法:
- 现有集群:使用与先前部署该集群时所使用的编译器版本对应的方法(
g++10或g++11)。 - 新集群:你可以选择
g++10或g++11。不过,一旦集群部署完成,后续所有构建都必须保持相同配置以维持兼容性。
使用 Docker 构建 3FS
- 对于 TencentOS-4:
docker pull docker.io/tencentos/tencentos4-deepseek3fs-build:latest - 对于 OpenCloudOS-9:
docker pull docker.io/opencloudos/opencloudos9-deepseek3fs-build:latest
运行测试集群
按照部署指南中的说明运行测试集群。




