Deepseek-3FS 针对AI优化设计

223 阅读7分钟

Pasted Graphic 117.png

一. 核心目标

为 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 天,高效的数据供应能力功不可没。