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