WEKA
在大数据、大模型 AI 预训练、GPU 万卡集群以及高性能计算(HPC)的语频下,WEKA 并不是指新西兰怀卡托大学的那个老牌 Java 机器学习软件,而是一家名为 WekaIO 的公司研发的现代化、分布式、全闪存原生的超高性能并行文件系统(WEKA Data Platform)。
在现代 AI Infra(大模型基础设施)中,WEKA 与 GPFS(IBM Spectrum Scale)、Lustre、Ceph 齐名,是目前专门用来伺候英伟达 DGX/H100/Blackwell 服务器、物理消灭 GPU 训练中 I/O 饥饿(I/O Starvation) 现象的高性能存储顶流大底座。
一、 为什么大模型时代需要 WEKA?(解决传统存储痛点)
在大模型训练(如 Llama 3 训练)或多模态数据清洗(如 100 亿张微型图片或视频切片)场景中,存储系统面临着极其变态的物理挑战:
- 传统存储的死穴(小文件高并发):传统的分布式存储(如 Ceph 或开源 NAS)在面对海量小文件(如几 KB 级别的文本或图片)的高并发读取时,其元数据服务器(MDS)会瞬间被锁死,导致存储节点的 CPU 核心卡死在元数据寻址上,整体吞吐量(Throughput)发生雪崩。
- GPU 嗷嗷待哺:一个英伟达 DGX H100 节点拥有恐怖的算力,如果底层存储的 IOPS 和带宽跟不上,GPU 在每跑完一个 Step 后,需要花费几秒钟甚至几分钟死等下一个 Batch 的数据搬运进来。这种现象叫 I/O 饥饿,它会导致极昂贵的 GPU 算力利用率(MFU)断崖式下跌。
WEKA 的诞生就是为了突破这个物理瓶颈,它的核心目标是在小文件高并发和大文件大吞吐之间,同时跑出接近物理裸盘(NVMe 线速)的存储性能。
二、 WEKA 的底层工作原理与硬核技术
WEKA 能跑出数百万 IOPS 和数百 GB/s 带宽,其后台运转着四个颠覆性的硬件级核心魔术:
1. 彻底干掉内核态切换:DPDK 原生数据路径
- 传统方式:普通存储读取数据时,数据需要走操作系统的内核网络栈(POSIX API $\to$ Linux VFS $\to$ 内核 TCP/IP 协议栈 $\to$ 网卡)。每一次读写都会触发数十次极其昂贵的 CPU 内核态与用户态切换(Context Switch)。
- WEKA 做法:WEKA 直接重写了数据路径。它在用户态(User Space)基于 DPDK(Data Plane Development Kit,数据平面开发套件) 绕过了 Linux 内核网络栈。当数据从 NVMe 硬盘出来后,通过网卡直接送达内存,中间零内核切换、零内存拷贝(Zero-Copy),将单次 I/O 的物理延迟强行压低到微秒($\mu\text{s}$)级别。
2. 无锁化、无中心元数据架构(Distributed Matrix)
- 传统方式:集中式或传统的分布式存储有一个或几个“元数据服务器”,记录着“哪个文件在哪块硬盘上”。当万卡集群同时发起读写时,元数据服务器会成为绝对的瓶颈。
- WEKA 做法:WEKA 抛弃了传统的集中式元数据服务器。它将整个集群的物理空间切割为数十万个微型的数据分片(Shards),利用一种极其精妙的、分布式且数学上自证明的哈希矩阵算法,将元数据和实际数据打碎、均匀分布在集群所有节点的物理核心和 NVMe 闪存颗粒中。没有一个节点是绝对的中心,任何节点既是计算节点也是元数据计算器,彻底消灭了元数据碰撞锁(Lock Contention)。
3. 彻底压榨网络:基于 SR-IOV 的 RDMA / RoCE 全量加速
- 核心机理:WEKA 与高性能 InfiniBand 或 400G RoCEv2 网络网络深度绑定。它通过 SR-IOV(单根 I/O 虚拟化) 硬件技术,允许 WEKA 的用户态进程直接接管并控制物理网卡的硬件队列。利用 RDMA(远程直接内存访问),一个计算节点的内存可以跨网络、直接去读写另一个存储节点 NVMe 闪存关联的内存空间,整个过程完全不需要对方节点的 CPU 介入,物理效率拉满。
4. 极致的软硬解耦:SRIOV、NVMe-oF 与协议大一统
- WEKA 纯粹由软件定义,但它在南向(底层硬件接口)通过 NVMe-oF(NVMe over Fabrics) 直接以极低延迟编排全闪存阵列;在北向(客户端接口)做到了协议大一统。同一个分布式存储命名空间内,AI 训练服务器可以通过超高性能的 WEKA 原生 POSIX 客户端(支持英伟达 GPUDirect Storage, GDS) 压榨线速;同时,上游的大数据 ETL 清洗集群或冷数据归档系统,也可以通过标准的 NFS、SMB、S3 协议无缝读写同一个文件系统,免去了中间的数据搬运拷贝。
三、 WEKA 的物理架构(Software-Defined System Architecture)
WEKA 的软件架构在设计上极其巧妙,它既可以支持专用存储节点群(Dedicated Mode),也可以支持计算与存储完全混部的超融合模式(Converged Mode)。
在物理服务器内部,WEKA 的核心是由一个全用户态运行的容器化分布式系统内核构成的。如果我们把一台挂载了 WEKA 存储的 AI 训练服务器(例如一台标准的 8卡 GPU 物理机)的 CPU 核心分配扒开,它的物理架构长这样:
【 物理服务器单机 CPU 核心分配 (Core Partitioning) 】
┌───────────────────────────┬─────────────────────────────────────────┐
│ Linux OS & AI 训练进程 │ WEKA 用户态专属核心 (Pinned) │
│ (运行 PyTorch, Triton 等) │ (基于 DPDK / SPDK 绑定物理硬件队列,独占) │
├───────────────────────────┼─────────────────────────────────────────┤
│ 占有 85% 的普通 CPU 核心 │ 占有 15% 的独立物理核心 (不参与 OS 调度) │
└─────────────┬─────────────┴────────────────────┬────────────────────┘
│ │
▼ (发起 I/O) ▼ (直接暴算 I/O 路径)
[ WEKA POSIX Client ] ◄────────────────► [ WEKA System Kernel Container ]
│ │
│ (通过英伟达 GDS 绕过 CPU) │ (通过网络 RDMA 互联)
▼ ▼
【 GPU Tensor Core 】 【 400G 网卡 】 / 【 NVMe 闪存颗粒 】
1. 核心物理隔离(Core Pinning)
为了保证在服务器满载暴算时存储依然不卡顿,WEKA 采用了硬核的 CPU 核心绑定与隔离(Core Pinning) 技术。它会强制从物理机中划出几个固定的、不受 Linux 内核调度的物理核心(例如 128 核里划出 4 个核),将其彻底交给 WEKA 容器独占。
- 这几个专属核心在后台全速运行着 WEKA 的用户态进程,通过 SPDK(存储性能开发套件) 轮询(Polling)物理 NVMe 硬盘,通过 DPDK 轮询网卡,彻底消灭硬件中断(Interrupt)延迟。
2. 英伟达 GDS(GPUDirect Storage)黄金通道
在标准的 WEKA 架构中,当 GPU 需要加载训练样本时,WEKA 原生客户端会与英伟达的 GDS 架构深度合体:
- 传统路径:NVMe 硬盘 $\to$ 存储内存 $\to$ CPU 内存 $\to$ PCI-E 总线 $\to$ GPU 显存(CPU 充当搬运工)。
- WEKA + GDS 路径:在 WEKA 架构下,通过网卡 RDMA 进来的数据,可以直接跨过系统的 CPU 和内存,通过 PCIe 交换机直接灌进英伟达 GPU 的 HBM/GDDR 显存中。这条高速公路直接将 I/O 延迟斩断了数倍,这也是大模型万卡集群首选 WEKA 架构的物理底牌。
3. 智能两层分级存储(Tiering)
虽然大模型训练需要全闪存,但如果几百 PT 的历史原始数据全部买 NVMe 闪存,成本是灾难性的。
- WEKA 架构在底层提供了一个完全透明的冷热数据自动分层引擎。它在前端用昂贵的 NVMe 全闪存作为高性能吞吐缓冲层(闪存层),在后端无缝挂载极其廉价的低速对象存储(如 AWS S3、MinIO 或传统的 HDD Ceph 对象库)。
- 在系统的世界观里,两者被融合成了一个单一的、无缝的超大文件系统挂载点。当检测到某个数据集正在被 AI 训练高频访问时,WEKA 会自动利用高速网络将其闪拉到 NVMe 闪存层(Warm-up);当模型训练结束、数据变冷后,系统会在后台悄悄把数据降级回对象存储,在物理上完美平衡了“极致算力压榨”与“企业 TCO 存储成本”。
