一、 3FS特性总览

DeepSeek开源周第五天,推出了支撑DeepSeek全线数据访问神器,3FS文件系统。Fire-Flyer File System(3FS)-一款在基于SSDS和RDMA网络可以将带宽全部利用的并行文件系统,在V3和R1中训练数据预处理、数据集加载、嵌入向量搜索和KV Cache查找等工作,3FS都立下了汗马功劳。项目一经发布,就获得了存储领域的广泛关注。大家纷纷从自己的侧重点来分析讨论,人们在感叹3fs极致性能之美的同时,从源码、架构原理、性能实测、应用结合等角度抛出自己的观点。本文对3fs亮点做简要的总结并对关键知识点做扩充。

b1ab2bc7526973c2282721e27b906240.png

3FS(萤火超算文件系统 Fire-Flyer File System)是幻方AI自研的高速读写文件系统,专门为深度学习训练场景设计,特点就是高通量、低延迟,参考了WekaFS、DAOS和BeeGFS系统。3FS以极简架构打破了传统存储系统的路径依赖,通过客户端直连元数据和数据服务、链式复制协议和FFRecord格式的协同设计,专为AI场景量身打造高吞吐、低延迟的存储解决方案。正如木桶理论的“短板效应”向“长板理论”的转变,3FS放弃通用文件系统“大而全”的设计,主动弱化小文件及元数据能力,聚焦AI业务的大文件、高带宽特性,用极致的专注换取性能的突破,实现存储效率的跃迁。

性能取舍:

大块读取、大块写入、高并发读取、 CPU 开销较低    ✅

小文件性能、超高并发文件创建/删除(元数据性能瓶颈)、随机写入(链式复制、读改写)❌

实现该能力的创新点主要包括:

  • 软硬件协同设计:硬件层面,Fat-Tree拓扑网络、高速交换机(Infiniband),多个SSD硬盘和高速网卡,保证了高IOPS和吞吐量。软件层面,Direct I/O、AIO异步接口、RDMA Read、数据对齐等技术,减少了内存拷贝和CPU开销,提高了数据读取效率。

  • 计算存储分离:3FS将数据存储服务与计算节点分离,专门存储模型训练所需的样本数据。客户端部署在计算节点侧,通过网络访问部署在存储节点侧的3FS服务端。

  • 高效的数据读取模式:3FS采用Direct I/O模式读取数据,绕过File Cache,减少了内存消耗。同时,使用Linux AIO和io_uring接口完成样本的异步读取,从而在低CPU占用下实现高读写吞吐。

  • 优化的数据格式:3FS推荐使用FFRecord格式存储样本数据。FFRecord支持随机批量读取,包含数据校验功能,并适配PyTorch的Dataset和Dataloader接口。

  • 网络优化:3FS通过Infiniband技术构建高速网络,并采用虚拟通道机制隔离不同类型的流量,优化网络配置,优化路由算法。此外,3FS还采用了自研的HFReduce通信库,进一步提升了网络通信效率。

  • 用户态文件系统(FUSE)支持:3FS vNext提供了特殊的用户态文件系统FUSE,在用户空间提供3FS vNext的POSIX接口,提高安全性、可维护性,并支持更多的文件操作命令。

二、特性相关知识点扩充

1. 链式复制 CRAQ

CR的主要思想:将object的所有副本节点顺序组成链表,由HEAD节点负责接收处理client写入请求,并沿着复制链传播。当TAIL节点接收到写入请求,并完成处理之后,会向其上游节点发送ack确认消息。当HEAD节点收到ack消息,即可回复client写入请求。由TAIL节点负责接收处理client读请求,因此,总是可以读取到object最新提交的数据。

CR的复制拓扑结构比较简单,所有读写请求最终都由TAIL节点确定执行顺序,很容易实现强一致性保证。多个并发写入请求可以pipeline方式,沿着复制链传播、处理,写入延迟等于所有节点的传输时延总和。具有高吞吐量,且故障恢复简单、快速的优势。但是,由于只有TAIL节点可以接收处理client读请求,因此,不具有可扩展性。

CRAQ的主要思想,在保证强一致性的前提下,通过允许任意节点接收处理client读请求,提升系统读吞吐量。同时提供3种读一致性模型,强一致性、最终一致性、具有最大不一致边界的最终一致性。

链式复制的节点形成 chain table,3FS 采用了分摊式的打散方法,一个 Node 承担多个 chain,多个 chain 的数据在集群内多个节点进行数据均摊。

2. FFRecord格式

FFRecord格式是幻方AI开发的一种适用于3FS性能的二进制序列存储格式,适配了PyTorch的Dataset和Dataloader接口,便于加载和发起训练。3FS绕过系统层小文件弱点,因为前文提到的为了最大化优势因此从文件系统层放弃小文件的性能,不从存储本身去解决,转而从上层应用将大量小文件即样本数据存储在一个或多个大文件中,且这个大文件记录了每一条样本的偏移量便于随机批量读取,此外还包含数据校验确保读数据完整可靠,数据序列化方式业务可选,设计的这种文件存储格式就是FFRecord(fire flyer record),文件存储格式如下:

de42519ee12d1f27304ac00d2ee0e2b0.png

写入的时候,首先获取writer,把序列化后的数据,用write方法写入3FS,传入的数据会写到文件的末尾,然后在文件的头部写入这条数据在文件中的偏移量和对应的 crc32 校验和。

读数据的时候,首先获取reader,根据传入的索引找到每条样本在文件中的偏移量并计算出占用的字节数,然后调用 Linux Asynchronize I/O (AIO) 的接口同时处理多个样本的读取请求,把结果返回给用户,在用户侧进行反序列化。

3. DirectI/O

普通的 IO 读写(buffered io),会先将内容保存在缓冲区中,由kernel通过page cache统一管理缓存,page cache的创建和回收由kernel控制.文件落盘需要调用 fflush 、fsync 等方法。

DirectIO 是无缓冲 IO,使用无缓冲 IO 对文件进行读写,直接从应用程序的缓存区写入到磁盘上,没有经过内核缓存的过程,数据直接落盘。这种方式可以减少内核缓存的开销,但是需要频繁的访问磁盘(3FS面向SSDs),因此会导致更多的磁盘寻道和旋转延迟,从而降低写入性能。

由于File Cache在3FS的场景下没有作用,反而会消耗系统内存,影响后续任务的运行,因此3FS关闭了File Cache,仅使用Direct I/O模式进行数据的读取。

4. Linux AIO异步、io_uring和fuse

异步 IO是当应用程序发起一个IO操作后,调用者不能立刻得到结果,而是在内核完成IO操作后,通过信号或回调来通知调用者。同步 IO 必须等待内核把 IO 操作处理完成后才返回。Linux AIO有原生AIO,和第三方异步IO如 libeio 和 glibc AIO,是使用多线程来模拟异步 IO。

AIO 技术是 Linux 2.6 版本最初支持的原生异步 IO 接口,有一个限制是必须与 directIO 一同使用才能有异步的效果。

3FS的FFRecord 是基于Linux AIO实现异步读取功能,在分布式训练中,多个节点可以同时发起异步请求,从 3FS 获取 FFRecord 数据,从而加速数据加载。

fuse是filesystem in user space,一个用户空间的文件系统框架,允许非特权用户建立功能完备的文件系统,而不需要重新编译内核。fuse内核模块实现了和 VFS 的对接,用户空间的文件系统操作通过systemcall触发,通过VFS后将该请求转化为特定格式,并通过设备传递给用户空间进程,用户空间进程(基于fuse库实现的各类分布式文件系统)在处理完请求后,将结果返回给 FUSE 内核模块,内核模块再将其还原为Linux Kernel 需要的格式,并返回给 VFS,最后再返回给用户空间。FUSE 给 Linux Kernel FS 带来了用户态实现的可能性,但是数据会进行多次用户空间和内核空间的内存拷贝,性能会差些,因此大家做了很多工作对fuse的改进。

Fuse over io_uring特性原理是用 io_uring 取代传统 FUSE 的 /dev/fuse 通道,这样用户态文件系统可以直接从 io_uring 队列读取请求和提交响应,避免了每次请求的系统调用和上下文切换。

3FS采用端到端无缓存设计,3FS fuse相关的改进不局限在内核里,选择完全绕开 FUSE 的数据读写通道,借鉴 io_uring 的零拷贝和共享内存设计,直接在应用侧跟文件客户端建立了共享内存通道,实现从应用侧内存数据到 RDMA 传输的零拷贝,更是彻底避免了 VFS 系统调用的Context Switch 和内存拷贝。

5. 网络优化

幻方萤火集群在使用3FS结合网络优化实现了带宽的高利用率,网络优化在实践中需要结合实际情况进行优化。

Fat-Tree拓扑,传统的树形网络拓扑中,带宽是逐层收敛的,树根处的网络带宽要远小于各个叶子处所有带宽的总和。而Fat-Tree则更像是真实的树,越到树根,枝干越粗,即:从叶子到树根,网络带宽不收敛,这是Fat-Tree能够支撑无阻塞网络的基础。

NCCL优化,NCCL是NVIDIA集合通信库(NVIDIA Collective Communications Library)的简称,是用于加速多GPU之间通信的库,能够实现集合通信和点对点通信。

RDMA集成,RDMA(RemoteDirect Memory Access)技术全称远程直接内存访问,就是为了解决网络传输中客户端与服务器端数据处理的延迟而产生的。它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入(传统TCP/IP收发双方数据都要经过用户空间buffer和内核空间的Socket Buffer,并添加或解析包头)。这允许高吞吐、低延迟的网络通信,尤其适合在大规模并行计算机集群中使用。目前RDMA有三种不同的硬件实现。分别是InfiniBand、iWarp(internet Wide Area RDMA Protocol)、RoCE(RDMA over Converged Ethernet)。Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输 , 而RoCE 和 iWARP都是基于以太网的RDMA技术,支持相应的verbs接口。从性能上,很明显Infiniband网络最好,但网卡和交换机是价格也很高,然而RoCEv2和iWARP仅需使用特殊的网卡就可以了,价格也相对便宜很多。

Infiniband技术,VL: 虚拟通道 (Virtual Lane) 提供了一种在单个物理链路内创建多个虚拟链路的机制。InfiniBand的服务等级(SL)技术,在节点间连接时分配不同的SL值,萤火集群为不同类型的流量分配不同的虚拟通道(VL)。这块是经过仔细调整过的,在保证流量互相隔离互不影响的前提下,才能把带宽完全打满。此外,萤火集群还在硬件选择与适配、路由算法选择等方面进行调优以达到集群带宽最高利用的效果。

6. RDMA Read

RDMA支持多种通信方式,常见的包括:Send(发送)和Receive(接收)、RDMA Write、RDMA Read。Send/Recv是一种两端cpu都需要参与的双端操作,接收端都需要提前准备好接收数据的缓存。RDMA Write是一种单端操作,远端cpu不需要参与,也感知不到何时有数据写入,以及何时写完。发送端需获得对端一块远端内存的读写权限。RDMA Read和RDMA Write一样,也是一种单端操作,工作流程和RDMA Write非常相似,主要区别就是WQE(工作队列元素)的操作码不同,导致相反的数据传输方向。

3FS存储节点采用Direct IO和RDMA Read的读取方式,使模型训练在样本读取部分只需极小的CPU和内存开销,便可获得超高的读取带宽。

3FS客户端采用RDMA Read到用户态内存的方式,避免内核态到用户态的内存拷贝,减少了内存拷贝和CPU开销,提高了数据读取效率。

一般文件系统在客户会经过多次内存拷贝,3FS读取数据,直接从网卡直接读到用户态内存。

3FS选择在计算节点侧发起 RDMA Read ,而不是从存储节点侧做 RDMA Write,是因为3FS设计中的批量读取会在同一网络上的读取请求可能对应了很多应用的 Buffer,而 RDMA Write 不支持分发到接收方的多个地址,这意味着在单个读取长度很小的时候,会产生很多很小的 RDMA 请求,以至于显著影响读取的带宽。

7. 数据对齐

数据对齐是指将数据按照一定的规则进行排列,使其在‌内存中的位置满足特定的要求‌,提高数据读取效率。

3FS客户端优化:客户端会对AIO读取操作进行必要的对齐(buffer地址、读取size和offset需要对齐),在buffer的头部和尾部增加额外缓存以实现512字节对齐,并在RDMA Read接收数据时忽略头部和尾部,简化接口使用,使服务端的数据加载更符合模型训练的使用场景,从而获得更好的读取性能。

3FS进行数据对齐的原因主要是为了使用Direct I/O获取更好的读取性能,而Direct IO 在使用上有一个很大的限制,它需要 buffer 的内存地址、每次读取的 size 以及 offset 均与底层设备的逻辑块大小对齐,一般是 512 字节对齐。其次是为了避免用户进行额外的内存拷贝操作,简化了接口的使用。

参考资料:

https://github.com/deepseek-ai/3FShttps://github.com/deepseek-ai/3FS

https://mp.weixin.qq.com/s/NB7CjI9lBr_sACaRRR-tUQ

https://mp.weixin.qq.com/s/Ri9-sjsaoQ3LUE2-dTAN_g

https://m.toutiao.com/is/Y6JgtGXSqC0/

https://x.com/deepseek_ai/status/1895279409185390655

https://mp.weixin.qq.com/s/qKRioV45IbOq91XDsUEIcg

https://mp.weixin.qq.com/s/esoZV4zfFKOIBKsS_NEnqA

https://mp.weixin.qq.com/s/RWCbpIBmHCzGNroFhbm2oA?from=groupmessage&scene=1&subscene=10000&clicktime=1741230075&enterid=1741230075&sessionid=0&ascene=1&fasttmpl_type=0&fasttmpl_fullversion=7631260-zh_CN-zip&fasttmpl_flag=0&realreporttime=1741230075930

https://mp.weixin.qq.com/s/ozjrPppaLB5Voam4KIUWaw

https://mp.weixin.qq.com/s/X60PsEPeFsb-ZPKATMrWrA

END

360智汇云是以"汇聚数据价值,助力智能未来"为目标的企业应用开放服务平台,融合360丰富的产品、技术力量,为客户提供平台服务。

目前,智汇云提供数据库、中间件、存储、大数据、人工智能、计算、网络、视联物联与通信等多种产品服务以及一站式解决方案,助力客户降本增效,累计服务业务1000+。

智汇云致力于为各行各业的业务及应用提供强有力的产品、技术服务,帮助企业和业务实现更大的商业价值。

官网:https://zyun.360.cn 或搜索“360智汇云”

客服电话:4000052360

欢迎使用我们的产品!😊

关注公众号,干货满满的前沿技术文章等你来。想看哪方面内容,也欢迎留言和我们交流!

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐