DeepSeek开源周第五弹之一!3FS:支撑V3/R1模型数据访问的高性能分布式文件系统

简介: 3FS是DeepSeek开源的高性能分布式文件系统,专为AI训练和推理任务设计,提供高达6.6 TiB/s的读取吞吐量,支持强一致性保障和通用文件接口,优化AI工作负载。

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦


🎧 “AI训练新利器!DeepSeek开源3FS文件系统,6.6 TiB/s读取吞吐量,推理效率提升40%”

大家好,我是蚝油菜花。你是否也遇到过——

  • 👉 AI训练数据加载慢,GPU利用率低
  • 👉 大规模数据处理效率低下,检查点耗时过长
  • 👉 推理任务重复计算,资源浪费严重...

今天揭秘的 DeepSeek 3FS,用高性能分布式文件系统彻底解决这些问题!这个基于现代SSD和RDMA网络技术的开源神器,专为AI训练和推理任务设计,提供高达6.6 TiB/s的读取吞吐量,支持强一致性保障和通用文件接口,优化AI工作负载。工程师们已经用它提升训练速度,项目经理靠它优化推理效率——你的AI项目准备好迎接性能革命了吗?

🚀 快速阅读

3FS是DeepSeek开源的高性能分布式文件系统,专为AI训练和推理任务设计。

  1. 核心功能:提供高达6.6 TiB/s的读取吞吐量,支持强一致性保障和通用文件接口。
  2. 技术原理:基于分离式架构和链式复制与分配查询(CRAQ)技术,优化数据访问和一致性。

3FS 是什么

3fs-cover

3FS(Fire-Flyer File System)是DeepSeek推出的高性能分布式文件系统,专为AI训练和推理任务设计。3FS利用现代SSD和RDMA网络技术,基于分离式架构聚合数千个SSD的吞吐量和数百个存储节点的网络带宽,提供高达6.6 TiB/s的读取吞吐量。

3FS提供强一致性保障,提供通用文件接口,无需学习新的存储API。3FS在大规模数据处理和推理优化中表现出色,在GraySort测试中达到3.66 TiB/min的吞吐量,KVCache读取吞吐量可达40 GiB/s。

3FS 的主要功能

  • 高性能数据访问:聚合数千个SSD的吞吐量和数百个存储节点的网络带宽,提供高达6.6 TiB/s的读取吞吐量。支持大规模集群中的高吞吐量并行读写,优化AI训练和推理任务中的数据加载效率。
  • 强一致性保障:实现链式复制与分配查询(CRAQ)技术,确保数据的强一致性,简化应用开发复杂性。
  • 通用文件接口:提供无状态元数据服务,支持事务性键值存储(如FoundationDB),用户无需学习新的存储API。
  • 优化AI工作负载
    • 数据准备:高效管理大量中间输出,支持层次化目录结构。
    • 数据加载:支持跨计算节点的随机访问,无需预取或数据集洗牌。
    • 检查点支持:为大规模训练提供高吞吐量并行检查点功能。
    • KVCache:为推理任务提供高吞吐量、大容量的缓存替代方案,优化推理效率。
  • 高扩展性和灵活性:支持大规模集群部署,适用于从单节点到数千节点的多样化应用场景。

3FS 的技术原理

  • 分离式架构:基于计算与存储分离的设计,将存储资源集中管理,用高速网络(如RDMA)实现数据的高效传输。让应用以“位置无关”的方式访问存储资源,简化资源管理。
  • 链式复制与分配查询(CRAQ):为实现强一致性,3FS基于CRAQ技术。基于链式复制确保数据在多个副本间的一致性,用分配查询优化读取性能,减少延迟。
  • 无状态元数据服务:3FS推出无状态的元数据服务,基于事务性键值存储(如FoundationDB),提高系统的可扩展性,降低元数据管理的复杂性。
  • Direct I/O与RDMA优化:基于Direct I/O直接访问SSD,避免使用文件缓存,减少CPU和内存开销,用RDMA技术实现高效的数据传输,进一步提升性能。
  • KVCache技术:在推理任务中,基于KVCache缓存关键中间结果,避免重复计算,显著提高推理效率。KVCache结合高吞吐量和大容量的优势,是DRAM缓存的低成本替代方案。
  • 数据局部性优化:基于优化数据布局和访问模式,减少数据传输的延迟和带宽消耗,特别是在大规模分布式训练和推理任务中表现出色。

如何运行 3FS

1. 克隆 3FS 仓库

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

2. 安装依赖

# for 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

# for 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

3. 构建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

如何运行 3FS 分布式存储系统

接下来将介绍如何手动部署一个六节点的 3FS 分布式存储集群(Cluster ID 为 stage),并提供每一步的操作指导,包括服务安装、配置、启动以及客户端的挂载方法。

硬件与软件环境准备

硬件配置

以下是集群中各节点的硬件要求:

节点 操作系统 IP 地址 内存 SSD 配置 RDMA 支持
meta Ubuntu 22.04 192.168.1.1 128GB - RoCE
storage1 Ubuntu 22.04 192.168.1.2 512GB 14TB × 16 RoCE
storage2 Ubuntu 22.04 192.168.1.3 512GB 14TB × 16 RoCE
storage3 Ubuntu 22.04 192.168.1.4 512GB 14TB × 16 RoCE
storage4 Ubuntu 22.04 192.168.1.5 512GB 14TB × 16 RoCE
storage5 Ubuntu 22.04 192.168.1.6 512GB 14TB × 16 RoCE

RDMA 配置

  1. 为 RDMA 网卡分配 IP 地址。每个节点支持多个 RDMA 网卡(InfiniBand 或 RoCE)。
  2. 使用 ib_write_bw 检查节点间的 RDMA 连通性。

第三方依赖

生产环境中建议在专用节点上安装以下服务:

服务 节点
ClickHouse meta
FoundationDB meta

FoundationDB 配置

  1. 确保 FoundationDB 客户端版本与服务器版本一致,或者复制对应版本的 libfdb_c.so 以保持兼容性。
  2. 找到 fdb.cluster 文件和 libfdb_c.so 的路径:/etc/foundationdb/fdb.cluster/usr/lib/libfdb_c.so

Step 0: 编译 3FS

按照运行教程中构建3FS的说明编译 3FS,生成的二进制文件位于 build/bin

部署与运行步骤

Step 1: 创建 ClickHouse 表

导入 SQL 文件到 ClickHouse:

clickhouse-client -n < ~/3fs/deploy/sql/3fs-monitor.sql

Step 2: 部署监控服务

meta 节点上安装 monitor_collector 服务。

配置与启动

  • 复制二进制文件和配置文件:
    mkdir -p /opt/3fs/{
         bin,etc}
    mkdir -p /var/log/3fs
    cp ~/3fs/build/bin/monitor_collector_main /opt/3fs/bin
    cp ~/3fs/configs/monitor_collector_main.toml /opt/3fs/etc
    
  • 更新 monitor_collector_main.toml 配置文件,添加 ClickHouse 连接信息:
    ```toml
    [server.monitor_collector.reporter]
    type = 'clickhouse'

[server.monitor_collector.reporter.clickhouse]
db = '3fs'
host = ''
passwd = ''
port = ''
user = ''

- 启动监控服务:
```bash
cp ~/3fs/deploy/systemd/monitor_collector_main.service /usr/lib/systemd/system
systemctl start monitor_collector_main

Step 3: 部署 Admin 客户端

在所有节点上安装 admin_cli

配置与启动

  • 复制二进制文件和配置文件:
    mkdir -p /opt/3fs/{
         bin,etc}
    rsync -avz meta:~/3fs/build/bin/admin_cli /opt/3fs/bin
    rsync -avz meta:~/3fs/configs/admin_cli.toml /opt/3fs/etc
    rsync -avz meta:/etc/foundationdb/fdb.cluster /opt/3fs/etc
    
  • 更新 admin_cli.toml 配置文件:
    ```toml
    cluster_id = "stage"

[fdb]
clusterFile = '/opt/3fs/etc/fdb.cluster'


### Step 4: 部署 Mgmtd 服务
在 **meta** 节点上安装 `mgmtd` 服务。

#### 配置与启动
- 复制二进制文件和配置文件:
```bash
cp ~/3fs/build/bin/mgmtd_main /opt/3fs/bin
cp ~/3fs/configs/{mgmtd_main.toml,mgmtd_main_launcher.toml,mgmtd_main_app.toml} /opt/3fs/etc
  • 更新配置文件,设置 node_idcluster_id 和监控地址。
  • 初始化集群并启动服务:
    /opt/3fs/bin/admin_cli -cfg /opt/3fs/etc/admin_cli.toml "init-cluster --mgmtd /opt/3fs/etc/mgmtd_main.toml 1 1048576 16"
    systemctl start mgmtd_main
    

Step 5: 部署 Meta 服务

meta 节点上安装 meta 服务。

配置与启动

  • 复制二进制文件和配置文件:
    cp ~/3fs/build/bin/meta_main /opt/3fs/bin
    cp ~/3fs/configs/{
         meta_main_launcher.toml,meta_main.toml,meta_main_app.toml} /opt/3fs/etc
    
  • 更新配置文件,设置 node_idmgmtd 地址。
  • 上传配置文件并启动服务:
    /opt/3fs/bin/admin_cli -cfg /opt/3fs/etc/admin_cli.toml "set-config --type META --file /opt/3fs/etc/meta_main.toml"
    systemctl start meta_main
    

Step 6: 部署 Storage 服务

storage 节点上安装 storage 服务。

配置与启动

  • 格式化并挂载 SSD:
    for i in {
         1..16}; do
      mkfs.xfs -L data${i} /dev/nvme${i}n1
      mount -o noatime,nodiratime -L data${i} /storage/data${i}
      mkdir -p /storage/data${i}/3fs
    done
    
  • 更新配置文件,设置 node_id 和存储路径。
  • 上传配置文件并启动服务:
    /opt/3fs/bin/admin_cli -cfg /opt/3fs/etc/admin_cli.toml "set-config --type STORAGE --file /opt/3fs/etc/storage_main.toml"
    systemctl start storage_main
    

Step 7: 创建管理员用户、存储目标和链表

  • 创建管理员用户:
    /opt/3fs/bin/admin_cli -cfg /opt/3fs/etc/admin_cli.toml "user-add --root --admin 0 root"
    
  • 使用 Python 脚本生成存储目标和链表:
    python ~/3fs/deploy/data_placement/src/model/data_placement.py ...
    
  • 创建存储目标并上传链表。

Step 8: 挂载 FUSE 客户端

meta 节点上挂载 FUSE 客户端。

配置与启动

  • 复制二进制文件和配置文件。
  • 创建挂载点并启动服务:
    mkdir -p /3fs/stage
    systemctl start hf3fs_fuse_main
    

常见问题解答

如何排查 admin_cli init-cluster 错误?

如果 mgmtd 服务启动失败,可能是因为 mgmtd_main.toml 配置错误。修改配置文件后,需清空 FoundationDB 数据并重新运行 init-cluster

如何构建单节点集群?

单节点测试环境中,可以通过在一台机器上部署多个存储服务来绕过限制

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦

相关实践学习
使用PAI+LLaMA Factory微调Qwen2-VL模型,搭建文旅领域知识问答机器人
使用PAI和LLaMA Factory框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
3月前
|
传感器 算法 安全
基于分布式模型预测控制DMPC的单向拓扑结构下异构车辆车队研究(Matlab代码实现)
基于分布式模型预测控制DMPC的单向拓扑结构下异构车辆车队研究(Matlab代码实现)
145 4
|
2月前
|
存储 监控 算法
117_LLM训练的高效分布式策略:从数据并行到ZeRO优化
在2025年,大型语言模型(LLM)的规模已经达到了数千亿甚至数万亿参数,训练这样的庞然大物需要先进的分布式训练技术支持。本文将深入探讨LLM训练中的高效分布式策略,从基础的数据并行到最先进的ZeRO优化技术,为读者提供全面且实用的技术指南。
|
3月前
|
算法 调度
【孤岛划分】分布式能源接入弹性配电网模型研究【IEEE33节点】(Matlab代码实现)
【孤岛划分】分布式能源接入弹性配电网模型研究【IEEE33节点】(Matlab代码实现)
459 10
|
3月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的&quot;神经网络&quot;,强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
9月前
|
SQL
【YashanDB知识库】手工迁移Doris数据到崖山分布式
【YashanDB知识库】手工迁移Doris数据到崖山分布式
|
4月前
|
边缘计算 运维 算法
含分布式电源的配电网日前两阶段优化调度模型(Matlab代码实现)
含分布式电源的配电网日前两阶段优化调度模型(Matlab代码实现)
115 1
|
9月前
|
存储 分布式计算 负载均衡
数据分布式存储:在海量数据面前,我们如何站稳脚跟?
数据分布式存储:在海量数据面前,我们如何站稳脚跟?
1401 1
|
3月前
|
算法 安全 新能源
基于DistFlow的含分布式电源配电网优化模型【IEEE39节点】(Python代码实现)
基于DistFlow的含分布式电源配电网优化模型【IEEE39节点】(Python代码实现)
337 0
|
7月前
|
数据采集 存储 NoSQL
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
412 67

热门文章

最新文章