❤️ 如果你也关注 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训练和推理任务设计。
- 核心功能:提供高达6.6 TiB/s的读取吞吐量,支持强一致性保障和通用文件接口。
- 技术原理:基于分离式架构和链式复制与分配查询(CRAQ)技术,优化数据访问和一致性。
3FS 是什么
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
AI 代码解读
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
AI 代码解读
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
AI 代码解读
如何运行 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 配置
- 为 RDMA 网卡分配 IP 地址。每个节点支持多个 RDMA 网卡(InfiniBand 或 RoCE)。
- 使用
ib_write_bw
检查节点间的 RDMA 连通性。
第三方依赖
生产环境中建议在专用节点上安装以下服务:
服务 | 节点 |
---|---|
ClickHouse | meta |
FoundationDB | meta |
FoundationDB 配置
- 确保 FoundationDB 客户端版本与服务器版本一致,或者复制对应版本的
libfdb_c.so
以保持兼容性。 - 找到
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
AI 代码解读
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
AI 代码解读 - 更新
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
AI 代码解读
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
AI 代码解读 - 更新
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
AI 代码解读
- 更新配置文件,设置
node_id
、cluster_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
AI 代码解读
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
AI 代码解读 - 更新配置文件,设置
node_id
和mgmtd
地址。 - 上传配置文件并启动服务:
/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
AI 代码解读
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
AI 代码解读 - 更新配置文件,设置
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
AI 代码解读
Step 7: 创建管理员用户、存储目标和链表
- 创建管理员用户:
/opt/3fs/bin/admin_cli -cfg /opt/3fs/etc/admin_cli.toml "user-add --root --admin 0 root"
AI 代码解读 - 使用 Python 脚本生成存储目标和链表:
python ~/3fs/deploy/data_placement/src/model/data_placement.py ...
AI 代码解读 - 创建存储目标并上传链表。
Step 8: 挂载 FUSE 客户端
在 meta 节点上挂载 FUSE 客户端。
配置与启动
- 复制二进制文件和配置文件。
- 创建挂载点并启动服务:
mkdir -p /3fs/stage systemctl start hf3fs_fuse_main
AI 代码解读
常见问题解答
如何排查 admin_cli init-cluster
错误?
如果 mgmtd
服务启动失败,可能是因为 mgmtd_main.toml
配置错误。修改配置文件后,需清空 FoundationDB 数据并重新运行 init-cluster
。
如何构建单节点集群?
单节点测试环境中,可以通过在一台机器上部署多个存储服务来绕过限制
资源
- GitHub 仓库:https://github.com/deepseek-ai/3fs
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦