堆积如山:30PB硬盘齐上阵,预训练数据大作战
一家公司为了预训练能解决计算机使用问题的模型,在旧金山自建了一个存储集群,用于存放 9000 万小时的视频数据。与使用 AWS 每年高达 1200 万美元的成本相比,他们通过购买硬盘、租用托管空间并自行搭建,将年成本降至约 35.4 万美元,降幅近 40 倍。这一巨大成本优势的关键在于,机器学习的预训练数据对冗余和可用性的要求远低于传统企业,允许一定程度的数据丢失,因此无需为云服务商提供的高可靠性支付高昂费用。
为什么选择自建存储
我们的数据用途很特殊。大多数云服务商非常注重数据的冗余、可用性和完整性,但这对于机器学习训练数据来说往往是不必要的。
- 数据是可替代的: 预训练数据是一种商品,丢失其中任意 5% 对模型影响极小。我们能容忍的数据损坏率远高于那些需要确保用户数据万无一失的企业。
- 成本远高于实际: 云存储的定价通常远超其成本。大多数公司使用的存储量相对较小,而那些使用 PB 级数据的巨头公司,存储开销也只占其总计算支出的一小部分。
- 数据是最大瓶颈: 对我们而言,数据是最大的限制因素之一,使用云存储的成本高得令人望而却步。只要自建数据中心的成本预测有利,且不占用核心团队过多时间,自己动手堆硬盘就是合理的选择。
我们与互联网档案库(Internet Archive)的工程师交流后发现,他们也面临同样的问题。即使有 AWS 提供的大幅折扣,自己购买机架存储数据的成本效益仍然高出 10 倍。
成本对比:云方案 vs. 自建方案
我们自建数据中心的每月总成本约为 $29,500,其中包括每月 $17,500 的固定开销(网络、电力等)和 $12,000 的硬件折旧。
自建方案成本明细:
每月固定开销:
- 网络 (100Gbps):$7,500
- 电力 (含机柜空间和冷却):$10,000
- 总计:$17,500 / 月
一次性成本:
- 硬盘 (2400 块二手企业级硬盘):$300,000
- 存储机箱 (100 个 NetApp DS4246):$35,000
- 计算节点 (10 个 Intel 服务器):$6,000
- 数据中心安装费:$38,500
- 人工 (承包商):$27,000
- 网络及杂项:$20,000
- 总计:$426,500
云方案成本对比:
AWS:
- 存储费:$630,000 / 月
- 出口流量费 (预估):$500,000 / 月
- 总计:$1,130,000 / 月
Cloudflare R2:
- 存储费 (大客户折扣价):$270,000 / 月
换算成每 TB 的月度成本:AWS 是 $38/TB,Cloudflare 是 $10/TB,而我们的自建数据中心仅为 $1/TB。成本分别降低了约 38 倍和 10 倍。
搭建过程与软件选择
为了快速完成项目,我们举办了一场名为“存储堆叠星期六 (Storage Stacking Saturday)”的派对,邀请朋友们一起动手安装硬盘。整个过程持续了 36 小时,最终成功搭建并连接了 30 PB 的硬件。
在软件方面,我们选择了极简方案:
- 写入: 使用一个 200 行的 Rust 程序来决定数据写入哪个硬盘。
- 读取: 使用一个 Nginx Web 服务器。
- 元数据: 使用一个简单的 SQLite 数据库来追踪文件位置。
我们没有使用 Ceph 或 MinIO 等复杂的存储系统,因为我们不需要它们提供的冗余或分片等高级功能。调试一个 200 行的程序远比调试 Ceph 简单得多。
经验与教训
做对了的事
- 合理的取舍: 在冗余和性能之间做出的权衡非常合理,我们能够基本跑满 100G 网络的读写带宽。
- 本地化部署: 数据中心离办公室仅几个街区,这对于初期的调试和手动操作非常有价值。
- 坚持简洁原则: 没有使用 Ceph 或 MinIO 节省了大量精力。我们用一个简单的 Rust 脚本就实现了网络带宽的饱和读写。
- 准确的预估: 对成本和工作量的预估基本准确,最终我们以比云方案便宜 40 倍的成本,构建了一个可与之匹敌的集群。
遇到的困难
- 物理安装繁琐: 使用了前置硬盘托架,意味着需要手动拧紧 2400 个硬盘,非常耗时。
- 存储密度不高: 本可以通过购买密度更高的硬盘阵列,将物理安装工作量减少 5 倍。
- “捷径”是陷阱: 菊花链式的节点连接方式限制了读写速度。为每个机箱配备独立的 HBA(主机总线适配器)会更好。
- 网络兼容性问题: 网络设备通常被品牌锁定,光纤收发器尤其如此,除非使用对应品牌的设备,否则基本无法工作。
- KVM 的重要性: 缺乏方便的 KVM(键盘、视频和鼠标)或 IPMI(智能平台管理接口),导致频繁往返数据中心进行物理调试。
如何复刻这套系统
如果你也想搭建类似的存储集群,以下是关键的组件和要求。
存储硬件
- 10 个 CPU 头节点: 我们使用了便宜的二手 Intel 服务器,但如果你需要进行数据压缩等 CPU 密集型任务,可以考虑配置更好的 CPU。
- 100 个 DS4246 机箱: 每个可容纳 24 个 3.5 英寸硬盘。
- 2400 个硬盘: 推荐使用 SAS 硬盘,速度大约是同类 SATA 硬盘的两倍。
- 多个“速成推车”: 配备显示器和键盘,用于物理连接和配置节点,在调试网络时非常宝贵。
网络设备
- 一个 100GbE 交换机: 二手的 Arista 即可。
- HBA (主机总线适配器): 用于连接头节点和存储机箱。最佳配置是每个服务器配备 3 个 HBA,并将每个机箱直接连接到 HBA。
- 网卡 (NICs): 我们使用了 Mellanox ConnectX-4 100GbE。
- DAC (直连铜缆): 用于连接服务器和交换机,兼容性比光缆更好。
- 管理网络: 强烈建议设置一个独立的管理网络,这样就可以在办公室通过 SSH 远程完成所有配置,而无需亲赴现场。
数据中心要求
- 每个机柜 3.5kW 的可用功率。
- 每 3 PB 存储需要一个 42U 机柜。
- 一条专用的 100G 网络连接。
- 位置最好靠近办公室, 以便在出现问题时能够快速步行前往调试。