本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
存储
数据管理和存储
使用 CSI 驱动程序将 AI 模型部署到 Pod
AI/ML 工作负载通常需要访问大型模型工件(例如训练过的权重、配置),而 pod 需要一种可靠、可扩展的方式来访问这些工件,而无需将它们嵌入到容器镜像中,这可能会增加图像大小和容器注册表提取时间。为了减少管理卷挂载的运营开销,我们建议使用相应的 CSI 驱动程序将 Amazon 存储服务(例如,用 FSx 于 Lustre、EFS 的 S3)安装为永久卷 (PVs),将 AI 模型部署到 pod 中。有关实现的详细信息,请参阅本节的后续主题。
在 EKS 上优化 ML 模型缓存的存储
利用最佳存储解决方案对于最大限度地缩短 pod 和应用程序启动延迟、减少内存使用量、获得所需的性能水平以加速工作负载以及确保机器学习工作负载的可扩展性至关重要。机器学习工作负载通常依赖模型文件(权重),模型文件可能很大,需要在 Pod 或节点之间共享对数据的访问权限。选择最佳存储解决方案取决于您的工作负载的特征,例如单节点效率、多节点访问、延迟要求、成本限制以及数据集成要求(例如与 Amazon S3 数据存储库的集成)。我们建议根据您的工作负载对不同的存储解决方案进行基准测试,以了解哪一种解决方案符合您的要求,并且我们提供了以下选项来帮助您根据工作负载要求进行评估。
EKS CSI 驱动程序支持以下 AWS 存储服务,每种服务都有自己的 CSI 驱动程序,并且在 AI 和 ML 工作流程方面各有优势:
AWS 存储服务的选择取决于您的部署架构、规模、性能要求和成本策略。需要在您的 EKS 集群上安装存储 CSI 驱动程序,这允许 CSI 驱动程序在 Pod 生命周期之外创建和管理永久卷 (PV)。使用 CSI 驱动程序,您可以将支持的 AWS 存储服务创建为 EKS 集群资源的 PV 定义。然后,Pod 可以通过为 PV 创建永久卷声明 (PVC) 来访问这些存储卷作为其数据卷。根据 AWS 存储服务和您的部署方案,可以将单个 PVC(及其关联的 PV)连接到多个 Pod 以处理一个工作负载。例如,对于 ML 训练,共享的训练数据存储在 PV 上并由多个 Pod 访问;为了进行实时在线推理,LLM 模型缓存在一个 PV 上并由多个 Pod 访问。下面提供了 AWS 存储服务的示例 PV 和 PVC YAML 文件,以帮助您入门。
场景:多个 GPU 实例工作负载
Amazon FSx for Lustre:如果您有多个 EC2 GPU 计算实例环境,其中包含对延迟敏感和高带宽吞吐量的动态工作负载(例如分布式训练和模型服务),并且需要原生 Amazon S3 数据存储库集成,我们建议使用 Amazon for Lustre。 FSx FSx for Lustre 提供了一个完全托管的高性能并行文件系统,专为高性能计算 (HPC)、Machine Learning 等计算密集型工作负载而设计。
您可以安装 for Lustre CSI 驱动程序,将 FSx 文件系统作为永久卷 (PV) 挂载到 EKS 上,然后将 Lustre 文件系统部署 FSx 为独立的高性能缓存或与 S3 关联的文件系统,以充当 S3 数据的高性能缓存,从而为通过 GPU 计算实例访问数据提供快速 I/O 而高的吞吐量。 FSx FSx for Lustre 可以使用 Scratch-SSD 或永久固态硬盘存储选项进行部署:
-
Scratch-SSD 存储:建议用于临时或短期(小时)的工作负载,每个 Tib 预配置的吞吐量容量是固定的。
-
永久固态硬盘存储:建议用于需要最高可用性的任务关键型、长时间运行的工作负载,例如 HPC 模拟、大数据分析或 Machine Learning 训练。使用永久 SSD 存储,您可以配置所需的存储容量和吞吐容量(每 TiB)。
性能注意事项:
-
要为 Lustre 文件系统管理 FSx 的管理 P od:配置一个 “管理” Pod,该容器安装了 lustre 客户端并安装了 FSx 文件系统。这将使接入点能够对 FSx 文件系统进行微调,也可以在需要在启动 GPU 计算实例之前使用 ML 训练数据或 LLM 模型对 FSx 文件系统进行预热的情况下。如果您的架构使用基于 Spot 的 Amazon EC2 GPU/Compute 实例,则这一点尤其重要,在这些实例中,您可以利用管理 Pod 将所需数据 “预热” 或 “预加载” 到 FSx 文件系统中,以便在运行基于 Spot 的 Amazon 实例时可以处理数据。 EC2
-
弹性结构适配器 (EFA):永久固态硬盘存储部署类型支持弹性结构适配器 (EFA),其中使用 EFA 非常适合基于高性能和吞吐量的 GPU 工作负载。请注意, FSx Lustre 支持 NVIDIA GPUDirect 存储 (GDS),其中 GDS 是一种在本地或远程存储与 GPU 内存之间创建直接数据路径的技术,以实现更快的数据访问。
-
压缩:如果您的文件类型可以压缩,请在文件系统上启用数据压缩。这有助于提高性能,因为数据压缩可以减少在 Lustre 文件服务器和存储之间 FSx 传输的数据量。
-
Lustre 文件系统条带化配置:
-
数据条带化:允许 FSx Luster 在 Lustre 文件系统中的多个对象存储目标 (OSTs) 上分发文件数据,从而最大限度地提高并行访问和吞吐量,尤其是在大规模机器学习训练作业中。
-
独立文件系统条带化:默认情况下,将通过 for Lustre 的渐进式文件布局 (PFL) 功能为您创建一个 4 组件 Lustre 条带化配置。 FSx 在大多数情况下,你不需要更新默认的 PFL Lustre 条带数量/大小。如果需要调整 Lustre 数据条带,则可以通过参考 for Lustre 文件系统的条带化参数来手动调整 Lustre 条带。 FSx
-
S3 链接文件系统:使用原生 Amazon S3 集成(数据存储库关联或 DRA)导入 FSx 文件系统的文件不使用默认 PFL 布局,而是使用文件系统参数中的布局。
ImportedFileChunkSize
大于 s3 的导入文件ImportedFileChunkSize
将存储在多个文件中,条 OSTs 带计数基于ImportedFileChunkSize
定义的值(默认为 1GiB)。如果您有较大的文件,我们建议将此参数调整为更高的值。 -
放置:将 for Lustre 文件系统部署在与计算或 GPU 节点相同的可用区中,以实现最低延迟的数据访问,避免跨可用区访问模式。 FSx 如果您有多个 GPU 节点位于不同的可用区,那么我们建议您在每个可用区部署一个 FSx 文件系统,以实现低延迟的数据访问。
-
示例
for Lustre 文件系统的永久卷 (PV) 定义,使用静态配置( FSx 实例已配置完毕)。 FSx
apiVersion: v1 kind: PersistentVolume metadata: name: fsx-pv spec: capacity: storage: 1200Gi volumeMode: Filesystem accessModes: - ReadWriteMany mountOptions: - flock persistentVolumeReclaimPolicy: Recycle csi: driver: fsx.csi.aws.com volumeHandle: [FileSystemId of FSx instance] volumeAttributes: dnsname: [DNSName of FSx instance] mountname: [MountName of FSx instance]
示例
PV 的永久容量声明定义为fsx-pv
:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fsx-claim spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 1200Gi volumeName: fsx-pv
示例
将 Pod 配置为使用永久音量声明fsx-claim
:
apiVersion: v1 kind: Pod metadata: name: fsx-app spec: containers: - name: app image: amazonlinux:2023 command: ["/bin/sh"] volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: fsx-claim
有关完整示例,请参阅中的 FSx Lustre 驱动程序示例。 GitHub
场景:单 GPU 实例工作负载
带有 CSI 驱动程序的 Amazon S3 的 Mountpoint:你可以使用 Moun tpoint for Amazon S3 CSI 驱动程序将 S3 存储桶作为卷挂载到你的 pod 中。此方法允许对哪些 Pod 可以访问特定的 S3 存储桶进行精细的访问控制。每个 Pod 都有自己的挂载点实例和本地缓存(5-10GB),从而隔离了 Pod 之间的模型加载和读取性能。此设置支持使用服务账户的 IAM 角色 (IRSA) 进行 pod 级身份验证,并支持针对不同模型或客户的独立模型版本控制。权衡是内存使用量和 API 流量增加,因为每个 pod 都会发出 S3 API 调用并维护自己的缓存。
示例使用 CSI 驱动程序的 Pod 部署 YAML 的部分示例:
# CSI driver dynamically mounts the S3 bucket for each pod volumes: - name: s3-mount csi: driver: s3.csi.aws.com volumeAttributes: bucketName: your-s3-bucket-name mountOptions: "--allow-delete" # Optional region: us-west-2 containers: - name: inference image: your-inference-image volumeMounts: - mountPath: /models name: s3-mount volumeMounts: - name: model-cache mountPath: /models volumes: - name: model-cache hostPath: path: /mnt/s3-model-cache
性能注意事项:
-
数据缓存:适用于 S3 的 Mountpoint 可以缓存内容以降低成本并提高重复读取同一文件的性能。有关缓存选项和参数,请参阅缓存配置
。 -
对象部分大小:存储和访问大小超过 72GB 的文件时,请参阅配置 Mountpoint 性能,了解如何配置
--read-part-size
和--write-part-size
命令行参数以满足您的数据配置文件和工作负载要求。 -
共享缓存
专为大小不超过 1MB 的对象而设计。它不支持大型对象。使用本地缓存选项缓 存 EKS 节点上的 EBS 卷中的对象 NVMe 或 EBS 卷。 -
API 请求费用:使用适用于 S3 的 Mountpoint 执行大量文件操作时,API 请求费用可能会成为存储成本的一部分。为了缓解这种情况,如果不需要强一致性,请务必启用元数据缓存,并将
metadata-ttl
时间设置为将 API 操作数量减少到 S3。
有关更多详细信息,请参阅 Amazon EKS 官方文档中的 Mountpoint for Amazon S3 CSI 驱动程序。如果出现瓶颈,我们建议使用亚马逊指标监控 Amazon S3 的性能 CloudWatch 指标,并在需要时调整配置。
适用于共享模型缓存的 Amazon EFS
如果您有多 EC2 GPU 计算实例环境,并且动态工作负载需要跨多个节点和可用区共享模型访问权限(例如,使用 Karpenter 进行实时在线推理),且性能和可扩展性需求适中,我们建议通过 EFS CSI 驱动程序将 Amazon Elastic File System (EFS) 文件系统用作永久卷。Amazon EFS 是一个完全托管、高度可用且可扩展的基于云的 NFS 文件系统,它使具有共享文件存储的 EC2 实例和容器具有一致的性能,并且无需预先配置存储。使用 EFS 作为模型卷,并通过在 EKS 集群上定义永久卷将该卷作为共享文件系统挂载。由 EFS 文件系统支持的每个永久卷声明 (PVC) 都是作为 E FS 文件系统的 EFS 访问点创建的。EFS 允许多个节点和 pod 访问相同的模型文件,无需将数据同步到每个节点的文件系统。安装 EFS CSI 驱动程序,将 EFS 与 EKS 集成。
您可以使用以下吞吐量模式部署 Amazon EFS 文件系统:
-
突增吞吐量:根据文件系统大小扩展吞吐量,适用于偶尔出现突发的不同工作负载。
-
预配置吞吐量:专用吞吐量,非常适合在限制范围内具有可预测性能需求的一致机器学习训练作业。
-
弹性吞吐量(建议用于机器学习):根据工作负载自动扩展,针对不同的机器学习工作负载实现成本效益。
要查看性能规格,请参阅 Amazon EFS 性能规范。
性能注意事项:
-
使用弹性吞吐量处理不同的工作负载。
-
对活跃的 ML 工作负载使用标准存储类。
有关在 EKS 集群和 Pod 中使用 Amazon EFS 文件系统作为永久卷的完整示例,请参阅中的 EFS CSI 驱动程序示例 GitHub
监控性能不佳的磁盘性能会延迟容器映像读取、增加 pod 启动延迟,并降低推理或训练吞吐量。如果出现瓶颈,我们建议使用以下方法来监控相应的 AWS 存储服务的性能指标,并在需要时调整配置。
-
Amazon FSx 控制台及其性能指标,用于查看与您的 FSx 文件系统相关的性能指标。
-
访问 Amaz CloudWatch on EFS 的亚马逊指标,查看与您的 EFS 文件系统相关的性能指标。
-
使用亚马逊监控 Amazon S3 指标 CloudWatch,查看与您的 S3 存储桶相关的性能详情。