Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update usecase ai storage #43

Merged
merged 1 commit into from
Nov 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 59 additions & 69 deletions docs/03-CurveFS/01-usecase/07-ai-storage.md
Original file line number Diff line number Diff line change
@@ -1,108 +1,98 @@
# CurveFS在AI训练场景下的降本提效实践
# Curve 文件系统为 AI 业务降本增效

## 背景

## 一、项目背景
如今大数据和人工智能领域的快速发展,随着数据量的爆炸式增长,对底层文件存储的**扩展性**、**成本**和**性能**提出了更高的要求。特别在 AI 业务场景下,文件系统面临一些新的变化:POSIX 接口兼容、文件共享、海量小文件、数据读多写少等。

在当今大数据和人工智能领域的快速发展中,随着数据量的爆炸式增长,对分布式文件系统的存储可扩展性、成本和性能提出了更高的要求。在此大势所趋之下,杭研云计算团队开发了Curve共享文件存储系统来解决这些问题。
## Why Curve?

Curve共享文件存储系统旨在解决以下问题:
<div align="center">
<img src="../../images/ai_curvefs_architecture.png" alt="Editor" width="500"/>
</div>

### 可扩展性问题

随着文件数量的增长,现有的文件系统如CephFS和HDFS等元数据的可扩展性不足,无法满足大规模文件存储的需求。Curve文件系统将提供可扩展的共享文件存储,解决元数据管理的问题。

### 性能问题
### 1. 接口兼容

随着文件数量的增加,文件元数据的性能会大幅下降。此外,小文件的读写性能也比较差,这会对大数据和AI等业务产生影响。Curve文件系统将优化元数据管理,提高文件检索效率,并改善小文件的读写性能
Curve 文件系统同时支持 POSIX、HDFS和K8s CSI 接入方式,可以满足 AI 场景下业务存储的无缝替换

### 成本问题
### 2. 横向扩展

现有的文件系统通常采用两副本或三副本技术,但实际上80%的数据都是冷数据,使用多副本技术存储成本较高。Curve文件系统将采用更高效的数据存储策略,降低存储成本,提高资源利用率
随着文件数量的增长,现有的文件系统如 CephFS 和 HDFS 等元数据的可扩展性不足,无法满足大规模文件存储的需求。Curve 文件系统自研的元数据引擎可横向扩展,解决元数据管理的问题

Curve 文件系统原数据引擎具有**高可用**、**高可靠**和**高可扩**的特点,数据的可靠性和可用性通过 Raft 协议保证,元数据经过分片均匀分散在不同的 Raft-Group 中,保证了数据和负载的均衡性,同时支持业务按需进行一键弹性扩缩容。

通过解决这些问题,Curve文件系统不仅将为公司的核心业务提供稳定、高效的存储支持,同时也会对开源社区做出重要贡献。我们致力于将Curve文件系统打造成为一款广泛使用的开源存储软件,为全球的开发者社区提供可扩展、高性能和低成本的存储解决方案。我们相信,Curve文件系统的研发和应用将促进技术创新,推动整个开源社区的发展。
<div align="center">
<img src="../../images/ai_curvefs_metadata_architecture.png" width="500"/>
</div>

## 二、项目思路和方案
### 3. 高性能

### 文件系统的元数据独立存存储
随着文件数量的增加,传统文件系统元数据的性能会大幅下降,此外,小文件的读写性能也比较差,这会对大数据和AI等业务产生影响。Curve文件系统通过多级缓存机制,提高文件元数据访问性能,并改善小文件的读写性能。

解决元数据增长带来的扩展性和性能要求。通过创新的设计和实现,使得其中元数据被存储在一个独立的集群中。随着文件数量的不断增加,元数据集群可以持续扩展,确保了元数据的线性扩展能力。这种设计有效地解决了传统文件系统在处理大规模文件时面临的性能和可扩展性挑战。
#### 3.1 元数据缓存机制

![curvefs arch](../../images/curvefs-arch-v2.webp)
元数据支持内核和本地的多级缓存,并提供灵活的缓存配置,用户可以根据自己业务的特点配置合适的缓存失效时间,以在满足一致性要求的前提下获取更高的操作性能。此外,通过结合VFS层的重试机制,Curve 文件系统提供了完善的 CTO(close-to-open)一致性。

Curve共享文件存储系统通过对元数据进行合理的分片,使得多个分片可以分布在由多台服务器组成的元数据集群中。当前方案按照inodeid进行分片,按照算法serverid = (inodeid / inode_per_segment) mod metaserver_num进行分片。
<div align="center">
<img src="../../images/ai_curvefs_metadata_cache.png" width="700"/>
</div>

例如,如果按照每个分片管理100个inodeid,有3个metaserver,那么分片信息将如下。如果元数据数量增加,可以通过增加元数据集群的服务器来实现线性扩展的目标。
```shell
Kernel Cache -> 通用缓存
fs.kernelCache.attrTimeoutSec=3600
fs.kernelCache.dirAttrTimeoutSec=3600
fs.kernelCache.entryTimeoutSec=3600
fs.kernelCache.dirEntryTimeoutSec=3600

![curvefs meta arch](../../images/curvefs-meta-arch.webp)
Open File Cache -> 文件读写
fs.openFile.lruSize=65536

Negative Lookup Cache -> 代码编译/SO查找/所以命令
fs.lookupCache.negativeTimeoutSec=1
fs.lookupCache.minUses=3

### 文件系统数据存储的降本增效
Directory Cache -> 大目录/ls、find
fs.dirCache.lruSize=5000000
```

文件数据最终存储在S3上,例如集团内部的NOS、阿里云OSS、AWS S3等。S3通常使用EC技术(一般可以支持1.2副本),相比2副本或3副本,在保证可靠性的同时可以大幅度降低存储成本。
#### 3.2 数据缓存机制

以网易对象存储这边当前主流的EC 20+4使用为例,该使用方式相当于1.2副本。因此,以需要1PB使用空间为例,使用Curve共享文件存储系统+1.2副本对象存储只需要1.2PB空间,相比本地盘2副本可以节省约800TB的容量,成本优化效果非常显著
数据层面 Curve 文件系统同样支持可配的内存缓存、本地磁盘缓存和分布式缓存集群来加速数据的访问

### 文件系统数据和元数据都支持多级缓存
1. 内存缓存:用于加速当前节点上的读写速度(sync操作时会刷到持久化存储保证数据可靠性)。
2. 本地磁盘缓存:用于加速当前节点上的读写速度(开启共享(cto)时,数据会同时刷一份到共享缓存中,如果没配置共享缓存则需要上传到后端数据存储引擎)。
3. 共享缓存:用于加速跨节点间的数据共享速度。

在工程实践中,由于S3和元数据集群都需要通过网络进行访问,每次读写操作都会经过网络,这可能会对业务性能产生负面影响。为了解决这个问题,Curve共享文件存储系统在保证多挂载点一致性的情况下,进行了数据和元数据的性能优化,主要思路是增加缓存。
<div align="center">
<img src="../../images/curvefs-data-cache-arch.webp" width="700"/>
</div>

#### 数据缓存
数据支持多级缓存,主要包括:
- 内存缓存:用于加速当前节点上的读写速度。
- 本地缓存:同样用于加速当前节点上的读写速度。
- 全局缓存集群:用于加速当前节点以及多节点数据共享时的速度。
为了加速数据的读取速度,Curve 文件系统支持数据的预读和预热。

![curvefs data cache arch](../../images/curvefs-data-cache-arch.webp)
**预读(prefetch)**:即在数据访问时,可以将文件超过访问长度外的数据提前读入缓存,提高后续读请求缓存命中率。

**预热(warmup)**:指用户在使用到某部分数据之前主动的触发该部分数据写到指定缓存层,提高使用时的性能,例如在 AI 训练场景下,可以提前将训练数据集预热到缓存中,来加速整个训练过程。

#### 元数据缓存
<div align="center">
<img src="../../images/ai_curvefs_warmup.png" width="700"/>
</div>

元数据缓存支持metaserver端内存缓存、kernel缓存和本地客户端缓存。
## 降本增效成果

缓存何时加载或失效是元数据缓存的难点。与采用分布式锁的做法相比,Curve共享文件存储系统选择不实现复杂的分布式锁机制,而是基于业务分析不需要完全强一致性的前提,为每种类型的缓存数据制定了一些规则,在满足业务一致性的前提下提供了较好的性能
网易杭研多媒体团队 AI 业务之前使用三副本 Ceph 内核文件存储来支撑AI场景,包括通用、AI相关的各种流程。AI 业务存储的数据量是巨大的,但其中 80% 都是冷数据,使用三副本存储成本很高。业务期望找一个文件系统能无缝替换 Ceph,且在保证性能的同时能够降低存储成本

此外,通过结合VFS层的重试机制,Curve共享文件存储系统提供了完善的CTO(close-to-open)一致性,完全满足CTO语义。相对于JuiceFS等依赖用户缓存时长配置来实现CTO的存储系统,Curve共享文件存储系统具有更好的性能,并在任何场景下都能保证CTO一致性。
目前网易杭研多媒体 AI 业务已全量迁入 Curve 文件系统,业务使用后的收益包括:

![curvefs meta cache arch](../../images/curvefs-meta-cache-arch.webp)

**成本下降**:Curve 文件系统后端接入网易对象存储(NetEase Object Storage)低频存储,相比3副本存储每年每 PB 数据存储可节约**75**%成本。

### 文件系统支持数据预读和预热
**性能提升**:在通用场景 Curve 文件系统性能和 Ceph 内核文件系统差不多持平,在 AI 存储密集型的特征提取和部分特征训练场景性能提升**30**%+,计算密集型特征训练场景性能和Ceph内核文件系统持平。尤其是在昂贵的GPU节点上,存储性能提升可以带来更高的GPU利用效率,从而降低训练成本。

#### 支持预读(Prefetch)
**提升训练任务并发度**:使用 Ceph 文件系统作为 AI 训练数据集存储后端时,所有数据需要实时从存储后端读取,一旦业务有多个AI任务需要并发执行,就会导致 Ceph 文件系统存储后端负载超出集群总能力,最终导致训练任务耗时大大拉长。Curve 文件系统通过利用多级缓存加速能力,大部分训练数据只需要从存储后端读取一次即可缓存到本地或分布式缓存集群,从而降低对存储后端的性能需求,把负载分散到训练节点或分布式缓存集群,极大提升训练任务的并发度,减少多个训练任务之间的互相影响。

即在数据访问时,可以将文件超过访问长度外的数据提前读入缓存。

#### 支持预热(warmup)

AI用户可以在训练前将云端数据按需拷贝到指定的任意缓存层。这样,在后续访问时可以提供更好的性能,大大节省训练时间。

![curvefs warmup](../../images/curvefs-warmup.webp)


## 三、项目影响力和产出价值

### 为业务降本提效

杭研多媒体团队 AI 业务使用三副本 Ceph 内核文件存储来支撑AI场景,包括通用、AI相关的各种流程。AI 业务存储的数据量是巨大的,但其中 80% 都是冷数据,使用三副本存储成本很高。业务期望找一个文件系统替换 Ceph,在保证性能的同时能够降低存储成本。

同样 Curve共享文件存储系统可以无缝接入业务,目前杭研多媒体 AI 业务已全量迁入 Curve共享文件存储系统,业务使用后的收益包括:

- 成本下降:Curve共享文件存储系统 后端接入 NOS低频存储,相比3副本存储每年每 PB 数据存储可节约40%成本
- 性能收益:在通用场景 Curve共享文件存储系统性能和 Ceph 内核文件系统差不多持平,在 AI 存储密集型的特征提取和部分特征训练场景性能提升30%+,计算密集型特征训练场景性能和Ceph内核文件系统持平。尤其是在昂贵的GPU节点上,存储性能提升可以带来更高的GPU利用效率,从而降低训练成本。
- 提升训练任务并发度:使用Ceph文件系统作为AI训练数据集存储后端时,所有数据需要实时从存储后端读取,一旦业务有多个AI任务需要并发执行,就会导致Ceph文件系统存储后端负载超出集群总能力,最终导致训练任务耗时大大拉长。Curve共享文件存储系统通过利用多级缓存加速能力,大部分训练数据只需要从存储后端读取一次即可缓存到本地或分布式缓存集群,从而降低对存储后端的性能需求,把负载分散到训练节点或分布式缓存集群,极大提升训练任务的并发度,减少多个训练任务之间的互相影响。

另外云音乐广告算法团队AI业务也已经落地使用Curve共享文件存储系统,稳定运行半年多。

Curve共享文件存储系统不仅适用于AI业务场景,还适用于ElasticSearch等大数据存储分析业务场景,目前也在多个集团内部业务场景落地使用。


## 四、项目未来规划和展望

Curve 是一个开源项目(包括共享文件存储和块存储两个子项目),不仅服务于网易内部,也服务于外部用户,当前外部仍然存在大量的 AI 业务场景下的存储需求,目前 Curve共享文件存储系统在 AI 场景下的落地,已证明其在该场景下的性价比优势,更有利于后续在该场景下的推广。
## 后续规划与展望

Curve 作为一个年轻的文件系统,仍在快速迭代发展中,后续将继续聚焦在 AI 、大数据存储等场景:
- 和 AI 框架的融合:做到⾃动预热、训练节点和缓存节点的亲和性调度、与各类算法平台的深度融合等,进一步提升AI训练场景下的易用性和性能表现
- ⼤数据和 AI 的融合:提供 HDFS 接⼝,使⽤ Curve共享文件存储系统即可以⽤在数据⽣产收集也可以⽤于后续处理和训练
- 推动在更多业务场景的落地

1. 进一步优化元数据和数据读写性能,为支持更多应用场景打好基础。
2. 和 AI 框架的融合,做到⾃动预热、训练节点和缓存节点的亲和性调度、与各类算法平台的深度融合等,进一步提升AI训练场景下的易用性和性能表现。
Binary file added docs/images/ai_curvefs_architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/ai_curvefs_metadata_architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/ai_curvefs_metadata_cache.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/ai_curvefs_warmup.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.