本文档提供了一个参考架构,介绍了如何使用 Parallelstore 优化人工智能 (AI) 或机器学习 (ML) 工作负载的性能。Parallelstore 是一种并行文件系统存储服务,可帮助您降低费用、提高资源利用率,并缩短 AI 和机器学习工作负载的训练时间。
本文档的目标受众群体包括为 Google Cloud上的 AI 和机器学习工作负载设计、预配和管理存储的架构师和技术从业人员。本文档假定您了解机器学习生命周期、流程和功能。
Parallelstore 是 Google Cloud 中基于分布式异步对象存储 (DAOS) 架构构建的全代管式高性能预留文件系统。Parallelstore 非常适合使用高达 100 TiB 存储容量的 AI 和机器学习工作负载,这些工作负载需要提供低延迟(小于 1 毫秒)访问,同时具有高吞吐量和高每秒输入/输出操作数 (IOPS)。
Parallelstore 为 AI 和机器学习工作负载提供了多项优势,例如:
- 降低训练的总拥有成本 (TCO):Parallelstore 通过高效地将数据传送到计算节点来缩短训练时间。此功能有助于降低 AI 和机器学习模型训练的总拥有成本。
- 降低服务总拥有成本:Parallelstore 的高性能功能可加快模型加载速度并优化推理服务。这些功能有助于降低计算费用并提高资源利用率。
- 高效利用资源:借助 Parallelstore,您可以在单个实例中组合训练、检查点和服务。这种资源利用有助于在单个高性能存储系统中最大限度地高效使用读取和写入吞吐量。
架构
下图展示了使用 Parallelstore 优化模型训练工作负载和服务工作负载性能的示例架构:
后续部分将详细介绍上文架构中显示的工作负载。该架构包括以下组件:
组件 | 用途 |
---|---|
Google Kubernetes Engine (GKE) 集群 | GKE 会管理 AI 和机器学习模型训练和服务进程的执行计算主机。GKE 管理集群的底层基础架构,包括控制平面、节点和所有系统组件。 |
Kubernetes 调度器 | GKE 控制平面会调度工作负载并管理其生命周期、伸缩和升级。Kubernetes 节点代理 (kubelet ) 未显示在该图中,它会与控制平面通信。kubelet 负责启动和运行在 GKE 节点上调度的容器。您可以使用动态工作负载调度程序为批处理工作负载和 AI 工作负载部署 GPU,这样您无需进行大量提交即可请求 GPU。如需详细了解调度程序,请参阅 GKE 上的 AI/机器学习编排。 |
虚拟私有云 (VPC) 网络 | 架构中的所有 Google Cloud 资源都使用单个 VPC 网络。根据您的需要,您也可以选择构建使用多个网络的架构。如需详细了解如何为 Parallelstore 配置 VPC 网络,请参阅 配置 VPC 网络。 |
Cloud Load Balancing | 在此架构中,Cloud Load Balancing 会将来自应用用户的传入推理请求高效分发到 GKE 集群中的服务容器。使用 Cloud Load Balancing 有助于确保 AI 和机器学习应用的高可用性、可伸缩性和最佳性能。如需了解详情,请参阅了解 GKE 负载均衡。 |
图形处理器 (GPU) 或张量处理单元 (TPU) | GPU 和 TPU 是专用的机器加速器,可提升 AI 和机器学习工作负载的性能。如需详细了解如何选择合适的处理器类型,请参阅本文后面的加速器选项。 |
Parallelstore | Parallelstore 提供针对低延迟和高吞吐量进行了优化的高性能并行文件系统,从而加快 AI 和机器学习训练和服务速度。与仅使用 Cloud Storage 相比,使用 Parallelstore 可显著缩短训练时间,并提高模型在服务期间的响应速度。这些改进尤其适用于需要快速、一致地访问共享数据的高要求工作负载。 |
Cloud Storage | Cloud Storage 可为 AI 和机器学习工作负载提供经济实惠的永久性存储空间。Cloud Storage 可用作原始训练数据集、模型检查点和最终训练好的模型的中央存储库。使用 Cloud Storage 有助于确保计算中未实际使用的那些数据的持久性、长期可用性和成本效益。 |
训练工作负载
在上图架构中,模型训练期间的数据流程如下:
- 将训练数据上传到 Cloud Storage:您可以将训练数据上传到 Cloud Storage 存储桶,该存储分区可用作安全可伸缩的中央存储库和真相来源。
- 将数据复制到 Parallelstore:训练数据语料库会通过批量 API 导入到 Parallelstore 实例,从 Cloud Storage 传输。通过转移训练数据,您可以利用 Parallelstore 的高性能文件系统功能,在模型训练期间优化数据加载和处理速度。
- 在 GKE 中运行训练作业:模型训练流程在 GKE 节点上运行。通过使用 Parallelstore 作为数据源(而不是直接从 Cloud Storage 加载数据),GKE 节点可以更快、更高效地访问和加载训练数据。使用 Parallelstore 有助于缩短数据加载时间并加快整个训练过程,尤其是对于大型数据集和复杂模型。根据您的工作负载要求,您可以使用 GPU 或 TPU。如需了解如何选择合适的处理器类型,请参阅本文档后面的加速器选项。
- 将训练检查点保存到 Parallelstore:在训练过程中,系统会根据您定义的指标或时间间隔将检查点保存到 Parallelstore。检查点会以较短的时间间隔捕获模型的状态。
- 将检查点和模型保存到 Cloud Storage:我们建议您使用 Parallelstore 实例中的批量 API 导出功能,将部分检查点和训练好的模型保存到 Cloud Storage。此做法可确保容错性,并支持日后进行从特定时间点恢复训练、将模型部署到生产环境以及开展进一步实验等用例。最佳实践是将检查点存储在与训练数据不同的存储桶中。
- 恢复检查点或模型:当 AI 和机器学习工作流要求您恢复检查点或模型数据时,您需要在 Cloud Storage 中找到要恢复的资产。根据时间戳、效果指标或特定版本选择要恢复的素材资源。使用 API 导入功能将资源从 Cloud Storage 转移到 Parallelstore,然后将资源加载到训练容器中。然后,您可以使用恢复的检查点或模型来继续训练、微调参数或评估验证集上的性能。
服务工作负载
在上图架构中,模型服务期间的数据流程如下:
- 加载模型以进行服务:训练完成后,您的 pod 会将经过训练的模型加载到服务节点。如果您在训练期间使用的 Parallelstore 实例具有足够的 IOPS 容量,则可以使用训练实例来提供模型,从而加快模型加载速度并降低费用。重复使用训练实例可在训练和部署之间高效共享资源。不过,为了保持最佳性能和兼容性,请为训练使用与服务 GKE 节点上可用的加速器类型一致的加速器类型(GPU 或 TPU)。
- 推理请求:应用用户通过 AI 和机器学习应用发送推理请求。这些请求会被转发到 Cloud Load Balancing 服务。Cloud Load Balancing 会将传入请求分发到 GKE 集群中的服务容器。这种分布可确保没有单个容器过载,并且请求能够高效处理。
- 处理推理请求:在生产环境中,系统会利用模型服务缓存高效处理推理请求。计算节点首先检查是否有匹配的预测,然后与缓存交互。如果找到匹配的预测结果,系统会直接返回该结果,这有助于优化响应时间和资源用量。 否则,模型会处理请求、生成预测结果,并将其存储在缓存中,以便日后提高效率。
- 响应传送:服务容器通过 Cloud Load Balancing 将响应发回。Cloud Load Balancing 会将响应路由回相应的应用用户,从而完成推理请求周期。
使用的产品
此参考架构使用以下 Google Cloud 产品:
- Virtual Private Cloud (VPC):为您的 Google Cloud 工作负载提供全球可伸缩的网络功能的虚拟系统。VPC 包括 VPC 网络对等互连、Private Service Connect、专用服务访问通道和共享 VPC。
- Google Kubernetes Engine (GKE):一种 Kubernetes 服务,可用于使用 Google 的基础架构来大规模部署和操作容器化应用。
- Cloud Storage:适用于各种数据类型的费用低廉且不受限制的对象存储。数据可从 Google Cloud内部和外部访问,并且跨位置进行复制以实现冗余。
- Parallelstore:适用于 AI、高性能计算 (HPC) 和数据密集型应用的全代管式并行文件系统。
使用场景
Parallelstore 非常适合存储容量高达 100 TiB 且需要提供低延迟(小于 1 毫秒)访问、高吞吐量和高 IOPS 的 AI 和机器学习工作负载。以下部分提供了适合使用 Parallelstore 的应用场景示例。
基于文本的处理和文本生成
大语言模型 (LLM) 是专门用于理解和处理基于文本的数据的 AI 模型。LLM 使用大量文本数据集进行训练,因此能够执行各种任务,包括机器翻译、问答和文本摘要。训练 LLM 模型需要低延迟地访问数据集,以便高效地处理请求和生成文本。Parallelstore 在数据密集型应用中表现出色,可提供训练和推理所需的高吞吐量和低延迟,从而使依托 LLM 的应用响应更快。
高分辨率图片或视频处理
传统 AI 和机器学习应用或处理高分辨率图片或视频的多模态生成式模型(例如医学图像分析或自动驾驶系统)需要较大的存储容量和快速的数据访问。Parallelstore 的高性能临时文件系统支持快速加载数据,从而加快应用性能。例如,Parallelstore 可以暂时存储和处理从 Cloud Storage 中提取的大量患者数据(例如 MRI 和 CT 扫描)。借助此功能,AI 和机器学习模型可以快速分析数据,以进行诊断和治疗。
设计替代方案
以下部分介绍了您可以在 Google Cloud中为 AI 和机器学习应用考虑的备选设计方法。
平台替代方案
您可以考虑使用 Compute Engine 搭配 Slurm,而不是在 GKE 上托管模型训练和服务工作流。Slurm 是一个高度可配置的开源工作负载和资源管理器。将 Compute Engine 与 Slurm 搭配使用特别适合进行大规模模型训练和模拟。如果您需要将专有 AI 和机器学习知识产权 (IP) 集成到可伸缩的环境中,并具有灵活性和控制力,以针对专用工作负载优化性能,我们建议您将 Compute Engine 与 Slurm 搭配使用。
在 Compute Engine 上,您可以预配和管理虚拟机 (VM),从而对实例类型、存储空间和网络进行精细控制。您可以根据自己的确切需求量身定制基础架构,包括选择特定的虚拟机机器类型。您还可以使用加速器优化型机器系列,提升 AI 和机器学习工作负载的性能。如需详细了解 Compute Engine 上提供的机器类型系列,请参阅机器系列资源和比较指南。
Slurm 提供了一个强大的 AI 和机器学习工作负载管理选项,可让您控制计算资源的配置和管理。若要使用此方法,您需要具备 Slurm 管理和 Linux 系统管理方面的专业知识。
加速器选项
机器加速器是一种专用处理器,旨在加快 AI 和机器学习工作负载所需的计算速度。您可以选择图形处理单元 (GPU) 或张量处理单元 (TPU)。
- GPU 加速器可为各种任务(包括图形渲染、深度学习训练和科学计算)提供出色的性能。 Google Cloud 提供多种不同性能和价位的 GPU 可供选择。如需了解 GPU 型号和价格,请参阅 GPU 价格。
- TPU 是定制设计的 AI 加速器,针对大型 AI 模型的训练和推理进行了优化。它们非常适合各种应用场景,例如聊天机器人、代码生成、媒体内容生成、合成语音、视觉服务、推荐引擎、个性化模型等。如需详细了解 TPU 型号和价格,请参阅 TPU 价格。
提供存储空间替代方案
搭配使用多区域或双区域存储桶的 Cloud Storage FUSE 可提供最高级别的可用性,因为经过训练的 AI 和机器学习模型会存储在 Cloud Storage 和多个区域中。虽然 Cloud Storage FUSE 实现的每个虚拟机吞吐量低于 Parallelstore,但 Cloud Storage FUSE 可让您充分利用 Cloud Storage 的可伸缩性和经济效益。为了加快模型加载速度并提高性能(尤其是对于要求苛刻的工作负载),您可以在每个区域使用现有或新的 Parallelstore 实例。如需了解如何使用 Cloud Storage FUSE 提升性能,请参阅优化 Cloud Storage FUSE CSI 驱动程序以提升 GKE 性能。
Google Cloud Hyperdisk ML 是一款高性能块存储解决方案,旨在加速需要对大型数据集进行只读访问的大型 AI 和机器学习工作负载。Hyperdisk ML 可以预配更高的总吞吐量,但与 Parallelstore 相比,其每个虚拟机的吞吐量较低。
此外,只有位于同一可用区的 GPU 或 TPU 虚拟机才能访问 Hyperdisk ML 卷。因此,对于从多个可用区提供服务的区域级 GKE 集群,您必须在每个可用区中预配单独的 Hyperdisk ML 卷。这种部署方式与 Parallelstore 不同,后者每个区域只需要一个实例。另请务必注意,Hyperdisk ML 是只读的。如需详细了解如何在 AI 和机器学习工作负载中使用 Hyperdisk ML,请参阅利用 Hyperdisk ML 加快 AI/机器学习数据加载速度。
设计考虑事项
如需设计 Parallelstore 部署来优化Google Cloud上 AI 和机器学习工作负载的性能和成本效益,请使用以下部分中的准则。这些准则介绍了在将 Parallelstore 用作混合解决方案的一部分时应考虑的建议,该解决方案可针对工作流中的特定任务组合使用多种存储选项。
培训
在 AI 和机器学习模型训练过程中,您需要在每次迭代中向模型逐次提供数据、调整其参数并评估其性能。由于需要不断读取训练数据和写入更新后的模型参数,因此此过程可能会产生大量 I/O 请求,并且计算量很大。
为了在训练期间最大限度地提升性能,我们建议您采取以下措施:
- 缓存:将 Parallelstore 用作 Cloud Storage 之上的高性能缓存。
- 预提取:从 Cloud Storage 将数据导入 Parallelstore,以最大限度地缩短训练期间的延迟时间。您还可以使用 GKE Volume Populator 使用来自 Cloud Storage 的数据预先填充 PersistentVolumesClaims。
- 费用优化:在训练完成后,将数据导出到费用较低的 Cloud Storage 类别,以最大限度地降低长期存储费用。由于持久性数据存储在 Cloud Storage 中,因此您可以根据训练作业的需要销毁和重新创建 Parallelstore 实例。
- 与 GKE 集成:与 GKE 容器存储接口 (CSI) 驱动程序集成,以简化管理。如需了解如何将 GKE 集群连接到 Parallelstore 实例,请参阅 Google Kubernetes Engine Parallelstore CSI 驱动程序。
- A3 虚拟机性能:在 A3 变体上提供超过 20 GB/s 的数据传输速度(每个 GPU 约为 2.5 GB/s),以实现最佳数据传输。
- 并发访问:使用 Parallelstore 实例来支持全双工读写。
在部署 Parallelstore 以进行训练时,请考虑以下事项:
- 预留文件系统:在整个训练过程中配置检查点间隔时间。Parallelstore 是一个临时文件系统,这意味着数据是临时存储的。在 100 TiB 范围内,预计数据丢失的平均时间为两个月。在 23 TiB 范围内,预计平均数据丢失时间为 12 个月或更长时间。
- 文件和目录条带:针对主要的文件大小优化文件和目录条带,以最大限度地提升性能。
- 费用优化:通过在 Cloud Storage(而非 Parallelstore)中适当暂存数据来优化费用。
- 可用区选择:将 GPU 或 TPU 计算客户端和存储节点放置在同一可用区,以优化费用和性能。
如需详细了解如何配置 Parallelstore 环境以优化性能,请参阅性能注意事项。
检查点
检查点是 AI 和机器学习模型训练的关键方面。借助检查点,您可以在流程的各个时间点保存模型的状态,以便在出现中断、系统故障或探索不同的超参数配置时,从已保存的检查点继续训练。使用 Parallelstore 进行训练时,请务必将其用于检查点,以充分利用其高写入吞吐量并尽可能缩短训练时间。这种方法可确保高效利用资源,并通过尽可能加快训练和检查点设置速度,帮助降低 GPU 资源的总体拥有成本 (TCO)。
如需使用 Parallelstore 优化您的检查点工作流,请考虑以下最佳实践:
- 快速检查点:利用 Parallelstore 实现快速检查点写入。您可以实现每 TiB 容量 0.5 GB/s 的吞吐量,每个 A3 虚拟机的吞吐量超过 12 GB/s。
- 选择性检查点存储:将 Parallelstore 中的选定检查点导出到 Cloud Storage,以进行长期存储和灾难恢复。
- 并发操作:通过同时使用 Parallelstore 进行训练和检查点写入,获享读写全双工的好处。
提供服务
服务涉及部署训练好的 AI 和机器学习模型来处理推理请求。为了实现最佳性能,请务必最大限度地缩短将这些模型加载到内存所需的时间。虽然 Parallelstore 主要用于训练工作负载,但您可以使用 Parallelstore 的每个虚拟机高吞吐量(超过 20 GB/s)和集群汇总吞吐量,以最大限度地缩短数千个虚拟机中的模型加载时间。如需跟踪关键指标以便发现瓶颈并确保最佳效率,请使用 Cloud Monitoring。
部署 Parallelstore 以进行服务时,请考虑以下事项:
- 高吞吐量:使用 Cloud Monitoring 最大限度地提升 Parallelstore 性能,确保您部署的容量足以在 100 TiB 时实现高达 125 GB/s 的吞吐量。
- 可能会出现服务中断:由于 Parallelstore 是一个临时文件系统,因此可能会偶尔出现服务中断。对于 100 TiB 的集群,数据丢失的平均时间约为 2 个月。
- 恢复数据:如果发生服务中断,您需要从最新的 Cloud Storage 备份恢复 Parallelstore 数据。数据传输速度约为 16 GB/s。
- 共享实例:使用一个 Parallelstore 实例进行训练和服务可最大限度地提高资源利用率,并且可以降低成本。不过,如果这两个工作负载都有较高的吞吐量需求,则可能会出现资源争用。如果训练后有可用的备用 IOPS,使用同一实例可以加快模型加载速度,以便进行服务。使用 Cloud Monitoring 有助于确保您分配足够的资源来满足吞吐量需求。
- 单独的实例:使用单独的实例可实现性能隔离,通过隔离训练数据来增强安全性,并改进数据保护。虽然访问权限控制列表可以在单个实例中管理安全性,但单独的实例可提供更强大的安全边界。
展示位置选项
为了最大限度地缩短延迟时间并提高性能,请在与 GPU 或 TPU 计算客户端地理位置相近的区域中创建 Parallelstore 实例。
- 对于训练和检查点:为了获得最佳结果,请确保客户端和 Parallelstore 实例位于同一可用区。这种共存方式可最大限度地缩短数据传输时间,并最大限度地利用 Parallelstore 的写入吞吐量。
- 对于分发:虽然与计算客户端在同一可用区内共存是理想情况,但每个区域有一个 Parallelstore 实例就足够了。这种方法可避免与部署多个实例相关的额外费用,并有助于最大限度地提高计算性能。不过,如果您需要额外的容量或吞吐量,不妨考虑在每个区域部署多个实例。
在两个区域部署 Parallelstore 可以让数据在地理位置上更靠近用于传送的 GPU 或 TPU,从而显著提升性能。这种放置方式可缩短延迟时间,并在推理期间加快数据访问速度。如果发生区域性服务中断,用户将无法使用训练和分发应用。
为确保高可用性和可靠性,您应在其他区域实例化此架构的副本。创建地理冗余架构后,即使某个区域发生服务中断,您的 AI 和机器学习应用也能继续运行。如需备份和恢复集群数据和 Cloud Storage 数据,并根据需要将其恢复到其他区域,您可以使用 Backup for GKE。
如需了解 Parallelstore 实例支持的位置,请参阅支持的位置。
部署
如需创建和部署此参考架构,我们建议您使用 Cluster Toolkit。Cluster Toolkit 是一个基于 Terraform 的模块化工具包,专为在Google Cloud上部署可重复的 AI 和机器学习环境而设计。如需定义环境,请使用 GKE 和 Parallelstore 培训蓝图。如需为集群预配和管理 Parallelstore 实例,请参阅 Parallelstore 模块。
如需了解如何手动部署 Parallelstore,请参阅创建 Parallelstore 实例。如需通过动态预配进一步提高可伸缩性并提升性能,您可以在 GKE 中创建并使用由 Parallelstore 实例支持的卷。
后续步骤
- 详细了解如何使用适用于 HPC 工作负载的并行文件系统。
- 详细了解在 Google Cloud上实现机器学习的最佳实践。
- 详细了解如何为 Google Cloud 中的 AI 和机器学习工作负载设计存储 Google Cloud。
- 详细了解如何在 GKE 上使用 Keras 训练 TensorFlow 模型。
- 如需查看更多参考架构、图表和最佳做法,请浏览云架构中心。
贡献者
作者:Samantha He | 技术文档撰写人
其他贡献者:
- Dean Hildebrand | 首席技术官办公室技术总监
- Kumar Dhanagopal | 跨产品解决方案开发者
- Sean Derrington | 存储组合对外产品经理