你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 上测试和评估 AI 工作负载

本文重点介绍两个不同的方面:评估模型并测试整个系统。 评估和测试通常可互换使用,但应将其视为使用不同数据集的单独进程。

评估 是在开发阶段执行的作的迭代活动。 它侧重于试验,以找到具有适当优化级别的最佳模型。 然后,根据各种指标评估模型。

测试 包括在引入更改时验证整个系统,包括优化的模型和非 AI 组件。 目标是验证工作负荷是否满足已识别的目标并满足用户期望。 这也是一种不可谈判的变更管理策略,可防止质量回归。

这两种做法在实际实现中耦合。 整个过程包括向模型发送请求、评估其响应,并根据测试数据做出去或 no-go 决策。 虽然该过程在生产之前是不可谈判的,但我们建议你使用真实和合成数据的组合在生产中执行该过程。

此处的主要重点是使用生成 AI 构建的解决方案,尤其是使用基础模型的方案。 有关适用于训练和微调模型的指南,请跳到 用于测试模型训练和微调的指南

使用质量指标进行模型评估

使用符合业务目标的指标建立基线和度量模型质量。

具有针对一组指标评估和量化用户体验结果的过程。 例如, Groundedness 评估所提供的上下文是否支持生成模型的响应,而不是捏造的响应。 假设一家律师事务所开发一个引用法规的 AI 助手。 如果没有适当的验证,它可能会从过时或错误分类的文档中提取,从而导致严重后果。 高基度分数有助于确保模型的输出与受信任的源材料保持一致。

根据特定用例选择并设置指标的优先级,持续监视指标,并将其用作模型优化和部署的决策入口。 避免依赖单个指标,请使用组合来捕获不同质量维度。 例如,即使模型演示了强大的基础性,它仍可能会生成有偏差的输出。 将公平评估纳入更平衡和负责任的结果。

有关指标的信息,请参阅 监视评估指标说明和用例

使用正确的数据进行评估

使用评估数据通过迭代过程优化模型。 此数据集通常称为 黄金数据集 ,由受信任的输入输出对组成,通常由人类创建或验证。 它充当根据定义的质量指标评估模型性能的目标基准。

确保数据集代表域或任务,并提供多样化的高质量示例和最小的噪音。 有限的样本大小可能会导致评估质量不佳,因此,当样本数据缺乏足够的多样性或覆盖范围以提高平衡和完整性时,请考虑生成综合数据。

验证代理工作流

随着体系结构的演变,使用 AI,确定性代码曾经处理的功能现在已卸载到 AI 代理。 这些代理通常使用动态行为做出决策。

请考虑将 业务流程协调程序 本身作为代理实现的代理应用程序。 与传统业务流程不同,代理可以调用工具、解释提示、与其他代理协作并实时调整,使其更加灵活,但难以验证。

这种类型的体系结构引入了测试和评估的新挑战。 由于代理以不确定方式运行,因此传统的静态测试不足。 测试策略应验证从用户输入到最终响应的完整流,包括 地面数据 检索、工具调用和响应生成。 例如,

  • 验证代理是否正在正确调用外部工具、API 和其他代理。 使用模拟依赖项验证是否已正确传递数据。 模拟工具或代理故障以测试行为的可靠性。

  • 使用预定义的提示和预期输出设计基于方案的测试。 由于输出可能会有所不同,因此使用自动评分与其他模型一起使用来评估结果。 此外,还使用基于人工的审查,尤其是对敏感或主观任务。

  • 集成内容安全工具以检测有害、有偏见或不当的输出。 包括红色组合练习,以识别意外行为或越狱漏洞。 监视公平性、透明度和符合道德标准。

从工具的角度来看,请考虑支持检查的 Azure AI 评估 SDK,如下所示:

  • 意向解析:代理/业务流程协调程序是否正确理解用户的请求?
  • 工具调用准确性:是否使用正确的参数调用正确的工具?
  • 任务符合性:最终输出是否与分配的任务和之前的推理步骤保持一致?

此外,执行常规性能和负载测试。 评估代理在并发请求下缩放、处理长时间的执行路径以及跨多个代理管理交互的能力。 持续监视逻辑和性能中的回归,因为系统通过迭代版本发展。

测试安全方面

通过控制访问权限、验证所有输入和监视代理行为来防止滥用或意外作来保护代理工作流。

  • 越狱测试。 始终测试越狱尝试。 攻击者通常首先以业务流程层为目标,该层分析请求并将其转发到模型。 如果未筛选恶意输入,它们可能会损害模型行为。

  • 内容安全性。 在基于聊天的应用程序中,通过内容安全服务运行用户提示和地面上下文。

  • 终结点安全性。 对于 RESTful 接口,强制实施强身份验证并彻底测试安全控制,以防止未经授权的访问。

还有其他开放源代码库,例如 Scikit-learn、PyTorch 的 torch.testing 模块、FairML 用于偏差和公平性测试,以及用于模型评估的 TensorFlow 模型分析。

权衡。 测试此代码会产生成本影响。 例如,如果使用 Azure OpenAI 托管推理终结点,压力测试是一种常见做法,可帮助确定系统的限制。 然而,Azure OpenAI 对每次调用都会收费,这可能导致广泛的压力测试变得昂贵。 优化费用的一种方法是在测试环境中使用 Azure OpenAI 的未使用的 PTU。 或者,可以使用 开发代理等工具模拟推理终结点。

测试确定性行为

在某些体系结构中,可以使用确定性逻辑来启用业务流程。 例如,可以选择使用静态代码管理执行流的业务流程协调程序,例如解释用户意向、查询索引以获取地面数据以及调用模型 推理终结点,而不是确定性代理业务流程协调程序。

从测试的角度来看,请将此代码视为任何关键系统组件:运行性能、可靠性和功能测试,尤其是在其路由逻辑上。 将单元测试应用于确定性组件,尤其是在使用代理框架(如 Microsoft 的语义内核 或 LangChain)时。 这些测试验证与运行时可变性隔离的提示模板、工具选择逻辑、数据格式设置和决策树。

测试推理终结点

推理终结点通过 REST API 公开生成模型,并且必须测试超出模型准确性。 无论是使用 PaaS 平台还是自承载服务器,都像任何其他终结点一样测试终结点,以确保可靠性、可伸缩性和安全性。

  • 功能和集成测试。 验证请求处理、响应结构和与其他组件的集成。

  • 性能和负载测试。 模拟现实情况,以评估吞吐量、延迟和资源使用情况。 对于 PaaS 推理终结点,请专注于令牌级指标(token/sec 或 token/min),这些指标比传统的 REST API 请求大小更有意义。

  • 缩放和 GPU 优化。 在不同的负载下进行测试,以确定正确的 GPU SKU 或自动缩放配置。 通过监视实际 GPU 使用情况避免过度预配。

    权衡。GPU SKU 价格昂贵。 请务必尽可能持续检查 GPU 资源是否未充分利用并对其进行权利化。 调整后,测试资源使用情况,以保持成本效益和性能优化之间的平衡。

  • 失败处理。 模拟限制,例如 HTTP 429 错误、后端超时和服务不可用。 验证客户端是否适当地处理重试、退避和断路器。

  • 安全和内容安全。 对于公共或自承载终结点,请执行渗透测试并验证访问控制。 使用 Azure AI 内容安全等内容审查工具测试和筛选不安全的输入/输出。

测试地面数据工作流

生成 AI 模型的相关性取决于其 基础数据的质量和完整性。 可以使用数据处理管道将数据植入到模型。 在到达模型之前,此数据经过预处理、分块和索引。 模型在用户交互期间实时查询索引,使索引性能和准确性对用户体验至关重要。 提前集成测试并在整个系统生命周期内维护它。

测试不佳的数据管道可能会导致结果不一致,以及安全漏洞等交叉问题。 为了确保高质量的体验,请测试整个数据流,包括源文档、预处理、业务流程逻辑和索引本身。 关键测试注意事项包括:

  • 功能和集成测试。 验证所有数据是否正确且完全加载。 确保管道按预期处理缺失、空或综合数据。

  • 索引架构兼容性。 测试架构更改以确保向后兼容性。 任何字段或文档更改都必须保留对旧数据格式的支持。

  • 预处理和业务流程测试。 基于数据准备涉及预处理、分块和嵌入计算,通常由 Azure AI 搜索技能集等工具进行协调。 测试业务流程管道,以确保所有步骤都正确执行,生成的数据准确且相关。

  • 数据新鲜度和质量检查。 包括对过时数据、版本控制不匹配、合成项目以及空表或部分表的测试。 根据需要更新查询或索引设置,以反映最新的和干净的数据。

  • 索引负载测试。 索引在不同负载下的行为可能不同。 针对实际使用方案测试查询性能,以告知有关缩放、计算 SKU 和存储要求的决策。

  • 安全测试。 如果使用访问控制对文档进行分区,请严格测试这些控件。 确保每个用户或角色仅访问允许的内容,以保持机密性和合规性。

测试模型训练和微调指南

与生成式 AI 模型类似,在开发生命周期的不同阶段以及跨不同的系统组件和流使用各种类型的测试。 与实际一样,在考虑测试的情况下开发工作负荷资产。 例如,在为特征工程执行数据操作和重塑源数据时,请遵循良好的编码做法,并确保构建代码以支持测试。

评估模型

在模型训练期间应用基准策略来衡量和比较模型质量。 使用定义完善的指标评估模型、参数和功能的各种组合的性能。 这些指标提供客观的数据驱动分数,可以迭代地比较各个版本和配置,以确定性能最佳的模型。

有关详细信息,请参阅 回归/预测指标

要评估和测试的数据

将源数据分区为三个不同的数据集:训练、评估和测试。 使用训练数据集生成模型、评估数据集来优化模型,以及测试数据集以验证最终性能。

确保每个数据集都包含高质量的数据,以减少干扰。 在数据管道中使用测试用例来强制实施质量,并在真实样本有限时补充综合数据,在欺诈检测等域中,实际欺诈实例很少见,并且为训练可靠模型提供有限的数据。

将所有数据集保持独立和非重叠,以保持客观性并防止预测中的偏差。 不要重复使用用于评估或评估数据的训练数据进行测试。

测试训练和微调工作流

  • 数据管道技术。 使用综合数据合并功能、负载和性能测试,以评估可伸缩性,并做出有关大小调整或产品适用性、所需 SKU 和系统集成的明智决策。

  • 引入工作流。 测试 ETL/ELT 管道端到端,确保它们可靠地引入数据,并确保数据质量高。 此外,测试与所有连接的系统的集成并监视外部依赖项。 使用综合数据来验证端到端处理,尤其是对于复杂或大容量工作负荷。

    测试计划的作业,以验证引入任务是否按时完成并返回预期的卷。

  • 引入时的数据质量。 验证数据清理和处理是否包括测试,以确认数据作是否按预期运行。 包括检查完整性、新鲜度、架构一致性、唯一性和相关性。 此外,请验证结构化数据是否引入,且没有重复项、缺失值或无效条目。

  • 功能和标签完整性。 验证是否已正确计算特征并准确分配标签,尤其是在使用复杂规则时。 检查数据泄漏,以防止将来或标签派生的信息污染训练数据。 此外,请验证数据拆分是否适合避免偏差或重叠样本,因为即使是微妙的泄漏也会损害模型性能。

  • 超参数测试。 超参数测试是一个迭代过程,其中模型参数经过优化,以满足基于工作负荷用例的准确性目标。 这包括反复训练所选数据,并评估测试数据以验证性能。 从较小的数据集开始,快速评估模型行为,然后将测试缩放到完整集。 请注意模型准确性与重复训练和评估所需的计算成本和时间之间的权衡。

  • 代码质量。 使用自定义代码(如 PyTorch 脚本)训练模型时,请在设计阶段运行负载测试,以评估计算要求并选择适当的 SKU。 使用单元测试在开发过程中捕获回归,并在自动化不可行时依靠手动测试。 由于这些脚本在工作流中运行,因此添加集成测试以验证脚本是否在管道中可靠地执行。

  • 推理终结点。 此 REST API 提供对经过训练的机器学习模型的访问权限,用于进行预测。 模型部署到一个具有终结点的环境,该终结点可以接收实时或批处理输入数据、处理数据并返回预测。 与任何其他 API 一样,请确保推理终结点执行功能、性能和安全测试,验证它是否返回准确的结果、处理预期的负载,并使其免受滥用。

  • 实时站点测试。 将功能测试扩展到实时系统。 运行计划测试以验证数据卷、检测缺失记录或重复记录,并确认数据新鲜度。 使用综合数据在生产条件下安全地验证端到端转换和逻辑。 合并 A/B 测试以评估新体验,并在完整部署之前防止质量回归。 配置警报,以在测试失败时触发立即调查。

通过自动化单元和功能测试(尤其是在代码更改或管道更新期间)将数据测试集成到 CI/CD 管道中。 在重新训练之前添加质量检查,并使用并行部署安全地在生产环境中进行测试。 为测试失败或引入异常设置警报。

注意

测试和监视用于不同的目的。 执行测试以评估系统的潜在更改,通常在实现任何更改之前。 持续进行监视以评估系统的整体运行状况。

模型衰减测试

由于工作负荷的内部和外部更改,所有模型都会随着时间推移而降级。 这种模型质量下降(称为模型衰减)可以通过两种方式进行:

  • 输入数据更改时发生数据偏移,使模型过时。 例如,预测投票模式的模型因重新分割后的人口变化而变得无关紧要。

  • 当外部条件发生更改时,概念偏移发生,导致模型的预测不再反映现实。 例如,预测销售趋势的模型变得无关紧要,因为在竞争对手推出新产品后,消费者行为发生了变化。

若要检测衰减,请使用自动测试来比较预测与实际结果,并使用统计指标监视偏移。 用户反馈(例如向上/向下使用拇指)也是用于识别问题的宝贵信号。 检测到潜在的衰减时,运营团队应提醒数据科学家调查并确定根本原因和后续步骤。

测试工具

请考虑以下 Azure 资源:

后续步骤