对于数据科学家来说,将机器学习 (ML) 模型从概念验证转移到生产通常会带来重大挑战。 主要挑战之一是将性能良好的本地训练模型部署到云中,以便在其他应用程序中进行推理和使用。 管理该流程可能很麻烦,但使用正确的工具,您可以显着减少所需的工作量。
Amazon SageMaker 推理于 2022 年 XNUMX 月全面推出,让您可以轻松地将 ML 模型部署到生产中以进行大规模预测,提供多种 ML 基础设施和模型部署选项,帮助满足各种 ML 推理需求。 您可以使用 SageMaker 无服务器推理端点 适用于在流量激增之间有空闲期并且可以容忍冷启动的工作负载。 端点根据流量自动扩展,并消除选择和管理服务器的无差别繁重工作。 此外,您可以使用 AWS Lambda 使用您首选的开源框架直接公开您的模型并部署 ML 应用程序,事实证明这更加灵活且更具成本效益。
FastAPI 是一个现代的高性能 Web 框架,用于使用 Python 构建 API。 在使用 RESTful 微服务开发无服务器应用程序以及需要跨多个行业大规模 ML 推理的用例时,它脱颖而出。 它的易用性和内置功能(例如自动 API 文档)使其成为 ML 工程师部署高性能推理 API 的热门选择。 您可以使用 FastAPI 的开箱即用功能来定义和组织您的路由,以根据需要扩展和处理不断增长的业务逻辑,在本地进行测试并将其托管在 Lambda 上,然后通过单个 API 网关公开它,这使您能够将开源 Web 框架引入 Lambda,无需任何繁重的工作或重构您的代码。
本文向您展示如何通过使用 FastAPI、Docker、Lambda 和 将 ML 模型公开为端点来轻松部署和运行无服务器 ML 推理 Amazon API网关。 我们还向您展示如何使用自动化部署 AWS云开发套件 (AWS CDK)。
解决方案概述
下图显示了我们在本文中部署的解决方案的架构。
先决条件
您必须具备以下先决条件:
- 安装了Python3,以及
virtualenv
用于在 Python 中创建和管理虚拟环境 - 在您的系统上安装 aws-cdk v2 以便能够使用 AWS CDK CLI
- Docker 在本地计算机上安装并运行
测试是否安装了所有必需的软件:
- AWS命令行界面 需要 (AWS CLI)。 登录您的帐户并选择要部署解决方案的区域。
- 使用以下代码检查您的 Python 版本:
- 检查是否
virtualenv
安装用于在 Python 中创建和管理虚拟环境。 严格来说,这并不是一个硬性要求,但它会让你的生活更轻松,并有助于更轻松地理解这篇文章。 使用以下代码: - 检查是否安装了cdk。 这将用于部署我们的解决方案。
- 检查 Docker 是否已安装。 我们的解决方案将使您的模型可以通过 Docker 映像访问 Lambda。 为了在本地构建这个镜像,我们需要 Docker。
- 使用以下代码确保 Docker 已启动并正在运行:
如何使用 AWS CDK 构建 FastAPI 项目
我们在项目中使用以下目录结构(忽略一些在本文中并不重要的样板 AWS CDK 代码):
该目录如下 适用于 Python 的 AWS CDK 项目的推荐结构.
该存储库最重要的部分是 fastapi_model_serving
目录。 它包含定义 AWS CDK 堆栈的代码以及将用于模型服务的资源。
fastapi_model_serving
目录包含 model_endpoint
子目录,其中包含构成无服务器端点所需的所有资产,即用于构建 Lambda 将使用的 Docker 映像的 Dockerfile、使用 FastAPI 处理推理请求并将其路由到正确端点的 Lambda 函数代码以及模型我们想要部署的模型的工件。 model_endpoint
还包含以下内容:
Docker
– 该子目录包含以下内容:Dockerfile
– 这用于为 Lambda 函数构建映像,并将所有工件(Lambda 函数代码、模型工件等)放置在正确的位置,以便可以毫无问题地使用它们。serving.api.tar.gz
– 这是一个 tarball,其中包含构建 Docker 映像所需的运行时文件夹中的所有资产。 我们讨论如何创建.tar.gz
稍后在本文中归档。runtime
– 该子目录包含以下内容:serving_api
– 在requirements.txt 文件中指定的Lambda 函数及其依赖项的代码。custom_lambda_utils
– 这包括一个推理脚本,该脚本加载必要的模型工件,以便模型可以传递到serving_api
然后将其公开为端点。
此外,我们还有模板目录,它提供了文件夹结构和文件的模板,您可以在其中按照我们之前介绍的示例定义自定义代码和 API。 模板目录包含可用于创建新 Lambda 函数的虚拟代码:
dummy
– 包含使用Python运行时实现普通Lambda函数结构的代码api
– 包含实现 Lambda 函数的代码,该函数将 FastAPI 端点包装在现有 API 网关周围
部署解决方案
默认情况下,代码部署在 eu-west-1 区域内。 如果要更改区域,可以更改 DEPLOYMENT_REGION 上下文变量 cdk.json
文件中。
但请记住,该解决方案尝试在 arm64 架构之上部署 Lambda 函数,并且此功能可能并非在所有区域都可用。 在这种情况下,您需要更改架构中的参数 fastapi_model_serving_stack.py
文件以及 Docker 目录内 Dockerfile 的第一行,以在 x86 架构上托管此解决方案。
要部署解决方案,请完成以下步骤:
- 运行以下命令克隆 GitHub 存储库:
git clone https://github.com/aws-samples/lambda-serverless-inference-fastapi
因为我们想要展示该解决方案可以使用您在本地训练的模型工件,所以我们包含一个预训练的模型工件示例 蒸馏器 Hugging Face 模型中心上的模型,用于回答问题serving_api.tar.gz
文件。 下载时间可能需要大约 3-5 分钟。 现在,我们来设置环境。 - 下载将从 Hugging Face 模型中心部署的预训练模型到
./model_endpoint/runtime/serving_api/custom_lambda_utils/model_artifacts
目录。 它还创建一个虚拟环境并安装所需的所有依赖项。 您只需运行此命令一次:make prep
。 此命令可能需要大约 5 分钟(取决于您的互联网带宽),因为它需要下载模型工件。 - 将模型工件打包在
.tar.gz
将在 AWS CDK 堆栈中构建的 Docker 映像内部使用的存档。 每当您对模型工件或 API 本身进行更改时,您都需要运行此代码,以便始终打包服务端点的最新版本:make package_model
。 文物都已就位。 现在我们可以将 AWS CDK 堆栈部署到您的 AWS 账户。 - 如果这是您第一次将 AWS CDK 应用程序部署到环境(账户 + 区域组合)中,请运行 cdk bootstrap:
该堆栈包含工具包操作所需的资源。 例如,堆栈包括一个 Amazon Simple Storage Service (Amazon S3) 存储桶,用于在部署过程中存储模板和资产。
由于我们在此 AWS CDK 部署中本地构建 Docker 映像,因此需要确保 Docker 守护程序正在运行,然后才能通过 AWS CDK CLI 部署此堆栈。
- 要检查 Docker 守护进程是否正在您的系统上运行,请使用以下命令:
如果您没有收到错误消息,则应该准备好部署解决方案。
- 使用以下命令部署解决方案:
由于构建和推送 Docker 映像,此步骤可能需要大约 5-10 分钟。
故障排除
如果您是Mac用户,登录时可能会遇到错误 Amazon Elastic Container注册 (Amazon ECR) 使用 Docker 登录,例如 Error saving credentials ... not implemented
。 例如:
在 AWS CDK 内的 Docker 容器之上使用 Lambda 之前,您可能需要更改 ~/docker/config.json
文件。 更具体地说,您可能必须更改 credsStore 参数 ~/.docker/config.json
到 osx 钥匙串。 这解决了 Mac 上的 Amazon ECR 登录问题。
运行实时推理
在你之后 AWS CloudFormation 堆栈部署成功,进入 输出 在 AWS CloudFormation 控制台上找到您的堆栈选项卡并打开终端节点 URL。 现在我们的模型可以通过端点 URL 访问,并且我们已准备好运行实时推理。
导航到 URL,查看是否可以看到“hello world”消息并添加 /docs
到该地址看看能否成功看到交互式swagger UI页面。 可能会有一些冷启动时间,因此您可能需要等待或刷新几次。
登录FastAPI swagger UI页面的登陆页面后,可以通过root运行 /
或者通过 /question
.
从 /
,您可以运行 API 并获取“hello world”消息。
从 /question
,您可以运行 API 并在我们为问答案例部署的模型上运行 ML 推理。 例如,我们使用的问题是我的车现在是什么颜色? 上下文是我的车曾经是蓝色的,但我漆成了红色。
当你选择 执行,根据给定的上下文,模型将通过响应来回答问题,如以下屏幕截图所示。
在响应正文中,您可以看到带有模型置信度得分的答案。 您还可以尝试其他示例或将 API 嵌入到现有应用程序中。
或者,您可以通过代码运行推理。 这是一个用 Python 编写的示例,使用 requests
图书馆:
该代码输出类似于以下内容的字符串:
如果您有兴趣了解有关在 AWS 上部署生成式 AI 和大型语言模型的更多信息,请查看此处:
清理
在存储库的根目录中,运行以下代码来清理资源:
结论
在这篇文章中,我们介绍了如何使用 Lambda 使用您首选的 Web 应用程序框架(例如 FastAPI)部署经过训练的 ML 模型。 我们提供了您可以部署的详细代码存储库,并且您可以灵活地切换到您处理的任何经过训练的模型工件。 性能可能取决于您如何实现和部署模型。
欢迎您亲自尝试,我们很高兴听到您的反馈!
作者简介
李婷宜 是来自 AWS 的企业解决方案架构师,总部位于瑞典斯德哥尔摩,为北欧客户提供支持。 她喜欢帮助客户构建、设计和开发云优化的基础设施解决方案。 她专注于人工智能和机器学习,并有兴趣在人工智能/机器学习应用程序中为客户提供智能。 闲暇之余,她也是一名兼职插画家,写小说、弹钢琴。
德米尔卡托维奇 是来自瑞士苏黎世 AWS 的机器学习工程师。 他与客户互动并帮助他们实现可扩展且功能齐全的机器学习应用程序。 他热衷于为客户构建和生产机器学习应用程序,并始终热衷于探索 AI/ML 领域的新趋势和尖端技术。
- SEO 支持的内容和 PR 分发。 今天得到放大。
- PlatoData.Network 垂直生成人工智能。 赋予自己力量。 访问这里。
- 柏拉图爱流。 Web3 智能。 知识放大。 访问这里。
- 柏拉图ESG。 汽车/电动汽车, 碳, 清洁科技, 能源, 环境, 太阳能, 废物管理。 访问这里。
- 块偏移量。 现代化环境抵消所有权。 访问这里。
- Sumber: https://aws.amazon.com/blogs/machine-learning/deploy-a-serverless-ml-inference-endpoint-of-large-language-models-using-fastapi-aws-lambda-and-aws-cdk/
- :是
- :不是
- :在哪里
- $UP
- 1
- 10
- 100
- 13
- 2022
- 7
- 9
- a
- Able
- 关于
- 无障碍
- 账号管理
- 横过
- 加
- 另外
- 地址
- AI
- AI / ML
- 所有类型
- 允许
- 沿
- 还
- 时刻
- Amazon
- 亚马逊网络服务
- 其中包括
- an
- 和
- 回答
- 任何
- API
- APIs
- 应用
- 应用领域
- 应用领域
- 四月
- 架构
- 档案
- 保健
- 围绕
- AS
- 办公室文员:
- At
- 自动化
- 自动表
- 自动
- 可使用
- 远离
- AWS
- AWS CloudFormation
- AWS Lambda
- 后端
- 带宽
- 基于
- BE
- 因为
- before
- 之间
- 蓝色
- 身体
- 引导
- 带来
- 广阔
- 建立
- 建筑物
- 建
- 内建的
- 商业
- 但是
- by
- CAN
- 汽车
- 案件
- 例
- 挑战
- 挑战
- 更改
- 更改
- 查
- 选择
- 云端技术
- 码
- 代码
- 冷
- 颜色
- 组合
- 购买的订单均
- 完成
- 概念
- 信心
- 分享链接
- 地都
- 安慰
- 包含
- 容器
- 集装箱
- 包含
- 上下文
- 正确
- 经济有效
- 可以
- 创建信息图
- 创建
- 创造
- 资历
- 合作伙伴
- 定制
- 前沿
- data
- 默认
- 根据
- 部署
- 部署
- 部署
- 部署
- 设计
- 详细
- 发展
- 研发支持
- 直接
- 讨论
- 码头工人
- 文件
- 别
- 下载
- 两
- ,我们将参加
- 此前
- 缓解
- 更容易
- 容易
- 易
- 努力
- 嵌
- 授权
- 结束
- 端点
- 订婚
- 工程师
- 工程师
- 确保
- 企业
- 环境
- 环境中
- 错误
- 例子
- 例子
- 兴奋
- 执行
- 现有
- Exit 退出
- 实验
- 探索
- 面部彩妆
- 专栏
- 少数
- 文件
- 档
- 姓氏:
- 第一次
- 高度灵活
- 柔软
- 遵循
- 以下
- 如下
- 针对
- 骨架
- 止
- 功能
- 功能
- 功能
- 网关
- 通常
- 生成的
- 生成式人工智能
- 得到
- GitHub上
- 特定
- Go
- 去
- 成长
- 处理
- 硬
- 有
- he
- 听
- 重
- 举重
- 帮助
- 帮助
- 帮助
- 这里
- 相关信息
- 高性能
- 主持人
- 创新中心
- How To
- 但是
- HTML
- HTTP
- HTTPS
- 中心
- i
- 空闲
- if
- 图片
- 图片
- 实施
- 器物
- 重要
- in
- 其他
- 包括
- 行业
- 基础设施
- 内
- 安装
- 房源搜索
- 互动
- 有兴趣
- 网络
- 成
- 介绍
- 问题
- IT
- 它的
- 本身
- JSON
- 敏锐
- 会心
- 着陆
- 语言
- 大
- 后来
- 学习
- 自学资料库
- 生活
- 翻新
- 喜欢
- Line
- 负载
- 本地
- 当地
- 日志
- 记录
- 逻辑
- 登录
- MAC
- 机
- 机器学习
- 制成
- 主要
- 使
- 制作
- 管理
- 管理的
- 可能..
- 满足
- 的话
- 微服务
- 可能
- 介意
- 分钟
- ML
- 模型
- 模型
- 现代
- 更多
- 最先进的
- 移动
- 多
- 必须
- my
- 亦即
- 必要
- 需求
- 打印车票
- 需要
- 全新
- 现在
- of
- 经常
- on
- 一旦
- 一
- 仅由
- 打开
- 开放源码
- 操作
- 附加选项
- or
- 秩序
- 普通
- 其他名称
- 我们的
- 输出
- συσκευάζονται
- 页
- 参数
- 部分
- 通过
- 多情
- 性能
- 期
- 地方
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 扮演
- 热门
- 帖子
- 预测
- 首选
- 先决条件
- 礼物
- 过程
- 生产
- 项目
- 项目
- 证明
- 概念验证
- 证明
- 提供
- 提供
- 优
- 推动
- 蟒蛇
- 题
- 准备
- 实时的
- 红色
- 减少
- 地区
- 地区
- 知识库
- 要求
- 必须
- 需求
- 岗位要求
- 资源
- 响应
- 导致
- 保留
- 右
- 根
- 路线
- 路线
- 运行
- 运行
- sagemaker
- 保存
- 可扩展性
- 鳞片
- 科学家
- 范围
- 得分了
- 看到
- 选择
- 选择
- 无服务器
- 服务器
- 服务
- 特色服务
- 服务
- 集
- 她
- 应该
- 显示
- 展示
- 如图
- 作品
- 显著
- 显著
- 类似
- 简易
- 单
- So
- 软件
- 方案,
- 解决方案
- 解决
- 一些
- 发言
- 专门
- 特别是
- 指定
- 堆
- 看台
- 开始
- 启动
- Status
- 步
- 步骤
- 存储
- 商店
- 存储
- 串
- 结构体
- 顺利
- 这样
- 支持
- 瑞典
- 瑞士
- 系统
- 采取
- 任务
- 技术
- 模板
- 模板
- test
- 这
- 其
- 他们
- 然后
- 那里。
- 他们
- Free Introduction
- 通过
- 次
- 时
- 至
- 工具
- 最佳
- 交通
- 培训
- 熟练
- 趋势
- 尝试
- ui
- UNIX
- 跟上时代的
- 网址
- 使用
- 用过的
- 用户
- 使用
- 运用
- 版本
- 通过
- 在线会议
- 等待
- 想
- 是
- we
- 卷筒纸
- Web应用程序
- Web服务
- 欢迎进入
- 井
- 去
- 什么是
- 什么是
- ,尤其是
- 每当
- 是否
- 这
- WHO
- 将
- 也完全不需要
- 工作
- 世界
- 书面
- 完全
- 您一站式解决方案
- 你自己
- 和风网
- 苏黎世