Files
wehub-resource-sync da13b654b1
Build / build (push) Waiting to run
docs: make Chinese README the default
2026-07-13 10:49:14 +00:00

7.5 KiB
Raw Permalink Blame History

Note

本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
English · 原始项目 · 上游 README
原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。

Fire-Flyer File System

Build License

Fire-Flyer File System3FS)是一种高性能分布式文件系统,旨在应对 AI 训练与推理工作负载的挑战。它利用现代 SSD 和 RDMA 网络提供共享存储层,从而简化分布式应用的开发。3FS 的主要特性与优势包括:

  • 性能与易用性

    • 解耦架构(Disaggregated Architecture 汇聚数千块 SSD 的吞吐量与数百个存储节点的网络带宽,使应用能够以无需感知数据局部性的方式访问存储资源。
    • 强一致性(Strong Consistency 采用带分摊查询的链式复制(Chain Replication with Apportioned QueriesCRAQ)实现强一致性,使应用代码简单且易于推理。
    • 文件接口(File Interfaces 构建由事务型键值存储(例如 FoundationDB)支撑的无状态元数据服务。文件接口广为人知、应用广泛,无需学习新的存储 API。
  • 多样化工作负载

    • 数据准备(Data Preparation 将数据分析流水线的输出组织为分层目录结构,并高效管理大量中间输出。
    • 数据加载器(Dataloaders 支持跨计算节点对训练样本进行随机访问,从而无需预取或打乱数据集。
    • 检查点(Checkpointing 支持大规模训练的高吞吐量并行检查点。
    • 推理用 KVCacheKVCache for Inference 提供相比基于 DRAM 缓存更具成本效益的替代方案,具备高吞吐量且容量显著更大。

文档

性能

1. 峰值吞吐量

下图展示了大型 3FS 集群上读压力测试的吞吐量。该集群由 180 个存储节点组成,每个节点配备 2×200Gbps InfiniBand 网卡和十六块 14TiB NVMe SSD。读压力测试使用了约 500+ 个客户端节点,每个客户端节点配置 1×200Gbps InfiniBand 网卡。在训练作业后台流量的影响下,最终聚合读吞吐量达到约 6.6 TiB/s。

Large block read throughput under stress test on a 180-node cluster

要对 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。

KVCache Read Throughput KVCache 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

安装其他构建前置依赖:

  • libfuse 3.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++10g++11 +)编译的二进制文件可能不兼容(issue). 为解决此问题,你必须在编译时显式指定 -DSHUFFLE_METHOD,以锁定一致的 shuffle 算法:

  • 现有集群:使用与先前部署该集群时所使用的编译器版本对应的方法(g++10g++11)。
  • 新集群:你可以选择 g++10g++11。不过,一旦集群部署完成,后续所有构建都必须保持相同配置以维持兼容性。

使用 Docker 构建 3FS

  • 对于 TencentOS-4docker pull docker.io/tencentos/tencentos4-deepseek3fs-build:latest
  • 对于 OpenCloudOS-9docker pull docker.io/opencloudos/opencloudos9-deepseek3fs-build:latest

运行测试集群

按照部署指南中的说明运行测试集群。

报告问题

请访问 https://github.com/deepseek-ai/3fs/issues 报告问题。