Google Cloud Well-Architected Framework:AI 和机器学习视角中的这篇文档提供了相关原则和建议,可帮助您优化 Google Cloud上 AI 和机器学习工作负载的性能。本文档中的建议与 Well-Architected Framework 的性能优化核心保持一致。
AI 和机器学习系统可为您的组织提供高级自动化和决策功能。这些系统的性能会直接影响重要的业务驱动因素,例如收入、成本和客户满意度。为了充分发挥 AI 和机器学习系统的潜力,您必须根据业务目标和技术要求优化其性能。性能优化过程通常涉及权衡。例如,提供所需性能的设计选择可能会导致费用增加。本文档中的建议优先考虑性能,而不是其他考虑因素。
为了优化 AI 和机器学习性能,您需要就模型架构、参数和训练策略等因素做出决策。在做出这些决策时,请考虑 AI 和机器学习系统的整个生命周期及其部署环境。例如,超大型 LLM 在大规模训练基础设施上可能表现出色,但在移动设备等容量受限的环境中可能表现不佳。
本文档中的建议与以下核心原则相对应:
确定效果目标和评估方法
您的业务策略和目标是利用 AI 和机器学习技术的基础。将业务目标转化为可衡量的关键绩效指标 (KPI)。KPI 的示例包括总收入、成本、转化率、留存率或流失率、客户满意度和员工满意度。
设定切合实际的目标
根据站点可靠性工程 (SRE) 最佳实践,服务的目标必须反映满足典型客户要求的性能水平。这意味着服务目标必须在规模和功能性能方面切合实际。
不切实际的目标可能会导致资源浪费,而性能提升却微乎其微。提供最高性能的模型可能不会带来最佳业务成果。此类模型可能需要更多时间和成本来训练和运行。
在定义目标时,请区分质量目标和效果目标,并确定其优先级:
- 质量是指决定实体价值的固有特征。这有助于您评估实体是否符合您的预期和标准。
- 性能是指实体运行或执行其预期用途的效率和效果。
机器学习工程师可以在训练过程中提高模型的性能指标。Gemini Enterprise Agent Platform 提供评估服务,机器学习工程师可以使用该服务对质量指标进行标准化和可重复的跟踪。模型的预测效率表示模型在生产环境或推理时的表现。如需监控性能,请使用 Cloud Monitoring 和 Gemini Enterprise Agent Platform 上的模型监控功能。如需选择合适的模型并决定如何训练模型,您必须将业务目标转换为确定质量和效果指标的技术要求。
如需了解如何设定切合实际的目标并确定适当的效果指标,请考虑以下 AI 赋能的欺诈检测系统示例:
- 业务目标:对于欺诈检测系统,不切实际的业务目标是在每秒 1, 000 亿笔交易的峰值流量下,在一纳秒内准确检测出 100% 的欺诈交易。更切合实际的目标是,在美国工作时间内,以每秒 100 万笔交易的峰值量,在 100 毫秒内以 95% 的准确率检测欺诈性交易,并实现 90% 的在线预测。
- 效果指标:检测欺诈行为属于分类问题。您可以使用召回率、F1 得分和准确率等指标来衡量欺诈检测系统的质量。如需跟踪系统性能或速度,您可以测量推理延迟时间。检测潜在欺诈性交易可能比准确率更有价值。因此,一个切实可行的目标可能是高召回率,且 p90 延迟时间小于 100 毫秒。
在模型生命周期的所有阶段监控性能
在实验和训练期间以及模型部署后,监控您的 KPI 并观察与业务目标的任何偏差。全面的监控策略可帮助您就模型质量和资源利用率做出关键决策,例如:
- 确定何时停止训练作业。
- 确定模型在生产环境中的性能是否在下降。
- 降低新模型的成本并缩短其上市时间。
在实验和训练期间进行监控
实验阶段的目标是找到针对特定任务的最佳整体方法、模型架构和超参数。实验可帮助您以迭代方式确定可提供最佳性能的配置以及如何训练模型。监控有助于您高效识别潜在的改进领域。
为了监控模型的质量和训练效率,机器学习工程师必须执行以下操作:
- 直观呈现每个试验的模型质量和效果指标。
- 直观呈现模型图和指标,例如权重和偏差的直方图。
- 以可视化方式呈现训练数据。
- 在不同硬件上对训练算法进行性能分析。
如需监控实验和训练,请考虑以下建议:
模型质量:如需直观呈现和跟踪实验指标(例如准确率),以及直观呈现模型架构或训练数据,请使用 TensorBoard。TensorBoard 是一套开源工具,与以下机器学习框架兼容:
- XGBoost
- JAX
- Flax
- PyTorch
- Cloud TPU 上基于 XLA 的框架,用于 Cloud TPU 训练
- TensorFlow
实验跟踪:Gemini Enterprise Agent Platform 上的 Experiments 与代管式企业级 Agent Platform TensorBoard 实例集成,以支持实验跟踪。通过此集成,可以可靠地存储和共享日志和指标。为了让多个团队和个人跟踪实验,我们建议您遵循最小权限原则。
训练和实验效率:Agent Platform 会将指标导出到 Monitoring,并使用可观测性代理收集遥测数据和日志。您可以在 Google Cloud 控制台中直观呈现指标。或者,您也可以使用 Monitoring 根据这些指标创建信息中心或提醒。如需了解详情,请参阅监控 Agent Platform 的指标。
NVIDIA GPU:Ops Agent 可为 Compute Engine 和 Ops Agent 支持的其他产品启用 GPU 监控。您还可以使用 NVIDIA 数据中心 GPU 管理器 (DCGM),这是一套用于管理和监控集群环境中的 NVIDIA GPU 的工具。监控 NVIDIA GPU 对于训练和提供深度学习模型特别有用。
深度调试:如需调试训练代码或 Gemini Enterprise Agent Platform 托管式训练作业配置的问题,您可以使用交互式 shell 会话检查训练容器。
在服务期间进行监控:流式预测
训练模型并将其导出到 Gemini Enterprise Agent Platform 上的 Model Registry 后,您可以创建 Agent Platform 端点。此端点为模型提供 HTTP 端点。
Agent Platform 上的模型监控可帮助您识别输入或输出特征分布的重大变化。您还可以监控生产环境中的特征归因,并与基准分布进行比较。基准分布可以是训练集,也可以基于生产流量的过往分布。与训练相比,应用分布的变化可能意味着预测性能下降。
- 选择监控目标:根据用例对提供给模型的数据变化的敏感度,您可以监控不同类型的目标:输入特征偏移、输出偏移和特征归因。借助 Model Monitoring on Agent Platform v2,您可以监控部署在 Agent Platform 等代管式服务平台上的模型,以及部署在 Google Kubernetes Engine (GKE) 等自托管服务上的模型。此外,为了进行精细的效果跟踪,您可以在模型级别(而不是端点级别)监控参数。
- 监控生成式 AI 模型部署:为确保稳定性并最大限度地减少延迟时间(尤其是对于大语言模型端点),请设置强大的监控堆栈。Gemini 模型提供内置指标,例如首 token 延迟 (TTFT),您可以直接在 Metrics Explorer 中访问这些指标。如需监控所有Google Cloud 模型的吞吐量、延迟时间和错误率,请使用模型可观测性信息中心。
在服务期间监控:批量预测
如需监控批量预测,您可以在 Agent Platform Evaluation Service 中运行标准评估作业。Agent Platform 上的 Model Monitoring 支持监控批量推理。如果您使用 Batch 运行服务工作负载,则可以使用 Metrics Explorer 中的指标监控资源消耗情况。
实现评估自动化,确保可重现性和标准化
若要将模型从原型过渡到可靠的生产系统,您需要一个标准化的评估流程。此过程可帮助您跟踪不同迭代的进度、比较不同的模型、检测和缓解偏差,并确保您满足监管要求。为确保可重现性和可伸缩性,您必须自动执行评估流程。
如需对机器学习性能的评估流程进行标准化和自动化,请完成以下步骤:
- 定义定量和定性指标。
- 选择合适的数据源和技术。
- 标准化评估流水线。
以下部分介绍了这些步骤。
1. 定义定量和定性指标
基于计算的指标是使用数字公式计算得出的。请注意,训练损失指标可能与业务目标相关的评估指标不同。例如,用于监督式欺诈检测的模型可能会使用交叉熵损失进行训练。不过,为了评估推理性能,更相关的指标可能是召回率,它表示欺诈性交易的覆盖率。Agent Platform 为召回率、精确率和精确率-召回率曲线下面积 (AuPRC) 等指标提供评估服务。如需了解详情,请参阅 Agent Platform 中的模型评估。
定性指标(例如生成内容的流畅度或娱乐价值)无法客观计算。如需评估这些指标,您可以使用 LLM-as-a-judge 策略或 Labelbox 等人工标签服务。
2. 选择合适的数据源和技术
当评估在一定数量的各种示例上运行时,评估具有统计显著性。通过以下方法选择用于评估的数据集和技术:
- 黄金数据集:使用可信、一致且准确的数据样本,这些样本应能反映模型在生产环境中的概率分布。
- LLM-as-a-judge:使用 LLM 评估生成模型的输出。此方法仅适用于 LLM 可以评估模型的任务。
- 用户反馈:为了指导未来的改进,请在生产流量中捕获直接的用户反馈。
根据评估技术、评估数据的大小和类型以及评估频率,您可以使用 BigQuery 或 Cloud Storage 作为数据源,包括用于 Agent Platform 评估服务。
- 借助 BigQuery,您可以使用 SQL 命令运行自然语言处理和机器翻译等推理任务。如需了解详情,请参阅特定于任务的解决方案概览。
- Cloud Storage 为大型数据集提供了经济实惠的存储解决方案。
3. 标准化评估流水线
如需自动执行评估流程,请考虑使用以下服务和工具:
- Agent Platform 评估服务:提供开箱即用的基元,用于在 Agent Platform 上跟踪模型性能,作为机器学习生命周期的一部分。
- Gen AI Evaluation Service:让您能够评估任何生成模型或应用,并根据自己的判断和评估标准对评估结果进行基准比较。此服务还可帮助您执行专业任务,例如提示词工程、检索增强生成 (RAG) 和 AI 智能体优化。
- Agent Platform 自动并排评估 (AutoSxS) 工具:支持基于模型的两两评估。
- Kubeflow:提供用于运行模型评估的特殊组件。
运行和跟踪频繁实验
为了有效优化机器学习性能,您需要一个专用、强大且交互式的实验平台。该平台必须具备以下功能:
- 促进迭代开发,使团队能够快速、可靠且大规模地从想法转变为经过验证的结果。
- 让团队能够高效发现可用于触发训练作业的最佳配置。
- 提供对相关数据、功能和工具的受控访问权限,以便执行和跟踪实验。
- 支持可重现性和数据沿袭跟踪。
将数据视为服务
使用以下技术将实验性工作负载与生产系统隔离开来,并为数据资产设置适当的安全控制措施:
| 技术 | 说明 | 优势 |
|---|---|---|
| 资源隔离 | 在单独的 Google Cloud 项目中
隔离不同环境的资源。例如,在 ml-dev、ml-staging 和 ml-prod 等单独的项目中预配开发、预演和生产环境的资源。 |
资源隔离有助于防止实验性工作负载消耗生产系统所需的资源。例如,如果您将单个项目同时用于实验和生产,则实验可能会消耗 Agent Platform 托管式训练的所有可用 NVIDIA A100 GPU。这可能会导致关键生产模型的重新训练中断。 |
| 身份和访问权限控制 | 应用零信任和最小权限原则,并使用特定于工作负载的服务账号。使用预定义的 Identity and Access Management (IAM) 角色(例如 Agent Platform User [roles/aiplatform.user])授予访问权限。 |
这种方法有助于防止可能破坏实验的意外或恶意操作。 |
| 网络安全 | 使用虚拟私有云 (VPC) 网络隔离网络流量,并使用 VPC Service Controls 强制执行安全边界。 | 此方法有助于保护敏感数据,并防止实验性流量影响生产服务。 |
| 数据隔离 | 将实验数据存储在单独的 Cloud Storage 存储桶和 BigQuery 数据集中。 | 数据隔离可防止意外修改生产数据。 例如,如果没有数据隔离,实验可能会无意中更改共享 BigQuery 表中的特征值,这可能会导致生产环境中的模型准确率显著下降。 |
为团队配备合适的工具
如需建立一套精选工具来加速整个实验生命周期(从数据探索到模型训练和分析),请使用以下方法:
- 交互式原型设计:如需进行快速数据探索、假设检验和代码原型设计,请使用 Colab Enterprise 或 Gemini Enterprise Agent Platform Workbench 上的代管式 JupyterLab 实例。如需了解详情,请参阅选择笔记本解决方案。
- 可伸缩的模型训练:在支持分布式训练和可伸缩计算资源(如 GPU 和 Cloud TPU)的代管式服务上运行训练作业。这种方法有助于将训练时间从几天缩短到几小时,并支持更多并行实验。如需了解详情,请参阅使用专用组件进行训练。
- 数据库内机器学习:使用 SQL 直接在 BigQuery ML 中训练模型。此技术有助于消除数据移动,并加快分析师和以 SQL 为中心的用户进行实验的速度。
- 跟踪实验:通过记录每次实验运行的参数、指标和工件,创建可搜索和可比较的实验数据历史记录。如需了解详情,请参阅构建数据和模型沿袭系统。
- 优化生成式 AI:如需优化生成式 AI 应用的性能,您必须尝试使用提示、模型选择和微调。如需快速进行提示词工程,请使用 Gemini Enterprise Agent Platform 上的 Agent Studio。如需试用基础模型(例如 Gemini)并找到适合您的应用场景和业务目标的模型,请使用 Model Garden。
标准化,以实现可重现性和效率
为确保实验高效消耗资源并产生一致且值得信赖的结果,请使用以下方法对实验进行标准化和自动化:
- 使用容器确保环境一致:将训练代码和依赖项打包为 Docker 容器。使用 Artifact Registry 管理和提供容器。通过这种方法,您可以在相同的环境中重复实验,从而在不同的机器上重现问题。智能体平台提供预构建容器,用于无服务器训练。
- 将机器学习工作流作为流水线自动执行:使用 Gemini Enterprise Agent Platform Pipelines 将端到端机器学习工作流编排为编码流水线。此方法有助于强制执行一致性、确保可重现性,并自动跟踪 Agent Platform ML Metadata 中的所有工件和元数据。
- 使用基础架构即代码 (IaC) 自动进行预配:使用 Terraform 等 IaC 工具定义和部署标准化的实验环境。为确保每个项目都遵循一组标准化的安全、网络和治理配置,请使用 Terraform 模块。
构建并自动化训练和提供服务的基础设施
如需训练和提供 AI 模型,请设置一个强大的平台,以支持高效可靠的开发、部署和提供。从长远来看,该平台可让您的团队高效提高训练和传送的质量和性能。
使用专用组件进行训练
可靠的训练平台有助于提升性能,并提供一种标准化方法来自动执行机器学习生命周期中的可重复任务(从数据准备到模型验证)。
收集并准备数据
为了有效地模型训练,您需要收集和准备训练、测试和验证所需的数据。数据可能来自不同的来源,并且属于不同的数据类型。您还需要在训练运行中重复使用相关数据,并在团队之间共享特征。为了提高数据收集和准备阶段的可重复性,请考虑以下建议:
- 借助 Knowledge Catalog 提高数据可发现性。
- 在 Agent Platform Feature Store 中集中进行特征工程。
- 使用 Dataflow 预处理数据。
训练执行
训练模型时,您需要使用数据来创建模型对象。为此,您需要设置训练代码的必要基础架构和依赖项。您还需要决定如何持久保存训练模型、跟踪训练进度、评估模型以及展示结果。为了提高训练可重复性,请考虑以下建议:
- 请遵循实现评估自动化,以确保可重现性和标准化中的指南。
- 如需在一个或多个工作器节点上提交训练作业,而无需管理底层基础设施预配或依赖项,请使用 Agent Platform Managed Training 中的
CustomJob资源。您还可以将CustomJob资源用于超参数调优作业。 - 通过使用动态工作负载调度器或预留,优化 Agent Platform 托管式训练的调度吞吐量。
- 将模型注册到 Model Registry。
训练编排
使用 Agent Platform Pipelines 将训练工作负载部署为流水线的各个阶段。此服务提供代管式 Kubeflow 和 TFX 服务。将流水线的每个步骤定义为在容器中运行的组件。每个组件都像一个函数一样工作,其输入参数和输出工件会成为流水线中后续组件的输入。如需优化流水线的效率,请考虑以下建议:
- 实现核心自动化:
- 使用 Kubeflow Pipelines 组件。
- 使用控制流进行高级流水线设计,例如条件门。
- 将流水线编译作为 CI/CD 流程的一部分进行集成。
- 使用 Cloud Scheduler 执行流水线。
- 提高速度和成本效益:
- 提高稳健性:
- 实施治理和跟踪:
- 如需尝试不同的模型配置或训练配置,请将流水线运行作业添加到实验。
- 监控 Agent Platform Pipelines 的日志和指标。
- 遵循在模型生命周期的所有阶段监控性能中的建议。
使用专用基础设施进行预测
为了减少管理基础设施和模型部署的繁琐工作,请自动执行可重复的任务流。面向服务的方法可让您专注于速度和更快的价值实现时间 (TTV)。请考虑以下建议。
实现自动部署
- 模型训练完成后,使用自动化功能部署模型。 Agent Platform Pipelines 提供了专用组件,用于将模型部署到 Agent Platform 端点。您可以使用 Kubeflow 控制流管理自动部署。
- 如需根据针对验证集的评估来决定是否部署模型,请利用流水线的评估组件。您可以使用 Agent Platform 中的专用批量预测组件,自动部署批量推理。
利用代管式伸缩功能
- Agent Platform 提供批量和在线推理功能,可让您配置伸缩行为。
- Cloud Run 支持自动扩缩 GPU。
优化 Agent Platform 端点的延迟时间和吞吐量
- 选择适当的机器类型。
- 为您的模型选择合适的端点类型。专用端点可能有助于缩短延迟时间。
- 如果您使用 Feature Store,请使用 Bigtable 在线传送以高吞吐量和低延迟传送特征值,并使用 Vector Search 传送嵌入。
优化资源利用率
- 为了优化资源利用率,您可以跨模型部署共享资源。您可以将多个模型部署到单个虚拟机上,而不是为每个模型使用单独的虚拟机(默认行为)。
- 如需确保或优化资源可用性,请使用预留、动态工作负载调度器或 Spot 虚拟机。
优化模型部署
- 为避免破坏性更改,您可以通过自动将多个模型部署到同一端点来执行逐步迁移并实施 A/B 测试。Agent Platform 将端点层与模型解耦,让您可以在模型版本之间拆分流量。
- 如需替换已部署的模型,请使用滚动部署策略。
监控性能
为了提高生产环境中的服务性能,请观察 Agent Platform 端点的日志和推理指标。如需了解模型在生产环境中的行为,您需要使用工具来监控质量和性能。借助 Agent Platform 上的 Model Monitoring v2,您可以监控模型的多个版本并快速迭代。
将设计选择与性能要求匹配
在做出设计选择以提高性能时,请评估这些选择是支持您的业务要求,还是浪费且适得其反。如需选择合适的基础设施、模型和配置,请找出性能瓶颈并评估它们与效果指标的关系。例如,即使在非常强大的 GPU 加速器上,训练任务也可能会遇到性能瓶颈。这些瓶颈可能是由存储层中的数据 I/O 问题或模型的性能限制引起的。
专注于机器学习流程的整体性能
随着模型大小和集群大小方面的训练要求不断提高,故障率和基础架构费用可能会增加。因此,失败的成本可能会呈二次方增长。您不能仅依赖模型 FLOP 利用率 (MFU) 等传统资源效率指标。如需了解为什么 MFU 可能不足以指示整体训练性能,请检查典型训练作业的生命周期。生命周期由以下循环流程组成:
- 集群创建:工作器节点已预配。
- 初始化:在工作器节点上初始化训练。
- 训练执行:资源用于前向或后向传播。
- 中断:训练过程在模型检查点设置期间或由于工作器节点抢占而中断。
每次中断后,系统都会重复上述流程。
训练执行步骤只是机器学习作业生命周期的一小部分。因此,训练执行步骤的工作器节点利用率并不表示作业的整体效率。例如,即使训练执行步骤以 100% 的效率运行,但如果频繁发生中断,或者中断后需要很长时间才能恢复训练,则整体效率可能会很低。
采用和跟踪有效吞吐量指标
为了确保全面的性能衡量和优化,请将关注点从 MFU 等传统资源效率指标转移到吞吐量。吞吐量会考虑集群和计算资源的可用性和利用率,并有助于衡量多个层的资源效率。
吞吐量指标关注的是作业的总体进度,而不是作业是否处于忙碌状态。Goodput 指标可帮助您优化训练作业,从而切实提高整体工作效率和性能。
通过以下指标,Goodput 可让您精细了解潜在的效率损失:
- 调度有效吞吐量是指训练或传送所需的所有资源可供使用的时间占比。
- 运行时有效吞吐量表示在给定时间内完成的有效训练步数的比例。
- 程序有效吞吐量是训练作业可以从加速器中提取的峰值硬件性能或 MFU。这取决于训练期间底层计算资源的有效利用。
优化调度有效吞吐量
如需优化工作负载的调度有效吞吐量,您必须确定工作负载的具体基础设施要求。例如,批量推理、流式推理和训练有不同的要求:
- 批量推理工作负载可能会在资源可用性方面出现一些中断和延迟。
- 流式推理工作负载需要无状态基础设施。
- 训练工作负载需要更长期的基础架构承诺。
选择适当的获取模式
在云计算中,可获取性是指在需要时预配资源的能力。 Google Cloud 提供以下可获取性模式:
- 按需虚拟机:您可以在需要时预配 Compute Engine 虚拟机,并在虚拟机上运行工作负载。预配请求取决于资源(例如 GPU)的可用性。如果请求的资源类型数量不足,则请求会失败。
- Spot 虚拟机:您可以使用未使用的计算容量创建虚拟机。与按需虚拟机相比,Spot 虚拟机按折扣价计费,但Google Cloud 可能会随时抢占 Spot 虚拟机。我们建议您将 Spot 虚拟机用于无状态工作负载,这些工作负载在主机虚拟机被抢占时可以正常失败。
- 预留:您以虚拟机池的形式预留容量。预留非常适合需要容量保证的工作负载。使用预留功能,确保在需要时有可用资源,从而最大限度提升调度有效吞吐量。
动态工作负载调度器:此预配机制会将 GPU 虚拟机请求加入专用池中的队列。动态工作负载调度器可帮助您避免其他获取模式的限制:
- 按需模式下的缺货情况。
- Spot 虚拟机的无状态约束和抢占风险。
- 预留对费用和可用性的影响。
下表总结了 Google Cloud服务的可获取性模式,并提供了相关文档的链接:
| 产品 | 按需虚拟机 | Spot 虚拟机 | 预留 | 动态工作负载调度器 |
|---|---|---|---|---|
| Compute Engine | 创建并启动 Compute Engine 实例 | Spot 虚拟机简介 | 预留简介 | 创建具有 GPU 虚拟机的 MIG |
| GKE | 添加和管理节点池 | GKE 中的 Spot 虚拟机简介 | 使用预留的可用区级资源 | 使用灵活启动预配模式消耗 GPU、Cloud TPU 和 H4D |
| 批量 | 创建和运行作业 | 使用 Spot 虚拟机的批量作业 | 使用虚拟机预留确保资源可用性 | 使用 GPU 和灵活启动型虚拟机 |
| Agent Platform 托管式训练 | 创建无服务器训练作业 | 将 Spot 虚拟机用于训练作业 | 将预留用于训练作业 | 根据资源可用性安排训练作业 |
| Agent Platform | 从自定义训练模型获取批量推理和在线推理。 | 使用 Spot 虚拟机进行推理 | 将预留用于在线推理 | 将灵活启动型虚拟机用于推理 |
规划维护事件
您可以通过预测和规划基础架构维护和升级来提高调度吞吐量。
借助 GKE,您可以控制何时可以对集群执行自动集群维护。如需了解详情,请参阅维护窗口和排除项。
Compute Engine 提供以下功能:
- 为了在主机事件(例如底层硬件的计划内维护)期间让实例保持运行状态,Compute Engine 会将实例实时迁移到同一可用区中的其他主机。如需了解详情,请参阅维护事件期间的实时迁移过程。
- 如需控制实例在底层主机需要维护或发生错误时的响应方式,您可以为实例设置主机维护政策。
如需了解如何规划与 AI Hypercomputer 中的大型训练集群相关的主机事件,请参阅跨计算实例管理主机事件。
优化运行时有效吞吐量
模型训练过程经常会被模型检查点和资源抢占等事件中断。为了优化运行时有效吞吐量,您必须确保系统在所需的基础设施准备就绪后以及发生任何中断后,能够高效地恢复训练和推理。
在模型训练期间,AI 研究人员会使用检查点来跟踪进度,并最大限度地减少因资源抢占而造成的学习损失。模型大小越大,检查点中断时间越长,这会进一步影响整体效率。中断后,必须在集群中的每个节点上重启训练应用。这些重启可能需要一些时间,因为必须重新加载必要的工件。
如需优化运行时吞吐量,请使用以下方法:
| 技术 | 说明 |
|---|---|
| 实现自动检查点。 | 频繁设置检查点可让您在精细级别跟踪训练进度。不过,训练过程会在每个检查点中断,这会降低运行时有效吞吐量。为了尽可能减少中断,您可以设置自动检查点,其中主机的 SIGTERM 信号会触发检查点的创建。这种方法可将检查点中断限制在主机需要维护时。请注意,某些硬件故障可能不会触发 SIGTERM 信号;因此,您必须在自动检查点和 SIGTERM 事件之间找到适当的平衡。 您可以使用以下方法设置自动检查点:
|
| 使用适当的容器加载策略。 | 在 GKE 集群中,节点可能需要一些时间才能完成加载所需工件(例如数据或模型检查点),然后才能恢复训练作业。如需缩短重新加载数据和恢复训练所需的时间,请使用以下方法: |
| 使用编译缓存。 | 如果训练需要基于编译的堆栈,请检查是否可以使用编译缓存。使用编译缓存时,计算图不会在每次训练中断后重新编译。当您使用 Cloud TPU 时,由此带来的时间和成本缩减尤其有益。JAX 允许您将编译缓存存储在 Cloud Storage 存储桶中,然后在发生中断时使用缓存的数据。 |
优化程序有效吞吐量
程序有效吞吐量表示训练期间的峰值资源利用率,这是衡量训练和应用效率的传统方式。如需提高程序吞吐量,您需要优化的分布式策略、高效的计算与通信重叠、优化的内存访问和高效的流水线。
如需优化程序吞吐量,请使用以下策略:
| 策略 | 说明 |
|---|---|
| 使用框架级自定义选项。 | 加速线性代数 (XLA) 等框架或编译器提供了程序吞吐量的许多关键组件。为了进一步优化性能,您可以自定义计算图的基本组件。例如,Pallas 支持 Cloud TPU 和 GPU 的自定义内核。 |
| 将内存卸载到主机 DRAM。 | 对于需要加速器提供极高内存的大规模训练,您可以将部分内存用量分流到主机 DRAM。例如,JAX 和 XLA 允许您将模型激活从前向传递卸载到主机内存,而不是使用加速器的内存。借助此策略,您可以通过增加模型容量或批次大小来提高训练性能。 |
| 在训练期间利用量化。 | 您可以在训练期间利用模型量化来提高训练效率和程序吞吐量。此策略会在训练的某些步骤中降低梯度或权重的精度,从而提高程序有效吞吐量。不过,此策略可能需要在模型开发期间投入额外的工程工作。 如需了解详情,请参阅以下资源: |
| 实现并行处理。 | 为了提高可用计算资源的利用率,您可以在训练期间和加载数据时在模型级层使用并行策略。 如需了解模型并行处理,请参阅以下内容: 如需实现数据并行处理,您可以使用以下工具:
|
专注于特定工作负载的要求
为确保性能优化工作有效且全面,您必须根据训练和推理工作负载的具体要求做出优化决策。选择合适的 AI 模型,并使用相关的提示优化策略。根据工作负载的要求选择合适的框架和工具。
确定工作负载特定要求
从以下几个方面评估工作负载的要求和限制:
| 区 | 说明 |
|---|---|
| 任务和质量要求 | 定义工作负载的核心任务和性能基准。 回答以下问题:
|
| 投放情境 | 分析您计划部署模型的运营环境。服务上下文通常会对设计决策产生重大影响。请考虑以下因素:
|
| 团队技能和经济 | 评估购买解决方案的业务价值,并与构建和维护解决方案的成本和复杂性进行比较。确定您的团队是否具备自定义模型开发所需的专业技能,或者代管式服务是否可以更快地实现价值。 |
选择合适的模型
如果 API 或开放模型可以提供所需的性能和质量,请使用该 API 或模型。
对于光学字符识别 (OCR)、标签和内容审核等特定于模态的任务,请选择如下所示的机器学习 API:
对于生成式 AI 应用,请考虑使用 Google 模型,例如 Gemini、Imagen 和 Veo。
探索 Model Garden,并从精选的 Google 基础模型和特定任务模型中进行选择。Model Garden 还提供 Gemma 等开放模型和第三方模型,您可以在 Agent Platform 中运行这些模型,也可以将其部署到 GKE 等运行时。
如果一项任务既可以使用机器学习 API 完成,也可以使用生成式 AI 模型完成,请考虑任务的复杂性。对于复杂的任务,Gemini 等大型模型可能比小型模型提供更高的性能。
通过更好的提示提高质量
如需大规模提高提示质量,请使用 Agent Platform 提示优化器。您无需手动重写系统指令和提示。提示优化器支持以下方法:
- 零样本优化:一种低延迟方法,可实时改进单个提示或系统指令。
- 数据驱动型优化:一种高级方法,可根据特定评估指标评估模型对示例提示的回答,从而改进提示。
如需了解更多提示优化指南,请参阅提示策略概览。
提升机器学习和生成式 AI 端点的性能
如需缩短机器学习和生成式 AI 端点的延迟时间或提高其吞吐量(每秒词元数),请考虑以下建议:
- 使用 Memorystore 缓存结果。
- 对于生成式 AI API,请使用以下方法:
- 对于自托管模型,请考虑以下经过优化的推理框架:
框架 Notebooks 和指南 Model Garden 中的优化版 vLLM 容器 使用预构建容器部署开放模型 GKE 上基于 GPU 的推理 基于 Cloud TPU 的推理
使用低代码解决方案和调优
如果预训练模型不符合您的要求,您可以使用以下解决方案来提高其在特定领域的性能:
- AutoML 是一种低代码解决方案,只需极少的技术工作即可改进各种任务的推理结果。借助 AutoML,您可以创建在多个维度(架构、性能和训练阶段 [通过检查点])上进行了优化的模型。
- 调优可帮助您通过更短的提示和更少的数据,实现更高质量、更稳定的生成和更低的延迟。我们建议您开始使用超参数的默认值进行调优。如需了解详情,请参阅 Gemini 监督式微调简介。
优化自行管理的训练
在某些情况下,您可能决定重新训练模型或全托管式管理微调作业。此方法需要高级技能和额外时间,具体取决于您使用的模型、框架和资源。
利用性能优化型框架选项,例如:
使用 Ray on Google Cloud运行模型训练:
- Ray on Gemini Enterprise Agent Platform 可让您将 Ray 的分布式训练框架引入 Compute Engine 或 GKE,并简化管理该框架的开销。
- 您可以通过在现有集群上部署 Ray Operator,使用 KubeRay 在 GKE 上自行管理 Ray。
在您使用开源 Cluster Toolkit 预配的计算集群上部署训练工作负载。如需高效预配性能经过优化的集群,请使用基于 YAML 的蓝图。使用 Slurm 和 GKE 等调度器管理集群。
使用经过 GPU 优化的方案训练标准模型架构。
使用以下技术构建可优化性能的训练架构和策略:
- 在 Agent Platform 或前面介绍的框架上实现分布式训练。分布式训练支持模型并行处理和数据并行处理,这有助于增加训练数据集大小和模型大小,并有助于缩短训练时间。
- 为了高效模型训练并探索不同的性能配置,请以适当的间隔运行检查点。如需了解详情,请参阅优化运行时吞吐量。
优化自行管理的服务
对于自行管理的服务,您需要高效的推理操作和高吞吐量(单位时间内的推理次数)。
如需优化模型以进行推理,请考虑以下方法:
量化:通过以较低精度格式表示模型参数来缩减模型大小。此方法有助于减少内存消耗和延迟。 不过,训练后量化可能会改变模型质量。例如,训练后量化可能会导致准确率降低。
- 训练后量化 (PTQ) 是一项可重复的任务。PyTorch 和 TensorFlow 等主流机器学习框架都支持 PTQ。
- 您可以使用 Agent Platform Pipelines 上的流水线来编排 PTQ。
- 如需稳定模型性能并受益于模型大小的缩减,您可以使用 Qwix。
张量并行处理:通过将计算负载分布到多个 GPU 上,提高推理吞吐量。
内存优化:提高吞吐量并优化注意力缓存、批次大小和输入大小。
使用推理优化框架,例如:
- 对于生成模型,请使用 MaxText、MaxDiffusion 或 vLLM 等开放框架。
- 在 Agent Platform 上运行预构建容器映像,以进行预测和解释。如果您选择 TensorFlow,请使用优化的 TensorFlow 运行时。与使用开源 TensorFlow 的预构建容器相比,此运行时可实现更高效、费用更低的推理。
- 使用 Pathways 运行多主机推理。
- 利用适用于 Agent Platform 的 NVIDIA Triton 推理服务器。
- 通过使用 LLM 优化配置,简化 GKE 上的推理工作负载部署。如需了解详情,请参阅使用 GKE 推理快速入门分析模型部署性能和费用。
根据效果目标优化资源消耗
资源优化有助于加快训练速度、高效迭代、提高模型质量并提高服务能力。
选择适当的处理器类型
计算平台的选择可能会对模型的训练效率产生重大影响。
- 深度学习模型在 GPU 和 Cloud TPU 上表现良好,因为此类模型需要大量内存和并行矩阵计算。如需详细了解非常适合 CPU、GPU 和 Cloud TPU 的工作负载,请参阅何时使用 Cloud TPU。
- 计算优化型虚拟机非常适合 HPC 工作负载。
优化 GPU 上的训练和应用
如需优化在 GPU 上部署的训练和推理工作负载的性能,请考虑以下建议:
| 建议 | 说明 |
|---|---|
| 选择合适的内存规格。 | 选择 GPU 机器类型时,请根据以下因素选择内存规格:
|
| 评估核心和内存带宽要求。 | 除了内存大小之外,还要考虑其他要求,例如张量核心数和内存带宽。这些因素会影响芯片上的数据访问和计算速度。 |
| 选择适当的 GPU 机器类型。 | 训练和应用可能需要不同的 GPU 机器类型。
我们建议您使用大型机器类型进行训练,并使用经济实惠的小型机器类型进行推理。如需检测资源利用率问题,请使用 NVIDIA DCGM 代理等监控工具,并适当调整资源。 |
| 利用 GKE 上的 GPU 共享。 | 在某些情况下,将整个 GPU 专用于单个容器可能是一种低效的方法。为了帮助您克服这种低效问题,GKE 支持以下 GPU 共享策略:
为了最大限度地提高资源利用率,我们建议您适当组合使用这些策略。例如,如果您使用 GPU 分时和多实例 GPU 策略将大型 H100 GPU 虚拟化,则服务平台可以根据流量进行扩缩。GPU 资源会根据模型容器上的负载实时重新调整用途。 |
| 优化路由和负载均衡。 | 在集群上部署多个模型时,您可以使用 GKE Inference Gateway进行优化路由和负载均衡。Inference Gateway 通过使用以下功能扩展了 Kubernetes Gateway API 的路由机制:
|
| 分享 Agent Platform 端点的资源。 | 您可以配置多个 Agent Platform 端点,以使用通用资源池。如需详细了解此功能及其限制,请参阅跨多个部署共享资源。 |
优化 Cloud TPU 上的训练和应用
Cloud TPU 提供 Google 芯片,可帮助解决机器学习算法的大规模挑战。这些芯片可为 AI 训练和推理工作负载提供最佳性能。与 GPU 相比,Cloud TPU 可为深度学习训练和应用提供更高的效率。如需了解适合 Cloud TPU 的用例,请参阅何时使用 Cloud TPU。Cloud TPU 与 TensorFlow、PyTorch 和 JAX 等机器学习框架兼容。
如需优化 Cloud TPU 性能,请使用以下技术,这些技术在 Cloud TPU 性能指南中进行了介绍:
- 最大限度地提高每个 Cloud TPU 内存单元的批次大小。
- 确保 Cloud TPU 资源未处于空闲状态。例如,实现并行数据读取。
- 优化 XLA 编译器。根据需要调整张量维度,并避免填充。XLA 通过使用融合和广播等工具,自动优化图执行性能。
优化 Cloud TPU 上的训练和 GPU 上的服务
Cloud TPU 支持高效训练。GPU 为推理工作负载提供了多功能性和更广泛的可用性。如需结合 Cloud TPU 和 GPU 的优势,您可以在 Cloud TPU 上训练模型,并在 GPU 上提供模型。这种方法有助于降低总体成本并加快开发速度,尤其适用于大型模型。如需了解提供 Cloud TPU 和 GPU 机器类型的位置,请参阅 Cloud TPU 区域和可用区以及 GPU 位置。
优化存储层
训练和服务基础架构的存储层对性能至关重要。训练作业和推理工作负载涉及以下与存储相关的活动:
- 加载和处理数据。
- 在训练期间为模型设置检查点。
- 在节点抢占后重新加载二进制文件以恢复训练。
- 高效加载模型,以大规模处理推理。
以下因素决定了您对存储容量、带宽和延迟时间的要求:
- 模型大小
- 训练数据集的大小
- 检查点频率
- 扩缩模式
如果您的训练数据位于 Cloud Storage 中,您可以使用 Cloud Storage FUSE 中的文件缓存来缩短数据加载延迟时间。借助 Cloud Storage FUSE,您可以在具有本地 SSD 磁盘的计算节点上装载 Cloud Storage 存储桶。如需了解如何提高 Cloud Storage FUSE 的性能,请参阅性能调优最佳实践。
PyTorch 连接器可连接到 Cloud Storage,为数据读写提供高性能。此连接器对于使用大型数据集进行训练以及对大型模型进行检查点设置特别有用。
Compute Engine 支持各种永久性磁盘类型。借助 Google Cloud Hyperdisk ML,您可以根据训练需求预配所需的吞吐量和 IOPS。如需优化磁盘性能,请先调整磁盘大小,然后考虑更改机器类型。如需了解详情,请参阅优化 Persistent Disk 性能。 如需对存储层的读写性能和延迟时间进行负载测试,您可以使用灵活的 I/O 测试工具 (FIO)等工具。
如需详细了解如何为 AI 和机器学习工作负载选择和优化存储服务,请参阅 AI Hypercomputer 中 AI 和机器学习工作负载的存储服务概览。
优化网络层
为了优化 AI 和机器学习工作负载的性能,请配置 VPC 网络,以提供足够的带宽和最大吞吐量,同时尽可能缩短延迟时间。请考虑以下建议:
| 建议 | 建议的实现方法 |
|---|---|
| 优化 VPC 网络。 |
|
| 将虚拟机布置得更近。 | |
| 配置虚拟机以支持更高的网速。 |
|
将性能指标与设计和配置选择关联
为了创新、排查和调查性能问题,您必须在设计选择与性能结果之间建立明确的联系。您需要可靠地记录机器学习资产、部署、模型输出以及生成输出的相应配置和输入的沿袭。
构建数据和模型沿袭系统
为了可靠地提升性能,您需要能够将每个模型版本追溯到用于生成该模型的确切数据、代码和配置。随着模型规模的扩大,这种跟踪变得越来越困难。您需要一个沿袭系统,该系统可以自动执行跟踪过程,并为每个实验创建清晰且可查询的记录。借助此系统,您的团队可以高效地识别和重现能够产生最佳性能模型的选择。
如需查看和分析 Agent Platform 中工作负载的流水线制品沿袭,您可以使用 Agent Platform ML Metadata 或 Knowledge Catalog。通过这两个选项,您都可以注册事件或工件,以满足治理要求,并在需要时查询元数据和检索信息。本部分简要介绍了这两个选项。如需详细了解 Agent Platform ML Metadata 与 Knowledge Catalog 之间的区别,请参阅跟踪流水线工件的沿袭。
默认实现:Agent Platform ML Metadata
Agent Platform 中的首次流水线运行或实验会创建默认的 Agent Platform ML Metadata 服务。流水线使用和生成的参数和工件元数据会自动注册到 Agent Platform ML Metadata 存储区。用于整理和连接存储的元数据的数据模型包含以下元素:
- 上下文:一组制品和执行,表示实验运行。
- 执行:工作流中的一个步骤,例如数据验证或模型训练。
- 工件:工作流生成和使用的输入或输出实体、对象或数据块。
- 事件:制品与执行作业之间的关系。
默认情况下,Agent Platform ML Metadata 会捕获并跟踪流水线运行的所有输入和输出制品。它将这些工件与 Agent Platform 上的实验、Model Registry 和 Agent Platform 托管式数据集集成。
自动日志记录是 Agent Platform 托管式训练中的一项内置功能,可自动将数据记录到 Agent Platform 上的实验中。如需高效跟踪实验以优化性能,请使用 Agent Platform 上的 Experiments 与关联的 Agent Platform ML Metadata 服务之间的内置集成。
Agent Platform ML Metadata 提供过滤语法和运算符,用于运行有关工件、执行和上下文的查询。需要时,您的团队可以高效检索有关模型注册表链接及其数据集的信息,或针对特定实验运行进行评估。这些元数据有助于加快发现可优化性能的选择。例如,您可以比较流水线运行、比较模型和比较实验运行。如需了解详情(包括示例查询),请参阅分析元数据。
替代实现:Knowledge Catalog
Knowledge Catalog 会发现 Google Cloud 资源中的元数据,包括 Agent Platform 制品。您还可以集成自定义数据源。
Knowledge Catalog 可以读取多个区域和组织级存储区中的元数据,而 Agent Platform ML Metadata 是项目级资源。与 Agent Platform ML Metadata 相比,Knowledge Catalog 需要更多的设置工作。不过,如果您需要与 Google Cloud 中更广泛的数据组合以及组织级存储区集成,Knowledge Catalog 可能会更合适。
Knowledge Catalog 会发现并收集已启用 Data Lineage API 的项目的元数据。目录中的元数据使用数据模型进行整理,该模型由项目、条目组、条目和切面组成。Knowledge Catalog 提供了一种特定语法,可用于发现制品。如果需要,您可以将元数据制品映射到 Knowledge Catalog。
使用可解释性工具
AI 模型的行为取决于用于训练该模型的数据。这种行为在数学函数中被编码为参数。很难确切了解模型为何以某种方式运行。不过,这些知识对于性能优化至关重要。
例如,假设有一个图片分类模型,其训练数据仅包含红色汽车的图片。模型可能会学习根据对象的颜色而不是对象的空间和形状属性来识别“汽车”标签。如果使用显示不同颜色汽车的图片测试模型,模型的性能可能会下降。以下部分介绍了可用于识别和诊断此类问题的工具。
检测数据偏见
在机器学习项目的探索性数据分析 (EDA) 阶段,您需要识别数据问题,例如类别不平衡的数据集和偏差。
在生产系统中,您经常会重新训练模型并使用不同的数据集运行实验。为了标准化数据并跨实验进行比较,我们建议采用系统化的 EDA 方法,该方法具有以下特征:
- 自动化:随着训练集规模的扩大,EDA 流程必须在后台自动运行。
- 广泛覆盖:当您添加新特征时,EDA 必须揭示有关新特征的数据洞见。
许多 EDA 任务都特定于数据类型和业务上下文。如需自动执行 EDA 流程,请使用 BigQuery 或 Dataflow 等代管式数据处理服务。如需了解详情,请参阅不平衡数据的分类和 Agent Platform 的数据偏见指标。
了解模型特征和行为
除了了解训练集和验证集中的数据分布及其偏差之外,您还需要了解模型在预测时的特征和行为。如需了解模型行为,请使用以下工具:
| 工具 | 说明 | 用途 |
|---|---|---|
| 基于样本的解释 | 您可以使用基于样本的说明或最近邻搜索,通过从训练数据中查找最相似的样本来了解预测结果。这种方法基于以下原则:相似的输入会产生相似的输出。 |
|
| 基于特征的解释 | 对于基于表格数据或图片的预测,基于特征的解释会显示每个特征与基准相比对预测的影响程度。 可解释性技术和表格说明根据模型类型和任务提供特征归因方法。这些方法通常依赖于抽样和敏感度分析来衡量输出因输入特征的变化而发生的变化。 |
|
| What-If 工具 | What-If 工具由 Google 的人 + AI 研究 (PAIR) 计划开发,旨在帮助您了解和直观呈现图片和表格模型的行为。如需查看使用该工具的示例,请参阅 What-If 工具 Web 演示。 |
|
贡献者
作者:
- Benjamin Sadik | AI 和机器学习专家客户工程师
- Filipe Gracio 博士 | 客户工程师、AI/机器学习专家
其他贡献者:
- Daniel Lees | 云安全架构师
- Kumar Dhanagopal | 跨产品解决方案开发者