如果不好老外交流,只背诵单词 怎么背也不得要领。
如果没有真实项目场景,虽然大量项目代码怎么看网络知识,c++知识也不理解背后含义
这里从零实现一个3FS文件系统开始。 探讨 讲背后计算网络,内存,文件,cpu串联起来。
请警惕 幻觉,也可能胡说八道。
TensorFlow MNIST 手写数字识别整理训练过程
┌────────────────────────────┐
│ 1. 加载 MNIST 数据集 │
│ (使用 tf.keras.datasets.mnist) │
└──────────────┬─────────────┘
│
v
┌────────────────────────────┐
│ 2. 数据预处理 │
│ - 将像素值归一化至 [0,1] │
│ - 重塑图像形状 │
└──────────────┬─────────────┘
│
v
┌────────────────────────────┐
│ 3. 构建批量数据管道 │
│ (使用 tf.data.Dataset: │
│ shuffle() → batch()) │
│ —— 批量加载数据可充分利用 │
│ GPU 并提高训练效率 │
└──────────────┬─────────────┘
│
v
┌────────────────────────────┐
│ 4. 构建模型 │
│ (例如使用 CNN 架构) │
└──────────────┬─────────────┘
│
v
┌────────────────────────────┐
│ 5. 编译模型 │
│ - 指定损失函数(例如交叉熵)│
│ - 指定优化器(例如 Adam) │
└──────────────┬─────────────┘
│
v
┌────────────────────────────┐
│ 6. 配置和保存 Checkpoint │
│ - 创建 tf.train.Checkpoint 对象 │
│ 用于保存模型权重和优化器状态 │
│ - 在训练过程中定期调用 │
│ checkpoint.save() 保存检查点 │
└──────────────┬─────────────┘
│
v
┌────────────────────────────┐
│ 7. 训练模型 │
│ (调用 model.fit,使用批量数据)│
│ —— 训练过程中自动记录检查点 │
└──────────────┬─────────────┘
│
v
┌────────────────────────────┐
│ 8. 恢复 Checkpoint │
│ - 使用 checkpoint.restore()│
│ 读取最近保存的检查点 │
│ —— 用于断点续训或模型调优 │
└──────────────┬─────────────┘
│
v
┌────────────────────────────┐
│ 9. 模型评估与预测 │
│ (调用 model.evaluate 和 │
│ model.predict) │
└────────────────────────────┘
重点说明:
tf.data.Dataset
接口,对预处理后的数据执行 shuffle()
(随机打乱数据)和 batch(batch_size)
操作。 这样每个训练步骤都会以一个固定大小的批次(batch)输入模型,不仅能加速训练,还能稳定梯度更新。
tf.train.Checkpoint
对象保存模型权重和优化器状态。 通过在训练过程中定期调用 checkpoint.save()
来存储当前状态,可以在训练中断后,通过 checkpoint.restore()
恢复模型, 从而实现断点续训并保证模型训练的连续性与稳定性。
AI 训练对存储系统的需求大致如下:
readdir
和 getattr
: readdir
获取目录下子文件的 dentry(目录项)元数据信息。(大目录)getattr
获取文件的 inode 信息,以便后续读写操作。AI 训练存储需求总结
集群规模 | 每个存储节点配置 | 网络配置 | 说明 | 理论总带宽 | 实际测得吞吐量 |
---|---|---|---|---|---|
180 个存储节点 | 每节点配备 16 个 14TiB NVMe SSD,总存储容量约 2240 TiB | 每节点配备 2×200Gbps InfiniBand 网卡 | 专门用于存储模型训练所需样本数据,提供极强的读取吞吐能力 | 整体9 TB/s | 整体6.6 TiB/s |
600台计算节点 | 本地可选NVMe SSD(用于数据缓存加速) | 高速网络接口(如25-100GbE或RDMA) | 存储服务节点分离,主要负责模型训练/推理,依赖高速网络访问数据 | 单个峰值可达 40+ GiB/s | |
IB交换机 | 每个端口的传输速率为200Gb/s | 40个端口 | 所有端口的总聚合数据吞吐量高达16Tb/s | ||
可以先做个理论计算: |
1字节(byte)由8比特(bit)
根据 https://nvdam.widen.net/s/zmbw7rdjml/infiniband-qm8700-datasheet-us-nvidia-1746790-r12-web
Mellanox QM8790-HS2F:这是一款高性能的InfiniBand交换机,具有40个200Gb/s的端口, 支持无阻塞数据传输,总聚合吞吐量达到16Tb/s。它采用QSFP56连接器,支持被动或主动铜缆和光纤电缆,适用于高性能计算和数据中心等场景
Google文件系统(GFS)是构建在廉价服务器之上的大型分布式系统。 比如廉价的SATA盘,这大大降低了云服务的成本,在和其他厂商的竞争中表现出价格优势 Google的邮箱服务,由于基础设施成本低,Gmail服务能够免费给用户提供更大的容量, 令其他厂商望尘莫及(对比163邮箱)
我们根据业务负载场景和技术环境,重新审视了分布式文件系统的设计取舍, 把component failure作为常态处理,并面向 大文件、追加写、顺序读 场景做优化, 放松了标准文件系统接口实现。
GFS 读写性能适用场景
适合的场景(性能优异)
✅ 大文件的顺序读写(如日志存储、数据分析) ✅ 大规模数据处理(如 MapReduce、分布式计算) ✅ 追加写入(Append Write)(如日志、数据流写入)
❌ 小文件存储(因 64MB Chunk 导致存储和 IO 开销大) ❌ 频繁的随机读写(因大块存储导致延迟高) ❌ 高并发的单个 Chunk 访问(容易出现热点问题)
特点如下
是的,这句话是正确的。 在 Google 文件系统(GFS) 中,文件通常是 大文件,通常是多个 GB 甚至 TB 级别的存储单位,而不是小文件。 GFS 主要面向大规模数据处理应用(如分布式计算、日志存储、数据分析等) ,这些应用通常会生成并处理超大规模的数据集。
由于 GFS 采用 树形层次结构 维护文件命名空间(类似 UNIX 文件系统),并且 元数据(如文件名、目录结构、文件块映射)是由单独的 Master 服务器维护的,因此:
因此,这句话是正确的。
GFS 在大规模数据处理和存储领域表现优秀,但并不适用于小文件和低延迟应用(如传统数据库)。
9 . 直接使用Ceph可以吗?
问题类别 | 描述 | 影响 | 备注 |
---|---|---|---|
元数据一致性问题 | 多个客户端访问同一文件时,需强制flush写buffer,导致锁等待 | 可能导致高延迟,产生“fail to lock”告警 | 受网络和存储性能影响 |
MDS 单线程问题 | MDS 处理 I/O 为单线程,所有元数据请求需排队 | 高并发下性能瓶颈明显 | 影响大规模并发场景 |
元数据扩展性问题 | 元数据无法线性扩展,多 MDS 负载均衡不稳定 | 影响大规模存储场景 | 需要手工 pin,增加运维复杂度 |
小 IOPS 读写时延高 | OSD 侧链路长,存在锁与单线程 flush 限制 | 影响小 IOPS 场景 | 对 AI 训练影响较小 |
mds在主处理流程中使用了单线程,这导致了其单个MDS的性能受到了限制,最大单个MDS可达8k ops/s,CPU利用率达到的 140%左右
以单个 CephFS MDS 在理想硬件环境下的基准测试为例,常见的近似性能指标如下:
操作类型 | Ops/s(近似值) | 备注说明 |
---|---|---|
文件创建 | 15,000 – 20,000 | 仅限于纯元数据操作,测试环境为高性能 CPU/SSD 等配置 |
文件读取 | 10,000 – 15,000 | 受缓存命中率、元数据复杂性影响 |
文件写入 | 8,000 – 12,000 | 写操作中若涉及大写 buffer flush,性能可能进一步下降 |
MDS 单线程的处理架构,导致对小文件高OPS需求的并发处理能力不足
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。