监控机器学习 (ML) 预测有助于提高已部署模型的质量。从生产中进行的推断捕获数据可以让您监控已部署的模型并检测模型质量的偏差。及早主动检测这些偏差使您能够采取纠正措施,例如重新训练模型、审核上游系统或修复质量问题。
AWS Lambda 是一种无服务器计算服务,可以大规模提供实时机器学习推理。在这篇文章中,我们演示了一个可以部署到 Lambda ML 推理工作负载的示例数据捕获功能。
2020 年 500 月,Lambda 引入了对容器映像作为打包格式的支持。此功能将部署包大小限制从 10 MB 增加到 2021 GB。在此功能推出之前,包大小限制使得将 TensorFlow 或 PyTorch 等机器学习框架部署到 Lambda 函数变得困难。发布后,增加的包大小限制使 ML 成为部署到 Lambda 的可行且有吸引力的工作负载。 XNUMX 年,ML 推理是 Lambda 服务中增长最快的工作负载类型之一。
亚马逊SageMaker是亚马逊完全托管的机器学习服务,包含自己的模型监控功能。不过,本文中的示例项目展示了如何为使用 Lambda 进行 ML 推理的客户执行数据捕获以用于模型监控。该项目使用 Lambda 扩展来捕获推理数据,以尽量减少对推理功能的性能和延迟的影响。使用 Lambda 扩展还可以最大限度地减少对函数开发人员的影响。通过扩展集成,监控功能可以应用于多个功能并由集中团队维护。
解决方案概述
该项目包含无服务器应用程序的源代码和支持文件,该应用程序使用基于 distilbert 的预训练问答模型提供实时推理。该项目使用 Hugging Face 问答自然语言处理 (NLP) 模型 PyTorch 执行自然语言推理任务。该项目还包含一个为模型预测执行推理数据捕获的解决方案。 Lambda 函数编写器可以准确确定将推理请求输入和预测结果中的哪些数据发送到扩展。在此解决方案中,我们将输入和答案从模型发送到扩展程序。然后扩展程序定期将数据发送到 亚马逊简单存储服务 (亚马逊 S3)存储桶。我们使用以下方法将数据捕获扩展构建为容器映像 makefile
。然后,我们将 Lambda 推理函数构建为容器镜像,并将扩展容器镜像添加为容器镜像层。下图显示了该架构的概述。
Lambda 扩展是增强 Lambda 函数的一种方法。在此项目中,我们使用外部 Lambda 扩展来记录推理请求和推理的预测。外部扩展在 Lambda 运行时环境中作为单独的进程运行,减少了对推理功能的影响。但是,该函数与 Lambda 函数共享 CPU、内存和存储等资源。我们建议为 Lambda 函数分配足够的内存,以确保最佳的资源可用性。 (在我们的测试中,我们为推理 Lambda 函数分配了 5 GB 内存,并看到了最佳的资源可用性和推理延迟)。推理完成后,Lambda 服务立即返回响应,不会等待扩展完成将请求和响应记录到 S3 存储桶。使用这种模式,监控扩展不会影响推理延迟。了解有关 Lambda 扩展的更多信息 看看这些视频系列.
项目内容
该项目使用 AWS无服务器应用程序模型 (AWS SAM) 命令行界面 (CLI)。该命令行工具允许开发人员初始化和配置应用程序;本地打包、构建和测试;并部署到AWS云。
您可以从以下位置下载该项目的源代码 GitHub 存储库.
该项目包括以下文件和文件夹:
- 应用程序/应用程序.py – 应用程序的 Lambda 函数的代码,包括 ML 推理的代码。
- 应用程序/Dockerfile – 用于构建打包推理功能的容器映像的 Dockerfile、从 Hugging Face 下载的模型以及构建为层的 Lambda 扩展。与 .zip 函数相比,层无法在函数创建时附加到容器打包的 Lambda 函数。相反,我们构建该层并将其内容复制到容器映像中。
- 扩展 – 模型监视器扩展文件。此 Lambda 扩展用于将推理函数的输入和相应的预测记录到 S3 存储桶中。
- 应用程序/型号 – 从 Hugging Face 下载的模型。
- 应用程序/需求.txt – 要安装到容器中的 Python 依赖项。
- 事件 – 可用于测试函数的调用事件。
- 模板.yaml – 定义应用程序的 AWS 资源的描述符文件。
该应用程序使用多种 AWS 资源,包括 Lambda 函数和 Amazon API网关 API。这些资源定义在 template.yaml
该项目中的文件。您可以更新模板以通过更新应用程序代码的同一部署过程来添加 AWS 资源。
先决条件
对于本演练,您应该具有以下先决条件:
部署示例应用程序
要首次构建您的应用程序,请完成以下步骤:
- 在 shell 中运行以下代码。 (这也将构建扩展):
- 构建模型监控应用程序的 Docker 映像。构建内容位于
.aws-sam
目录
- 登录亚马逊 ECR:
- 在 Amazon ECR 中创建存储库:
aws ecr create-repository
repository-name serverless-ml-model-monitor
--image-scanning-configuration scanOnPush=true
--region us-east-1
- 将容器映像推送到 Amazon ECR:
- 取消注释第 1 行 应用程序/Dockerfile 并编辑它以指向正确的 ECR 存储库映像,然后取消注释行 #6 和 #7 应用程序/Dockerfile:
- 再次构建应用程序:
我们再次构建,因为 Lambda 不支持直接针对容器镜像打包类型的 Lambda 层。我们需要首先将模型监控组件构建为容器镜像,将其上传到 Amazon ECR,然后在模型监控应用程序中使用该镜像作为容器层。
- 最后,部署 Lambda 函数、API 网关和扩展:
此命令将您的应用程序打包并部署到 AWS,并出现一系列提示:
- 堆栈名称 : 部署的名称 AWS CloudFormation 堆。这对于您的帐户和区域应该是唯一的,一个好的起点是与您的项目名称相匹配的名称。
- AWS地区 :您部署应用程序的 AWS 区域。
- 部署前确认更改 :如果设置为
yes
,在运行手动审核之前,会向您显示任何更改集。如果设置为 no,AWS SAM CLI 会自动部署应用程序更改。 - 允许创建 AWS SAM CLI IAM 角色 :许多 AWS SAM 模板(包括此示例)都会创建 AWS身份和访问管理 包含的 Lambda 函数访问 AWS 服务所需的 (IAM) 角色。默认情况下,这些权限的范围缩小到所需的最低权限。要部署创建或修改 IAM 角色的 CloudFormation 堆栈,
CAPABILITY_IAM
的价值capabilities
必须提供。如果未通过此提示提供权限,则要部署此示例,您必须显式传递--capabilities CAPABILITY_IAM
到sam deploy
命令。 - 将参数保存到 samconfig.toml :如果设置为
yes
,您的选择将保存到项目内的配置文件中,以便将来您可以运行sam deploy
无需参数即可将更改部署到您的应用程序。
您可以在部署后显示的输出值中找到您的 API 网关端点 URL。
测试应用程序
要测试应用程序,请使用 Postman 或curl 将请求发送到 API 网关端点。例如:
您应该看到类似以下代码的输出。机器学习模型从上下文中推断并返回我们问题的答案。
几分钟后,您应该会在 S3 存储桶中看到一个文件 nlp-qamodel-model-monitoring-modelmonitorbucket-
记录输入和推理。
清理
要删除您创建的示例应用程序,请使用 AWS CLI:
结论
在本文中,我们将模型监控功能实现为 Lambda 扩展,并将其部署到 Lambda ML 推理工作负载。我们展示了如何构建此解决方案并将其部署到您自己的 AWS 账户。最后,我们展示了如何运行测试来验证监视器的功能。
请在评论部分提出任何想法或问题。如需更多无服务器学习资源,请访问 无服务器土地.
作者简介
和福克斯 是全球无服务器专家组织的首席专家解决方案架构师。 Dan 与客户合作,帮助他们利用无服务器服务构建可扩展、容错、高性能、经济高效的应用程序。丹很高兴能够在可爱的科罗拉多州博尔德生活和工作。
牛顿贾恩 是一名高级产品经理,负责在 AWS Lambda 上为机器学习、高性能计算 (HPC) 和媒体处理客户构建新体验。他领导新功能的开发,以提高性能、减少延迟、提高可扩展性、增强可靠性和降低成本。他还协助 AWS 客户为其计算密集型应用程序定义有效的无服务器策略。
迪克沙·夏尔马 是 AWS 的解决方案架构师和机器学习专家。她帮助客户加速云采用,特别是在机器学习和无服务器技术领域。 Diksha 部署了定制的概念验证,向客户展示 AWS 在应对其业务和 IT 挑战方面的价值。她帮助客户了解 AWS,并与客户一起构建他们想要的解决方案。
吠陀拉曼 是位于马里兰州的机器学习高级专家解决方案架构师。 Veda 与客户合作,帮助他们构建高效、安全和可扩展的机器学习应用程序。 Veda 有兴趣帮助客户利用无服务器技术进行机器学习。
乔什·卡恩 是无服务器领域的全球技术领导者和首席解决方案架构师。他领导着 AWS 全球无服务器专家社区,帮助各种规模的客户(从初创企业到全球最大的企业)有效地使用 AWS 无服务器技术。