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

❤️ 如果你也关注 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 支持
metaUbuntu 22.04192.168.1.1128GB-RoCE
storage1Ubuntu 22.04192.168.1.2512GB14TB × 16RoCE
storage2Ubuntu 22.04192.168.1.3512GB14TB × 16RoCE
storage3Ubuntu 22.04192.168.1.4512GB14TB × 16RoCE
storage4Ubuntu 22.04192.168.1.5512GB14TB × 16RoCE
storage5Ubuntu 22.04192.168.1.6512GB14TB × 16RoCE
RDMA 配置
  1. 为 RDMA 网卡分配 IP 地址。每个节点支持多个 RDMA 网卡(InfiniBand 或 RoCE)。
  2. 使用 ib_write_bw 检查节点间的 RDMA 连通性。

第三方依赖

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

服务节点
ClickHousemeta
FoundationDBmeta
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 连接信息:
[server.monitor_collector.reporter]
type = 'clickhouse'

[server.monitor_collector.reporter.clickhouse]
db = '3fs'
host = '<CH_HOST>'
passwd = '<CH_PASSWD>'
port = '<CH_PORT>'
user = '<CH_USER>'
  • 启动监控服务:
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 配置文件:
cluster_id = "stage"

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

Step 4: 部署 Mgmtd 服务

meta 节点上安装 mgmtd 服务。

配置与启动
  • 复制二进制文件和配置文件:
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 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值