news 2026/4/25 13:35:55

AI训练存储系统的架构选型演变:对象存储为后端的文件系统概论(八十九)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI训练存储系统的架构选型演变:对象存储为后端的文件系统概论(八十九)

存储系统按照抽象级别分类,分为三种:文件存储、对象存储、块存储。此处我们不讨论块存储,只讨论文件存储与对象存储。

文件存储是我们在日常生活中最熟悉的存储方式。它将数据组织成树状结构(目录/文件夹)。每个文件都位于特定的路径中,拥有文件名、大小、创建日期等有限的元数据。 典型的代表有NTFS、ext4、xfs、NTFS等。 访问协议有NFS、SMB/CIFS、POSIX接口。 文件存储的优势在于遍历目录速度快、支持随机写操作,POSIX接口使用广泛,无需客户端进行开发适配。

而对象存储是一种扁平化的存储架构。数据不再以层级结构存储,而是被视为一个“对象”,放到一个“桶”中进行管理。每个对象包含数据、元数据和全局唯一的key来构成。 典型的代表有Amazon S3, Google Cloud Storage, Tencent Cloud Object Storage, Ali OSS, ceph radosgw等。 访问现已为RESTful API(基于HTTP/HTTPS)。 对象存储的优势在于无限可扩展性、低成本、高可用性与持久性,便于网络访问。因此一般用于镜像仓库的存储端、海量文件的备份归档等。

AI训练存储选型的演进路线
第一阶段:单机直连时代
早期的深度学习数据集较小,模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。

其优势在于IO延迟最低,吞吐量极高,也就是“数据离计算最近”。缺点也很明显:

数据孤岛:多台机器无法共享数据,数据拷贝(scp/rsync)及其耗时。
容量受限:本地磁盘容量有限。
数据安全:数据没有冗余,机器或盘挂了,数据可能就丢了。

第二阶段:传统共享存储时代(NFS/NAS)
到后来开始团队协作,训练规模也变大,则需要多机多卡分布式训练,同时出于使用方便,大家希望像操作本地文件一样操作共享数据。

此时开始以NFS(Network File System)挂载传统的NAS存储阵列来使用。

其优势在于POSIX兼容,不需要修改PyTorch/TensorFlow代码,直接读写文件路径,共享也十分便利,所有节点看到的目录结构一致。缺点则在于元数据性能瓶颈,NFS在处理海量小文件的open,lookup操作时,元数据服务器可能被瞬间打死。另外,所有计算节点抢占同一个NAS的出口带宽,也可能导致GPU等待IO,造成GPU无法维持高使用率。

第三阶段:大数据融合时代(HDFS)
Google等大厂入局,Hadoop诞生。数据存储在HDFS上,通过一些软件层面的优化将大量小图片打包成大文件,变成“顺序读”,训练代码通过API读取。这样就能够极大地利用HDFS的设计初衷:吞吐量极高、大规模顺序读,同时还能利用现成的大数据基础设施。

但同样有缺点:
生态割裂:PyTorch对HDFS支持不如TensorFlow友好。
随机访问差:对于需要频繁Shuffle(随机打乱)的数据集,HDFS性能不佳。
Java开销:HDFS客户端通常较重,占用CPU资源

第四阶段:高性能并行文件系统(HPC/Parallel FS)
此时的AI领域进入超算时代,模型越来越大,对低延迟和超高带宽的要求极高。

此时的方案是借用超算(HPC)领域的Lustre或GPFS(IMB Spectrum Scale)。优点在于专为高并发设计,可以轻松喂饱数千张GPU,支持POSIX,且元数据性能极强。缺点则在于贵,运维难(Lustre等系统内合级调优十分困难,一旦集群崩溃,恢复十分困难),扩容困难,很难像云存储那样弹性伸缩。

第五阶段:存算分离与分层架构(Object Storage + Cache)
当前这个时代即云原生时代,数据集达到PB级别,成本成为了核心考量。对象存储最便宜且容量无限,但性能(尤其是元数据)不够好。 此时针对元数据有了若干解决方案:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 11:14:07

题目1460:蓝桥杯基础练习VIP-2n皇后问题

#include<iostream> #include<cmath> using namespace std; int vis[9][9]; int n,count0; bool check(int x,int y,int c){//c2代表白皇后&#xff0c;c3代表黑皇后 for(int i0;i<n;i){for(int j0;j<n;j){if(vis[i][j]c){if(ix||jy||abs(i-x)abs(j-y)){retu…

作者头像 李华
网站建设 2026/4/18 17:51:06

Unity 3D粒子与UI层级冲突全解析

你有没有遇到过这种“看似简单、实则气人”的场景: 我在 UI 上做个按钮闪光、点击爆炸、飘星星,直接把粒子拖到 Canvas 里,结果……它要么不显示,要么永远盖在最上面,要么永远在最下面。 我把粒子放到 World Space 里,结果跟 UI 的遮罩(Mask/RectMask2D)完全不搭,UI 裁…

作者头像 李华
网站建设 2026/4/19 1:43:57

别再玩“小龙虾”了,我找到了更适合中国宝宝体质的MemU Bot

最近 AI 圈最火的项目莫过于 ClawBot&#xff08;以及相关的 Claude Computer Use 衍生项目&#xff09;。热度虽高&#xff0c;但劝退率也极高。如果你尝试过部署&#xff0c;就会发现&#xff1a;环境依赖复杂、权限配置繁琐、Docker 容器报错不断&#xff0c;甚至项目本身的…

作者头像 李华
网站建设 2026/4/18 11:24:41

qt5.15配置charts(Qchartview)

1&#xff0c;ui界面提升 graphics_view 提升为Qchartview。 注意头文件是 QtCharts/QChartView &#xff08;没有.h的后缀名)2&#xff0c;camkelist 修改find和link连接这里还要加一个if 不然后警告3&#xff0c;头文件设置4&#xff0c;cpp文件#include "widget.h&qu…

作者头像 李华
网站建设 2026/4/16 10:16:50

编译器的魔法:生成C代码的六点思考

在编译器开发中&#xff0c;我们经常需要将程序翻译成其他形式。相比直接生成汇编代码&#xff0c;C语言是一个更高层次的目标语言选择。生成C代码比手写C代码更安全——生成器可以避免许多未定义行为的陷阱。本文分享我在实践中总结的六个技巧。 1. 用静态内联函数实现数据抽象…

作者头像 李华
网站建设 2026/4/23 17:39:33

2025IP地址库选型实录:从风控实战角度横向对比

每年都有人问&#xff1a;“有没有靠谱的 IP 地址库推荐&#xff1f;” “XX IP 库准不准&#xff1f;值不值得换&#xff1f;”这几年在风控、日志分析、海外业务里&#xff0c;我试过不少 IP 库&#xff0c;踩过一些坑。今天重点聊三件事&#xff1a;用起来顺不顺、社区评价如…

作者头像 李华