DeepSeek第五天开源猛料,3FS并行文件系统榨干SSD!6.6 TiB/s吞吐量堪比光速

2025-02-28 发布 · 浏览107次 · 点赞0次 · 收藏0次

  DeepSeek最后一天,送上了3FS文件并行系统,以及数据处理框架Smallpond。五天开源连更,终于画上了完美的句号。

  最后一天,DeepSeek开源了全生命周期数据访问引擎Fire-Flyer File System(3FS),以及基于3FS的数据处理框架Smallpond。

  

  3FS(萤火虫文件系统)是一个充分利用现代SSD和RDMA网络带宽的并行文件系统,其特点是:

  在180节点集群中实现了6.6 TiB/s的总读取吞吐量

  在25节点集群的GraySort基准测试中达到了3.66 TiB/min 的吞吐量

  每个客户端节点的KVCache查询峰值吞吐量超过40+ GiB/s

  采用分离式架构,确保了强一致性

  全面支持V3/R1的训练数据预处理、数据集加载、检查点保存/重载、嵌入向量搜索和KVCache查询推理

  Smallpond是轻量级的数据处理框架,其特点是:

  基于DuckDB的高性能数据处理

  可扩展性,能够处理PB级别数据集

  无需持续运行的服务,操作简便

  3FS和Smallpond两大开源项目,正在为AI数据处理设立新的标准——超快的处理速度和无缝集成。

  

  让许多人惊叹不已的是,DeepSeek竟自己编写了分布式文件系统。

  它的成功背后强大得理念,便是将小事做到极致。这种精神,体现了车库黑客的精髓。

  左右滑动查看

  3FS文件系统

  The Fire-Flyer File System(3FS)专为应对人工智能训练和推理任务挑战而设计的高性能分布式文件系统。

  项目链接:https://github.com/deepseek-ai/3FS

  它采用现代固态硬盘(SSD)和远程直接内存访问(RDMA)网络技术,构建了共享存储层,极大简化了分布式应用的开发过程。

  核心优势

  性能与易用性

  分布式架构:该系统整合了数千个SSD的高吞吐量和数百个存储节点的网络带宽,使得应用程序能够无视位置差异,高效访问存储资源。

  强一致性保证:通过采用链式复制与分配查询(CRAQ)技术,确保了数据的一致性,使得应用程序代码更加简洁易懂。

  标准文件接口:系统提供了基于事务性键值存储(如FoundationDB)的无状态元数据服务,使用的文件接口通用且易于上手,无需学习新的存储API。

  多样化工作负载支持

  数据准备:系统有效地将数据分析管道的输出组织成分层目录结构,并高效管理大量的中间数据。

  数据加载优化:通过支持计算节点间对训练样本的随机访问,无需进行数据预取或洗牌操作,提升了数据处理效率。

  高效检查点支持:为大规模训练任务提供高吞吐量的并行检查点功能。

  KVCache推理加速:提供了一种成本效益高的DRAM缓存替代方案,具有高吞吐量和更大的存储容量,适用于推理任务。

  性能

  1. 最大吞吐量

  下图展示了一个大型3FS集群在执行读压力测试时的吞吐量表现。

  该集群包含180个存储节点,每个节点均配置有2张200Gbps的IB网卡和16块14TiB的NVMe固态硬盘。

  测试中使用了约500个客户端节点,每个节点配备1张200Gbps的IB网卡。

  在存在训练任务背景流量的情况下,集群的总读取吞吐量达到了约6.6TiB/s。

  

  2. GraySort

  采用GraySort基准测试,评估smallpond在处理大规模数据集时的排序能力。

  实现采用了两阶段的处理方法:(1) 首先通过键的前缀位进行数据重排来分区数据,(2) 然后在各个分区内部进行排序。这两个阶段的数据读写都依赖于3FS。

  测试所用的集群包括25个存储节点(每个节点有2个NUMA域,每个NUMA域运行1个存储服务,每个节点配备2×400Gbps网卡)和50个计算节点(每个节点有2个NUMA域,192个物理核心,2.2 TiB内存,每个节点配备1×200 Gbps网卡)。

  在8,192个分区中排序110.5 TiB的数据,整个过程耗时30分钟14秒,平均吞吐量达到3.66TiB/min。

  

  

  3. KVCache

  KVCache是一种用于提升大型语言模型(LLM)推理效率的技术。

  它通过缓存解码器层中先前token的键和值向量,避免了重复的计算过程。

  顶部图表展示了所有KVCache客户端的读取吞吐量,其中既包括了峰值也包括了平均值,峰值吞吐量可达40GiB/s。

  底部图表则展示了在同一时间段内,垃圾收集(GC)过程中操作次数的变化情况。

  

  

  设计与实现

  3FS系统由四个主要部分组成:集群管理器、元数据服务、存储服务和客户端。这些组件通过RDMA网络(InfiniBand或RoCE)相互连接。

  元数据和存储服务定期向集群管理器发送心跳信号,以报告其状态。集群管理器负责处理集群成员的变更,并将集群的配置信息分发到其他服务和客户端。

  系统中部署了多个集群管理器,其中一个被选为主管理器。当主管理器发生故障时,另一个管理器会被提升为主管理器。

  集群配置信息通常存储在一个可靠的分布式协调服务中,例如ZooKeeper或etcd。在生产环境中,为了减少依赖性,我们使用与文件元数据相同的键值存储来保存集群配置。

  文件元数据操作(如打开或创建文件/目录)被发送到元数据服务,由其实现文件系统的语义。由于文件元数据是存储在一个事务性键值存储(例如FoundationDB)中的,因此元数据服务是无状态的,客户端可以连接到任何元数据服务。

  每个存储服务管理一些本地SSD,并提供一个块存储接口。

  为了确保强一致性,存储服务实现了链式复制与分配查询(CRAQ)机制。CRAQ的写入全部读取任意的方法有助于充分利用SSD和RDMA网络的高吞吐量。在3FS中,一个文件被分割成相等大小的数据块,并在多个SSD上复制。

  使用

  使用以下命令从GitHub克隆3FS仓库到本地文件系统:

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

  克隆完成后,进入3FS目录,运行以下命令来更新并初始化所有子模块:

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

  根据Ubuntu版本安装所需的依赖项:

  # 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

  确保安装了libfuse 3.16.1或更新版本,FoundationDB 7.1或更新版本,以及Rust工具链。

  在构建目录中构建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

  Smallpond:基于3FS的数据处理框架

  项目链接:https://github.com/deepseek-ai/smallpond

  快速入门

  目前smallpond支持从3.8到3.12的Python版本。

  pip install smallpond

  使用下列命令获取示例数据:

  # Download example data wget https://duckdb.org/data/prices.parquet
轻松上手:

  import smallpond sp = smallpond.init() #加载数据 df = sp.read_parquet("prices.parquet") #数据处理 df = df.repartition(3, hash_by="ticker") df = sp.partial_sql("SELECT ticker, min(price), max(price) FROM {0} GROUP BY ticker", df) #保存结果 df.write_parquet("output/") #显示结果 print(df.to_pandas())
文档

  mallpond同时提供了高级和低级API。

  注意:目前,smallpond提供了两种不同的API,分别用于数据流图的动态和静态构建。由于历史原因,这两种API使用了不同的调度器后端,并支持不同的配置选项。

  高级API:目前使用Ray框架作为后端,支持数据流图的动态构建和执行。

  低级API:使用内置调度器,仅支持静态数据流图的一次性执行。然而,它提供了更多的性能优化和更丰富的配置选项。正在努力将这两种API合并,以便在未来,可以使用统一的高级API,并在Ray框架和内置调度器之间自由选择。

  下列链接提供入门教程、API参考、性能评估等更多内容。

  链接:https://github.com/deepseek-ai/smallpond/blob/main/docs/source/api.rst

  pip install .[dev] # run unit tests,单元测试 pytest -v tests/test*.py # build documentation,构建文档 pip install .[docs] cd docs make html python -m http.server --directory build/html

  性能

  采用GraySort基准测试脚本,在一个由50个计算节点和25个运行3FS的存储节点组成的集群上,对smallpond进行了评估。

  该基准测试在短短30分钟14秒内完成了对110.5TiB数据的排序,平均吞吐量达到了3.66 TiB/min。

  pip install .[dev] # run unit tests pytest -v tests/test*.py # build documentation pip install .[docs] cd docs make html python -m http.server --directory build/html

  连更五天,最新汇总

  DeepSeek开源周,这么快就过去了。连更5天,次次都是小惊喜。

  接下来,我们汇总了过去四天所有的开源项目,参见:

  

  

  

DeepSeek第五天开源猛料,3FS并行文件系统榨干SSD!6.6 TiB/s吞吐量堪比光速 - AI 资讯 - 资讯 - AI 中文社区

声明:本文转载自新智元,转载目的在于传递更多信息,并不代表本社区赞同其观点和对其真实性负责,本文只提供参考并不构成任何建议,若有版权等问题,点击这里。本站拥有对此声明的最终解释权。如涉及作品内容、版权和其它问题,请联系我们删除,我方收到通知后第一时间删除内容。

点赞(0) 收藏(0)
0条评论
珍惜第一个评论,它能得到比较好的回应。
评论

游客
登录后再评论
  • 鸟过留鸣,人过留评。
  • 和谐社区,和谐点评。