本文档提供了一些参考架构,展示了如何使用 Cloud Storage FUSE 来优化 Google Kubernetes Engine (GKE) 上 AI 和 ML 工作负载的性能。
本文档的目标受众群体包括为 Google Cloud上的 AI 和机器学习工作负载设计、预配和管理存储的架构师和技术从业人员。本文档假定您了解 ML 生命周期、流程和功能。
Cloud Storage FUSE 是一种开源 FUSE 适配器,可让您将 Cloud Storage 存储分区作为本地文件系统进行装载。此配置可让应用使用标准类文件系统语义与基于云的存储分区顺畅地交互。借助 Cloud Storage FUSE,您可以充分利用 Cloud Storage 的可伸缩性和成本效益。
架构
您可以根据对性能、可用性和灾难恢复 (DR) 的要求,选择以下 Google Cloud 部署原型之一,在 Google Cloud上运行 AI 和机器学习工作负载:
- 单区域:您的应用在单个Google Cloud 区域内独立运行。 对于并非任务关键型但需要稳健可靠地应对可用区服务中断的应用,我们建议使用此部署原型。
- 多区域:您的应用在两个或多个 Google Cloud 区域中以活动-活动或活动-被动模式独立运行。此部署原型非常适合支持灾难恢复 (DR) 方案。对于需要应对区域服务中断和灾难的任务关键型应用,我们建议采用此部署原型。双区域或多区域部署可以通过更近的资源邻近性来缩短延迟时间并提高吞吐量。
您选择的部署原型会影响架构所需的 Google Cloud 产品和功能。多区域架构使用 Anywhere Cache。 如需评估 Anywhere Cache 是否适合您的工作负载,请使用 Anywhere Cache Recommender 分析您的数据用量和存储空间。
以下标签页提供了区域级和多区域部署原型的参考架构:
区域
下图展示了一个示例区域级架构,该架构使用 Cloud Storage FUSE 来优化模型训练和模型服务工作流的性能:
此架构包括以下组件:
- GKE 集群:GKE 会管理运行 AI 和机器学习模型训练及服务进程的计算节点。GKE 管理 Kubernetes 集群的底层基础架构,包括控制平面、节点和所有系统组件。
- Kubernetes 调度程序:GKE 控制平面会调度工作负载并管理其生命周期、伸缩和升级。Kubernetes 节点代理 (
kubelet
)(未在图中显示)会与控制平面通信。kubelet
代理负责启动和运行调度到 GKE 节点上的容器。如需详细了解调度程序,请参阅 GKE 上的 AI/机器学习编排。 - Virtual Private Cloud (VPC) 网络:架构中的所有 Google Cloud资源都使用单个 VPC 网络。根据您的需求,您可以选择构建使用多个网络的架构。如需详细了解如何为 Cloud Storage FUSE 配置 VPC 网络,请参阅决定是否创建多个 VPC 网络。
- Cloud Load Balancing:在此架构中,Cloud Load Balancing 可高效地将应用用户的传入推理请求分配给 GKE 集群中的服务容器。如需了解详情,请参阅了解 GKE 负载均衡。
- 图形处理器 (GPU) 或张量处理单元 (TPU):GPU 和 TPU 是专门的机器学习加速器,可提升 AI 和 ML 工作负载的性能。如需了解如何选择合适的处理器类型,请参阅本文档后面的加速器选项。
- Cloud Storage:Cloud Storage 可为 AI 和机器学习工作负载提供持久、可伸缩且经济实惠的存储空间。Cloud Storage 可作为原始训练数据集、模型检查点和最终训练模型的中央存储库。
- 启用文件缓存的 Cloud Storage FUSE:借助 Cloud Storage FUSE,您可以将 Cloud Storage 存储桶装载为本地文件系统。Cloud Storage FUSE 中的文件缓存是本地机器上的一个目录,用于存储 Cloud Storage 存储分区中经常访问的文件。Cloud Storage FUSE CSI 驱动程序管理 Cloud Storage FUSE 与 Kubernetes API 的集成,以将 Cloud Storage 存储分区用作卷。
以下各部分介绍了架构的训练和服务工作负载中的工作流。
多区域级
下图展示了一个示例多区域架构,该架构使用 Cloud Storage FUSE 和 Anywhere Cache 来优化模型训练和模型服务工作流的性能:
此架构包括以下组件:
- GKE 集群:GKE 会管理运行 AI 和机器学习模型训练及服务流程的计算节点。GKE 会管理 Kubernetes 集群的底层基础架构,包括控制平面、节点和所有系统组件。
- Kubernetes 调度程序:GKE 控制平面会调度工作负载并管理其生命周期、伸缩和升级。Kubernetes 节点代理 (
kubelet
)(未在图中显示)会与控制平面通信。kubelet
代理负责启动和运行调度到 GKE 节点上的容器。如需详细了解调度程序,请参阅 GKE 上的 AI/机器学习编排。 - Virtual Private Cloud (VPC) 网络:架构中的所有 Google Cloud资源都使用单个 VPC 网络。根据您的需求,您可以选择构建使用多个网络的架构。如需详细了解如何为 Cloud Storage FUSE 配置 VPC 网络,请参阅决定是否创建多个 VPC 网络。
- Cloud DNS:在多区域架构中,Cloud DNS 通过任播路由将流量导向负载平衡器,以确保最佳性能和可用性。请求会自动路由到最近的位置,从而为用户减少延迟,并提升权威名称查找性能。如需了解一般原则和最佳实践,请参阅 Cloud DNS 最佳实践。
- Cloud Load Balancing:在此架构中,Cloud Load Balancing 可高效地将应用用户传入的推理请求分配到 GKE 集群中的服务容器。如需了解详情,请参阅了解 GKE 负载均衡。
- 图形处理器 (GPU) 或张量处理单元 (TPU):GPU 和 TPU 是专门的机器学习加速器,可提升 AI 和 ML 工作负载的性能。如需了解如何选择合适的处理器类型,请参阅本文档后面的加速器选项。
- Cloud Storage:Cloud Storage 可为 AI 和机器学习工作负载提供持久、可伸缩且经济实惠的存储空间。Cloud Storage 可作为原始训练数据集、模型检查点和最终训练模型的中央存储库。
- Cloud Storage FUSE:借助 Cloud Storage FUSE,您可以将 Cloud Storage 存储桶作为本地文件系统装载。Cloud Storage FUSE CSI 驱动程序(图中未显示)管理 Cloud Storage FUSE 与 Kubernetes API 的集成,以将 Cloud Storage 存储分区用作卷。
- Anywhere Cache:Anywhere Cache 是 Cloud Storage 的一项功能,可为 Cloud Storage 存储分区提供高达 1 PiB 的 SSD 支持的可用区级只读缓存。在训练和提供服务期间,Anywhere Cache 可通过伸缩缓存容量和带宽来帮助您实现超过 1 TB/秒的吞吐量。
以下各部分介绍了架构的训练和服务工作负载中的工作流。
训练工作负载
在上述架构中,模型训练期间的数据流步骤如下:
- 将训练数据加载到 Cloud Storage:训练数据上传到启用了分层命名空间的 Cloud Storage 存储桶。Cloud Storage 可用作可伸缩的中央存储库。
- 在 GKE 中加载训练数据并运行训练作业:装载到 GKE pod 的 Cloud Storage 存储桶可让训练应用通过使用 FUSE 接口高效地加载和访问训练数据。GKE 节点使用已挂载的文件缓存作为数据源来运行模型训练流程。训练应用会不断向机器加速器馈送训练数据,以执行模型训练所需的复杂计算。您可以根据工作负载要求使用 GPU 或 TPU。如需了解如何选择合适的处理器类型,请参阅本文档后面的加速器选项。
检查点以及模型保存和恢复:
- 保存检查点或模型:在训练期间,以频繁的间隔异步保存检查点到单独的 Cloud Storage 存储桶。检查点会根据您定义的指标或间隔捕获模型的状态。
- 恢复检查点或模型:当训练工作负载需要您恢复检查点或模型数据时,您需要在 Cloud Storage 中找到要恢复的资源。您可以使用恢复的检查点或模型来继续训练、微调参数或评估验证集上的性能。
服务工作负载
在上述架构中,模型服务期间的数据流步骤如下:
- 加载模型:训练完成后,您的 pod 会通过启用并行下载的 Cloud Storage FUSE 加载训练后的模型。并行下载功能可从 Cloud Storage 并行提取模型的部分内容,从而加快模型加载速度。为了显著缩短模型加载时间,该进程使用缓存目录作为预提取缓冲区。
- 推理请求:应用用户通过 Cloud Load Balancing 服务从 AI 和机器学习应用发送推理请求。 Cloud Load Balancing 会将传入请求分配给 GKE 集群中的各个服务容器。这种分布可确保不会有任何单个容器过载,并能高效处理请求。
- 响应交付:节点处理请求并生成预测。服务容器通过 Cloud Load Balancing 将响应发送回应用用户。
使用的产品
参考架构使用以下 Google Cloud 产品:
- Google Kubernetes Engine (GKE):一种 Kubernetes 服务,可用于使用 Google 的基础架构来大规模部署和操作容器化应用。
- Cloud Storage:适用于各种数据类型的费用低廉且不受限制的对象存储。数据可从 Google Cloud内部和外部访问,并且跨位置进行复制以实现冗余。
- Virtual Private Cloud (VPC):为您的 Google Cloud 工作负载提供全球可扩缩的网络功能的虚拟系统。VPC 包括 VPC 网络对等互连、Private Service Connect、专用服务访问通道和共享 VPC。
- Cloud Load Balancing:一组高性能、可扩缩的全球和区域级负载均衡器。
- Cloud DNS:一项服务,可利用 Google 的全球网络提供弹性佳、延迟低的 DNS 服务。
使用场景
对于需要大存储容量和高性能文件访问的 AI 和 ML 工作负载,我们建议您使用围绕 Cloud Storage FUSE 构建的架构。通过适当的规划,您可以利用这些架构实现超过 1 TB/s 的吞吐量。此外,借助 Cloud Storage FUSE,您可以利用中央存储库作为 AI 和机器学习工作流所有阶段的单一可靠来源。此方法可用于任何工作负载,无论其规模或大小如何。
对于这些工作负载,Cloud Storage FUSE 具有以下优势:
- 简化数据访问:使用 AI 和 ML 框架(例如 Connector for PyTorch、JAX 和 TensorFlow)访问训练数据和检查点。通过 AI 和机器学习框架访问数据,无需重构代码。
- 加快启动速度:使用 Cloud Storage FUSE 直接访问 Cloud Storage 中的数据,无需将大型数据集下载到计算资源。这种直接访问数据的方式可缩短作业启动时间。
- 经济实惠:利用 Cloud Storage 的固有可伸缩性和成本效益来优化费用。
Cloud Storage FUSE 不适合对延迟敏感的工作负载,这些工作负载包含小于 50 MB 的文件,或者需要小于 1 毫秒的延迟才能进行随机 I/O 和元数据访问。
对于数据密集型训练或检查点和重启工作负载,请在 I/O 密集型训练阶段考虑替代存储方案。
设计替代方案
以下部分介绍了您可以在 Google Cloud中为 AI 和机器学习应用考虑的其他设计方法。
平台替代方案
您可以考虑使用 Slurm 的 Compute Engine,而不是在 GKE 上托管模型训练和服务工作流。Slurm 是一款高度可配置的开源工作负载和资源管理器。将 Compute Engine 与 Slurm 搭配使用尤其适合大规模模型训练和模拟。如果您需要将专有的 AI 和机器学习知识产权 (IP) 集成到可伸缩的环境中,并具有灵活性和控制能力来优化专业工作负载的性能,我们建议您将 Compute Engine 与 Slurm 搭配使用。如需详细了解如何将 Compute Engine 与 Slurm 搭配使用,请参阅使用 Slurm 部署 HPC 集群。
在 Compute Engine 上,您可以预配和管理虚拟机 (VM),从而对实例类型、存储和网络进行精细控制。 您可以根据自己的确切需求量身定制基础设施,包括选择特定的虚拟机机器类型。如需了解如何在 Compute Engine 中使用 Cloud Storage FUSE 命令行选项,请参阅 gcsfuse CLI 和 Cloud Storage FUSE 配置文件。 您还可以使用加速器优化型机器系列来提升 AI 和 ML 工作负载的性能。如需详细了解 Compute Engine 上提供的机器类型系列,请参阅机器系列资源和比较指南。
Slurm 提供了一种强大的选项来管理 AI 和机器学习工作负载,并让您控制计算资源的配置和管理。如需使用此方法,您需要具备 Slurm 管理和 Linux 系统管理方面的专业知识。
加速器选项
机器加速器是一种专用处理器,旨在加快 AI 和 ML 工作负载所需的计算速度。您可以选择 GPU 或 TPU。
- GPU 加速器可为各种任务提供出色的性能,包括图形渲染、深度学习训练和科学计算。 Google Cloud 提供多种 GPU,可满足各种性能和价位需求。GPU 通常在每种机器配置中都包含本地 SSD,Cloud Storage FUSE 可以将这些 SSD 用作缓存目录。如需了解 GPU 型号和价格,请参阅 GPU 价格。
- TPU 是定制设计的 AI 加速器,针对大型 AI 模型的训练和推理进行了优化。它们非常适合各种应用场景,例如聊天机器人、代码生成、媒体内容生成、合成语音、视觉服务、商品推荐引擎和个性化模型。如需详细了解 TPU 型号和价格,请参阅 TPU 价格。
存储替代方案
Cloud Storage FUSE 提供了一个便捷的文件系统,可让您充分利用 Cloud Storage 的可伸缩性和经济实惠的优势。不过,对于需要低延迟的小文件读取工作负载或需要完全符合 POSIX 标准的存储解决方案的工作负载,Cloud Storage FUSE 并不是理想的选择。对于这些使用情形,我们建议您考虑以下存储替代方案:
- Google Cloud Hyperdisk ML:一种高性能块存储解决方案,非常适合具有数百个节点的大规模集群的工作负载,这些工作负载具有较小的只读数据集,范围从数百 GB 到 64 TB 不等。 Hyperdisk ML 的吞吐量高于 Cloud Storage,并且可以只读模式挂接到多个虚拟机。与直接从模型注册表加载相比,Kubernetes ReadOnlyMany 访问模式可让 Hyperdisk ML 加快模型权重的加载速度。如需详细了解如何在 AI 和机器学习工作负载中使用 Hyperdisk ML,请参阅利用 Hyperdisk ML 加快 AI/机器学习数据加载速度。
- Connector for PyTorch:Cloud Storage 中的开源产品,非常适合使用 PyTorch 的工作负载。Connector for PyTorch 通过直接从 Cloud Storage 存储分区流式传输数据来优化训练工作负载,从而无需使用中间存储空间。这种直接访问和优化功能可显著提升数据加载、训练和检查点设置的性能,优于直接向 Cloud Storage 发出 API 调用。
虽然替代存储选项可以为某些 AI 和机器学习工作负载提供性能优势,但务必要评估您对延迟、吞吐量和存储容量的需求。
如需全面比较 AI 和机器学习工作负载的存储选项,请参阅为 Google Cloud中的 AI 和机器学习工作负载设计存储。
设计考虑事项
本部分提供了有关最佳实践和设计注意事项的指南,可帮助您配置 Cloud Storage FUSE 以实现安全性、可靠性、经济性和高性能。虽然此处的建议并不详尽,但它们涵盖了在您的环境中最大限度地发挥 Cloud Storage FUSE 优势的关键注意事项。根据您的具体需求和工作负载特征,您可能需要考虑其他配置选项和权衡因素。
以下设计建议重点介绍了可用于优化 GKE 中 Cloud Storage FUSE 部署方式的配置。大多数 Cloud Storage FUSE 选项都是通过装载选项配置的。如需详细了解 Cloud Storage FUSE 命令行选项及其使用方法,请参阅 gcsfuse CLI 和优化适用于 GKE 的 Cloud Storage FUSE CSI 驱动程序的性能。
安全性、隐私权和合规性
本部分介绍在 Google Cloud 中满足安全性、隐私权和合规性要求的 AI 和 ML 工作负载的相关注意事项。
GKE 注意事项
在 Autopilot 操作模式下,GKE 会根据安全性方面的最佳实践预先配置集群并管理节点,从而使您可以专注于特定于工作负载的安全性。详情请参阅以下内容:
如需确保增强对 GKE 中运行的应用的访问权限控制,您可以使用 Identity-Aware Proxy (IAP)。IAP 可与 GKE Ingress 资源集成,有助于确保只有拥有正确 Identity and Access Management (IAM) 角色且经过身份验证的用户才能访问应用。如需了解详情,请参阅为 GKE 启用 IAP。
默认情况下,GKE 中的数据使用 Google-owned and Google-managed encryption keys进行静态加密和传输中加密。作为适用于敏感数据的一层额外的安全防护,您可以借助 Cloud Key Management Service (Cloud KMS),使用自己所拥有和管理的密钥在应用层加密数据。如需了解详情,请参阅在应用层对 Secret 加密。
如果您使用 Standard GKE 集群,则可以使用以下额外的数据加密功能:
- 使用机密 GKE 节点加密使用中的数据(即内存中的数据)。如需详细了解机密 GKE 节点的功能、可用性和限制,请参阅通过机密 GKE 节点加密使用中的工作负载数据。
- 如果您需要更好地控制用于跨 GKE 节点加密 Pod 流量的加密密钥,则可以使用自己管理的密钥加密传输中的数据。如需了解详情,请参阅使用用户管理的加密密钥在 GKE 中加密传输中的数据。
Cloud Storage 注意事项
默认情况下,存储在 Cloud Storage 中的数据使用 Google-owned and Google-managed encryption keys进行加密。如果需要,您可以使用客户管理的加密密钥 (CMEK),也可以使用您自己的通过外部管理方法(如客户提供的加密密钥 [CSEK])管理的密钥。如需了解详情,请参阅数据加密选项。
在 Cloud Storage 中,您可以通过以下两种方法为用户授予存储分区和对象的访问权限:IAM 和访问权限控制列表 (ACL)。在大多数情况下,我们建议使用 IAM,这可让您在存储桶级和项目级授予权限。如需了解详情,请参阅访问权限控制概览。
您通过 Cloud Storage 加载的训练数据可能包含敏感数据。如需保护此类数据,您可以使用 Sensitive Data Protection 来发现数据并对其进行分类以及去标识化处理。为了分离训练和服务工作负载,请将模型和检查点保存到不同的 Cloud Storage 存储分区。这种隔离有助于防止在提供服务期间意外泄露训练数据集中的敏感信息。如需了解详情,请参阅将 Sensitive Data Protection 与 Cloud Storage 搭配使用。
如果您有数据驻留要求,Cloud Storage 可帮助您满足这些要求。数据会在您指定的区域内存储或复制。
Cloud Storage FUSE 注意事项
启用缓存后,Cloud Storage FUSE 会以未加密的格式将 Cloud Storage 存储桶中的持久性文件存储在您指定的目录中。Cloud Storage 会向任何有目录访问权限的用户或进程公开所有文件。为了降低这些风险并提高安全性,FUSE 内核层将文件系统访问权限限制为挂载该系统的用户。此限制会拒绝其他用户(包括根用户)的访问权限,即使 inode 权限更为宽松也是如此。
不过,在某些使用情形下,可能需要替换默认的访问权限限制。例如,在分布式 AI 和 ML 训练工作负载中,如果多个节点需要访问和共享存储在 Cloud Storage 中的检查点,您可能需要允许更广泛的访问权限。在这种情况下,您可以使用 -o allow_other
选项替换默认限制。
不过,如果您扩大了对文件的访问权限,则可能会将数据暴露给未经授权的用户。因此,您在使用此选项时应格外小心。
默认情况下,Cloud Storage FUSE 文件系统中的所有 inode 都归装载该文件系统的用户所有。虽然这些默认设置可能适用于许多情况,但您可以为 Pod 自定义安全上下文。如需了解如何自定义安全上下文,请参阅安全性和权限。
可靠性
为确保可靠运行,Cloud Storage FUSE 纳入了自动重试机制,以应对潜在的中断并保持数据一致性。系统会自动使用指数退避算法重试向 Cloud Storage 发送的失败请求。指数退避会逐渐增加重试之间的时间。此内置机制可帮助您的应用克服暂时性网络问题或 Cloud Storage 暂时不可用的情况。
虽然 Cloud Storage FUSE 具有许多优势,但请考虑以下事项:
- 并发写入:当多个用户尝试修改某个文件时,最后一次写入的内容会生效,而之前的所有写入操作都会丢失。为保持数据完整性,我们建议在任何给定时刻,单个对象仅由一个来源修改。
- 缓存持久性:当您卸载或重启存储桶时,缓存不会持久存在。为避免潜在的安全问题,在卸载或重启存储桶后,请务必手动删除文件缓存目录。
- 具有专用缓存的进程:虽然 Cloud Storage FUSE 支持并发访问以实现高效的并行处理,但请务必记住,缓存特定于每个 Cloud Storage FUSE 进程。因此,在相同或不同机器上运行的不同 Cloud Storage FUSE 进程不应使用同一缓存目录。
为工作负载构建架构时,也请考虑 Well-Architected Framework:可靠性支柱中提供的一般最佳实践和建议。
费用优化
本部分提供的指导可帮助您优化在 Google Cloud中设置和操作 AI 及 ML 工作流的费用。
GKE 注意事项
在 Autopilot 模式下,GKE 会根据工作负载要求优化集群基础架构的效率。为了控制费用,您无需持续监控资源利用率或管理容量。
如果您可以预测 Autopilot 集群的 CPU、内存和临时存储空间用量,则可以获得承诺使用折扣。如需降低应用运行费用,您可以为 GKE 节点使用 Spot 虚拟机。Spot 虚拟机的价格低于标准虚拟机,但无法保证可用性。
如需通过高效管理来优化费用和性能,请使用 Dynamic Workload Scheduler。动态工作负载调度器是一种资源管理和作业调度器,可帮助您提高 AI 和机器学习资源的访问权限。动态工作负载调度器可同时调度所有加速器,并且可在非高峰时段运行,同时进行已定义的加速器容量管理。通过战略性地调度作业,动态工作负载调度器有助于最大限度地提高加速器利用率、减少空闲时间,并最终优化云支出。
如需详细了解费用优化指导,请参阅在 GKE 上运行费用经过优化的 Kubernetes 应用的最佳实践。
Cloud Storage 注意事项
您的 AI 和机器学习存储需求可能会不断变化。例如,您可能需要大量存储容量来存储训练数据,但对于服务,您的容量需求会降低,因为您主要存储模型数据和检查点。为控制费用,我们建议您启用对象生命周期管理和 Autoclass。
借助对象生命周期管理功能,您可以根据自己设置的规则,自动将旧数据或未使用的数据移至更实惠的存储类别,甚至删除这些数据。
Autoclass 功能会根据您的访问模式自动在存储类别之间移动数据。此功能可确保您在性能和费用之间取得最佳平衡。
Cloud Storage FUSE 注意事项
标准 Cloud Storage 费用适用于存储空间、元数据操作以及由 FUSE 活动生成的网络流量。使用 Cloud Storage FUSE 无需额外费用。如需详细了解常见的 Cloud Storage FUSE 操作及其如何映射到 Cloud Storage 操作,请参阅操作映射。
为了优化缓存目录的成本,您可以使用现有的预配机器容量,包括本地 SSD、永久性磁盘或内存中数据,来存储临时文件系统。使用现有机器容量时,您可以避免产生额外的存储资源费用。此外,最大限度地提高缓存命中率可以显著降低 Cloud Storage 费用,因为本地传送的数据不会产生操作费用或网络出站流量费用。
如需详细了解费用,请参阅 Cloud Storage 价格。
为工作负载构建架构时,也请考虑 Well-Architected Framework:费用优化支柱中提供的一般最佳实践和建议。
性能优化
Cloud Storage FUSE 旨在为 AI 和 ML 工作负载提供对 Cloud Storage 中数据的高效访问。不过,频繁的元数据请求可能会降低性能,尤其是在大规模集群中。如需详细了解如何提升性能,请参阅优化适用于 GKE 的 Cloud Storage FUSE CSI 驱动程序的性能。
如需优化性能,请考虑以下配置:
- 启用分层命名空间:如需增强数据访问和组织能力,请创建启用了分层命名空间的 Cloud Storage 存储分区。分层命名空间可让您以文件系统结构整理数据,从而提高 AI 和机器学习工作负载的性能、确保一致性并简化管理。分层命名空间可实现更高的初始 QPS 和快速的原子目录重命名。
启用文件缓存:文件缓存通过使用本地节点目录来缓存频繁读取的文件,从而加快对训练数据的重复访问速度。从缓存介质提供重复读取可减少延迟时间,并最大限度地减少对 Cloud Storage 的操作。在具有本地 SSD 的 GPU 机器类型上,系统会自动使用本地 SSD 目录。对于不包含本地 SSD 的机器类型(例如 TPU),您可以使用 RAM 磁盘目录,例如
/tmpfs
。如需启用文件缓存,请使用以下装载选项:
- 如需将可用文件缓存值设置为缓存容量限制,请将
file-cache:max-size-mb:
设置为-1
。 - 如需将元数据缓存的存留时间 (TTL) 设置为无限时长,并在达到最大容量后根据最近最少使用 (LRU) 算法逐出数据,请将
metadata-cache:ttl-secs:
设置为-1
。
- 如需将可用文件缓存值设置为缓存容量限制,请将
增加元数据缓存值:Cloud Storage FUSE 有两种形式的元数据缓存,可提高与元数据查找相关的操作的性能:统计信息缓存和类型缓存。
如需增加元数据缓存值,请设置以下挂载选项:
- 如需将可用统计信息缓存值设置为缓存容量限制,请将
metadata-cache:stat-cache-max-size-mb:
设置为-1
。 - 如需将可用类型缓存值设置为容量限制,请将
metadata-cache:type-cache-max-size-mb:
设置为-1
。 - 为防止缓存的元数据项过期(默认值为 60 秒),请将
metadata-cache:ttl-secs:
设置为-1
。无限值应仅用于只读卷和具有大内存配置的节点。
- 如需将可用统计信息缓存值设置为缓存容量限制,请将
预先填充元数据缓存:借助元数据预提取功能,Cloud Storage FUSE CSI 驱动程序可以主动将 Cloud Storage 存储桶中对象的相关元数据加载到 Cloud Storage FUSE 缓存中。这种方法可减少对 Cloud Storage 的调用,尤其有益于访问包含大量文件的大型数据集的应用,例如 AI 和机器学习训练工作负载。
如需预先填充元数据缓存,请为指定卷启用元数据预提取。将音量属性
gcsfuseMetadataPrefetchOnMount
设置为true
。为避免工作负载中断,请考虑配置 Sidecar 资源,以增加gke-gcsfuse-metadata-prefetch
Sidecar 的内存限制。启用列表缓存:此功能可优化列表目录和文件。对于 AI 和机器学习训练工作负载,这种缓存尤其有用,因为这些工作负载通常涉及重复访问和列出整个目录。列表缓存通过减少对计算机内存中目录列表的重复访问需求,提供高效的训练流程。
如需启用列表缓存并防止内核列表缓存项过期,请将装载选项
file-system:kernel-list-cache-ttl-secs:
设置为-1
。启用并行下载:并行下载功能可同时提取多个块,从而加快模型的初始加载速度。 启用并行下载可加快模型加载速度,并提高服务期间的响应速度。
如需启用并行下载,请启用文件缓存并将装载选项
file-cache:enable-parallel-downloads:
设置为true
。提高 GKE 边车限制:为防止资源限制影响性能,请配置边车容器资源(如 CPU 和内存消耗)的限制。如果您使用本地 SSD 缓存,请考虑将
ephemeral-storage-limit
设置为无限制。此设置可让 Cloud Storage FUSE 充分利用可用的本地 SSD 存储空间来增强缓存。只读装载:由于训练工作负载通常只需要读取数据,因此请将装载点配置为只读,以获得最佳性能,尤其是在使用文件缓存时。此配置还有助于最大限度地发挥大规模集群中优化的优势,并有助于防止潜在的数据不一致问题。
为工作负载构建架构时,请考虑 Well-Architected Framework:性能优化支柱中提供的一般最佳实践和建议。
后续步骤
- 了解详情:
- 实现:
- 如需查看更多参考架构、图表和最佳实践,请浏览 Cloud 架构中心。
贡献者
作者:Samantha He | 技术文档工程师
其他贡献者:
- Dean Hildebrand | 首席技术官办公室技术总监
- Kumar Dhanagopal | 跨产品解决方案开发者
- Marco Abela | 产品经理
- Sean Derrington | 存储组合对外产品经理