一. 核心目标
为 AI 工作负载提供以下能力:
- 高性能随机读写:优化小块随机 I/O,提升 IOPS(每秒输入输出操作数)和吞吐量。
- 低延迟访问:减少数据访问延迟,确保 GPU 计算效率。
- 强一致性:在分布式环境中保证数据正确性。
- 可扩展性:支持大规模 GPU 集群的存储需求。
二. deepseek训练过程
1. 数据准备
- [读写操作]训练AI模型需要收集大量数据,并进行清洗、标注和预处理,以确保数据质量。
2. 数据加载
- [读操作]训练时,模型需要从存储系统中快速加载数据批次,尤其是分布式训练中,多个节点并行加载数据。
3. 模型训练
- 训练过程中,模型参数(如权重和偏置)不断更新,需要定期保存以记录训练进度。
4. 模型评估
- 训练完成后,读取测试数据。模型在测试集上进行评估,以验证其性能。
三. deepseek推理过程
1. 模型加载
- [读操作]推理开始前,需要从存储系统中加载训练好的模型文件,包括模型结构和参数。
2. 数据输入
- [读写操作]推理时,输入数据(如图像、文本)从存储系统中读取,供模型处理。
3. 推理计算
- 模型对输入数据进行处理,生成预测结果。
4. 结果存储
- 推理结果可以存储回系统中,用于后续分析或应用。
四.训练和推理过程,对数据访问模式有独特需求
1.随机访问主导
在训练阶段,数据加载器(dataloader)通常需要从大规模数据集中随机抽取样本(training samples),以确保模型不会过拟合特定顺序的数据。这种随机性意味着数据访问不是连续的,而是分散在整个数据集中的。
例如,训练一个 LLM 时,可能需要从数 TB 或 PB 级的数据中随机读取小块数据(如几 KB 到几 MB 的样本),而不是按顺序读取大块连续数据。
2.一次性读取
AI 训练中,数据通常只被读取一次(尤其是在每个 epoch 内),然后由 GPU 处理大量计算操作。这与传统的顺序读取场景(如视频流或日志处理)不同,后者依赖于连续读取和预取来提升效率。在 AI 场景下,数据的重用率低,读取后几乎不会立即再次访问同一块数据。
### 3.随机读
现代 SSD 的随机读性能已接近顺序读(例如 NVMe SSD 的随机 4K 读写速度可达数十万 IOPS),而 RDMA 网络的低延迟进一步削弱了顺序读的优势。3FS 选择直接利用硬件的随机读能力,而非设计复杂的顺序优化机制。
五. 针对AI场景进行了优化
1. 利用并行架构、现代SSD和RDMA网络,提供极高的吞吐量和低延迟。例如,在一个180节点的集群中,其聚合读取吞吐量可达6.6 TiB/s,非常适合需要快速处理海量数据的AI场景。
2. 通过分布式架构,DeepSeek 3FS将数据分散在多个节点上,支持多个客户端同时访问,从而显著减少延迟并提升整体性能。这种设计特别适用于需要高并发访问的场景。
3.实现了链式复制和分配查询(CRAQ),确保数据的强一致性。这简化了应用代码的开发,使其更易于推理,尤其在分布式AI任务中非常重要。
4. 提供了无状态的元数据服务,由事务性键值存储(如FoundationDB)支持。其文件接口简单易用,开发者无需过多调整即可快速上手。
5. 使用KVCache技术缓存解码器层中先前令牌的键和值向量,避免冗余计算,从而显著提升推理效率。
六.读请求步骤
1. 客户端发起读请求
- 步骤:应用程序(如 AI 训练任务或推理服务)通过 3FS 客户端库发起文件读请求。
- 参数:请求中指定文件路径、读取的偏移量(offset)和读取长度(size)。
- 客户端处理:客户端库将请求转换为内部格式,准备与元数据服务(Metadata Service, MDS)进行通信。
2. 元数据查询
- 客户端操作:客户端向 MDS 发送元数据请求,查询目标文件的布局信息。
- 返回内容:
- 文件的块(chunk)划分信息。
- 每个块的复制链(replication chain)位置,包含多个存储节点(Storage Nodes, SN)。
- 一致性保障:MDS 使用类似 CRAQ(Chain Replication with Apportioned Queries)的一致性协议,确保元数据一致且高可用。
- 结果:MDS 返回文件的块列表及对应的复制链信息,其中链的尾节点负责写操作,而链中的其他节点(包括头节点)可用于读操作。
3. 定位数据块
- 计算块 ID:客户端根据请求的偏移量和读取长度,计算出需要读取的块 ID 列表。
- 获取节点信息:从元数据中提取每个块的复制链节点列表。
- 读取灵活性:基于 CRAQ 模型,客户端可选择从复制链中的任意节点读取数据,而非仅限于尾节点,从而实现负载均衡和并行读。
4. 并行读取数据
- 并行请求:客户端向选定的存储节点并行发送读请求。
- 节点选择策略:
- 优先选择本地或网络延迟低的节点。
- 利用 CRAQ 特性,从链中中间节点读取,分担尾节点负载。
- 建立 RDMA 连接
- 客户端与存储节点首先通过 RDMA 支持的网络协议(例如 InfiniBand 或 RoCE)建立连接。
- 在连接建立过程中,双方会交换内存区域(Memory Region, MR)的注册信息。MR 是预先分配并注册的内存缓冲区,RDMA 硬件可以直接访问这些区域
- 存储节点处理:
- 在本地 SSD 上定位请求的块数据。
- 使用 Direct I/O 或 io_uring 接口直接从磁盘读取数据,绕过文件系统缓存。
- 通过 RDMA(远程直接内存访问)网络将数据高效传输回客户端。
- RDMA 写操作执行
- 由存储节点的 RDMA 网卡(NIC)直接完成,无需 CPU 参与。
- 数据从存储节点的内存缓冲区通过 RDMA NIC 传输到客户端的 RDMA NIC,然后直接写入客户端指定的 MR。
- 这个过程绕过了操作系统的网络协议栈,避免了传统网络传输中的数据拷贝和上下文切换开销。
5.客户端接收数据
- 客户端的 RDMA NIC 接收到数据后,将其直接写入预先注册的 MR。
- 数据传输完成后,客户端可以通过轮询或事件通知机制获知数据已到达。
6. 数据聚合与返回
- 数据接收:客户端接收来自多个存储节点的数据块。
- 数据整合:根据块的顺序和偏移量,将数据块聚合为连续的字节流。
- 返回结果:客户端将聚合后的数据返回给应用程序,完成读操作。
7. 错误处理与重试
- 容错机制:若某存储节点故障或响应超时,客户端从复制链中的其他节点重试读取。
- 一致性保证:CRAQ 协议确保链中节点数据一致,从任意节点读取的数据均正确。
- 优化调整:客户端可能动态调整读取节点,实现负载均衡和性能优化。
七.性能表现
DeepSeek-3FS 在实际应用中表现出色,尤其是在大规模 GPU 集群环境中:
- 高吞吐量:在 180 个节点的集群中,读取吞吐量达到 6.6 TiB/s。
- 低延迟:单节点 KV Cache 峰值性能超过 40 GiB/s,满足 AI 推理的低延迟需求。
- 训练效率:在 2048 个 H800 GPU 上训练 DeepSeek-V3,每万亿 token 仅需 3.7 天,高效的数据供应能力功不可没。