3FS README

The project's README from github.com/deepseek-ai/3FS. As one markdown file: README.md.

Fire-Flyer File System

Build License

The Fire-Flyer File System (3FS) is a high-performance distributed file system designed to address the challenges of AI training and inference workloads. It leverages modern SSDs and RDMA networks to provide a shared storage layer that simplifies development of distributed applications. Key features and benefits of 3FS include:

Documentation

Performance

1. Peak throughput

The following figure demonstrates the throughput of read stress test on a large 3FS cluster. This cluster consists of 180 storage nodes, each equipped with 2×200Gbps InfiniBand NICs and sixteen 14TiB NVMe SSDs. Approximately 500+ client nodes were used for the read stress test, with each client node configured with 1x200Gbps InfiniBand NIC. The final aggregate read throughput reached approximately 6.6 TiB/s with background traffic from training jobs.

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

To benchmark 3FS, please use our fio engine for USRBIO.

2. GraySort

We evaluated smallpond using the GraySort benchmark, which measures sort performance on large-scale datasets. Our implementation adopts a two-phase approach: (1) partitioning data via shuffle using the prefix bits of keys, and (2) in-partition sorting. Both phases read/write data from/to 3FS.

The test cluster comprised 25 storage nodes (2 NUMA domains/node, 1 storage service/NUMA, 2×400Gbps NICs/node) and 50 compute nodes (2 NUMA domains, 192 physical cores, 2.2 TiB RAM, and 1×200 Gbps NIC/node). Sorting 110.5 TiB of data across 8,192 partitions completed in 30 minutes and 14 seconds, achieving an average throughput of 3.66 TiB/min.

3. KVCache

KVCache is a technique used to optimize the LLM inference process. It avoids redundant computations by caching the key and value vectors of previous tokens in the decoder layers. The top figure demonstrates the read throughput of all KVCache clients (1×400Gbps NIC/node), highlighting both peak and average values, with peak throughput reaching up to 40 GiB/s. The bottom figure presents the IOPS of removing ops from garbage collection (GC) during the same time period.

KVCache Read Throughput KVCache GC IOPS

Check out source code

Clone 3FS repository from GitHub:

git clone https://github.com/deepseek-ai/3fs

When deepseek-ai/3fs has been cloned to a local file system, run the following commands to check out the submodules:

cd 3fs
git submodule update --init --recursive
./patches/apply.sh

Install dependencies

Install dependencies:

# 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

Install other build prerequisites:

Build 3FS

Build 3FS in build folder:

# 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

Due to the historical use of std::shuffle, binaries compiled with different compiler versions (e.g., g++10 vs. g++11 +) may be incompatible (issue). To resolve this, you must explicitly specify -DSHUFFLE_METHOD during compilation to lock in a consistent shuffle algorithm:

Build 3FS use Docker

Run a test cluster

Follow instructions in setup guide to run a test cluster.

Report Issues

Please visit https://github.com/deepseek-ai/3fs/issues to report issues.

3FS (deepseek-ai/3FS)

Searching Database…

10.3K ·GitHub
What is this?3FS (Fire-Flyer File System) is a high-performance distributed file system built by DeepSeek to handle AI training and inference storage workloads at scale, pooling thousands of SSDs and hundreds of storage nodes behind RDMA networking into one shared storage layer.
Do I mount it like a normal file system, or use a special API?It exposes a standard, well-known file interface backed by stateless metadata services and a transactional key-value store like FoundationDB, so most apps just use ordinary file calls; a separate USRBIO API is available for maximum throughput.
How do I get a test cluster running?Clone the repo with its submodules, install the required build prerequisites, build 3FS (optionally using the provided TencentOS-4 or OpenCloudOS-9 Docker build images), then follow the project's Setup Guide to bring up a test cluster.
What do I need installed before building it?You need libfuse 3.16.1+, FoundationDB 7.1+, and a Rust toolchain (minimum 1.75.0, recommended 1.85.0+), on top of a working C++/CMake build environment.
Any build pitfalls I should know about?Binaries compiled with different GCC versions (g++10 vs g++11+) can be incompatible because of how std::shuffle behaves, so you must explicitly pin -DSHUFFLEMETHOD and keep using the same setting for the lifetime of a deployed cluster.
Is this meant for a single machine or does it need a whole cluster?It's built for multi-node, data-center-scale deployments over InfiniBand/RDMA; DeepSeek's own benchmark used 180 storage nodes with dual 200Gbps NICs and NVMe SSDs plus 500+ client nodes, so it's not something you'd run on one laptop.
How fast is 3FS in practice?On a 180-node test cluster it reached about 6.6 TiB/s aggregate read throughput, and a GraySort benchmark sorted 110.5 TiB of data across 8,192 partitions in 30 minutes 14 seconds.
What is KVCache used for here?3FS acts as a cheaper, higher-capacity alternative to DRAM for caching key/value vectors during LLM inference, with client read throughput peaking around 40 GiB/s in DeepSeek's tests.
Why pair RDMA networking with NVMe SSDs?Combining RDMA with NVMe lets 3FS disaggregate compute and storage nodes (CRAQ gives strong consistency) while still delivering near-local-disk throughput across the whole cluster, which is what large-scale training and inference pipelines need.
What are similar projects?ceph, scylladb, hadoop, redpanda, nebula, kafka, tikv, seaweedfs
Size
6 MB
Stars
10.3K
Updated
CommitMay 07
Age
1y
Commits · 90 Days