在 Amazon SageMaker 中使用粘性会话路由构建超低延迟的多模态生成 AI 应用 机器学
使用 Amazon SageMaker 构建超低延迟的多模态生成 AI 应用
作者 Harish Rao Alan Tan Deepika Damojipurapu Lingran Xia Li Ning Frank Liu Naman Nandan 和 Raghu Ramesha日期 2024年9月13日来源 Amazon SageMaker,人工智能,生成 AI永久链接评论
关键要点
Amazon SageMaker 是一个全面管理的机器学习服务,允许快速构建、训练和部署生成 AI 模型。多模态生成 AI 应用的兴起需要处理图像、视频和音频。Sticky Session Routing 功能通过重用先前处理的信息,显著提升用户体验和应用性能。我们可以使用 TorchServe 作为模型服务器,缓存多媒体数据以加快响应时间。Amazon SageMaker 是一个完全管理的机器学习ML服务,数据科学家和开发者可以快速而自信地构建、训练和部署 ML 模型到生产准备的托管环境中。它提供了丰富的 ML 基础设施和模型部署选项,帮助满足各种需求,同时帮助扩展模型部署、有效管理模型并减少操作负担。
随着大型语言模型LLMs快速演变,这些系统已经能够处理文本之外的多种输入媒体,包括图像、视频和音频,开启了多模态模型的时代。多模态是一种利用多种数据形式例如文本、音频或图像的深度学习。多模态推理带来了大量数据传输开销和响应时间慢的挑战。例如,在典型的聊天机器人场景中,用户通过提供多媒体文件或链接启动对话,然后进行问答或查询信息。然而,随每次请求传输大文件会极大地影响响应时间和延迟,进而影响用户体验。例如,发送一个 500 MB 的输入文件可能会增加 35 秒的响应时间,这对于希望提供无缝交互的聊天机器人而言是不可接受的。
我们宣布 Amazon SageMaker Inference 中推出 Sticky Session Routing 功能,帮助用户通过重用之前处理的信息来改善生成 AI 应用的性能和用户体验。Amazon SageMaker 使得部署 ML 模型包括基础模型并以最佳价格性能进行推理请求变得更加简单。
启用 Sticky Session Routing 后,同一会话的所有请求均能被路由到相同的实例,这样您的 ML 应用可以重用之前处理的信息,从而降低延迟并改善用户体验。这在需要大数据负载或进行无缝交互体验时尤为重要。通过利用您之前的推理请求,您现在可以利用这一功能构建具有状态感知的 AI 应用。为此,您需在第一次请求时创建一个会话 ID,然后使用该会话 ID 指示 SageMaker 应路由所有后续请求到同一实例。会话也可以在完成时删除,释放资源供新会话使用。
免费加速器安卓版
该功能在 SageMaker 可用的所有 AWS 区域均可使用。如需了解有关在 SageMaker 上部署模型的更多信息,请参见 Amazon SageMaker 模型部署。有关该功能的更多信息,请参考 与 Amazon SageMaker 模型的有状态会话。
解决方案概述
SageMaker 简化了模型的部署,使得聊天机器人和其他应用能够轻松使用其多模态能力。SageMaker 实现了一种强大的解决方案,结合了两种关键策略:SageMaker 中的 Sticky Session Routing 与负载均衡,以及 TorchServe 中的有状态会话。Sticky Session Routing 确保来自同一用户会话的所有请求由同一 SageMaker 服务器实例提供服务。TorchServe 中的有状态会话则缓存来自会话启动请求的多媒体数据,从而减少在 GPU 中装载和卸载数据的次数,以提高响应时间。
请求处理流程
让我们来看看当客户端在 SageMaker 上启动 Sticky Session 时的事件序列:
在第一次请求中,您调用 Boto3 SageMaker 运行时的 invokeendpoint 并在头部传入 sessionid=NEWSESSION,以及表示开启会话请求类型的负载。SageMaker 创建一个新会话并存储会话 ID。路由器会在模型服务器本例中为 TorchServe中初始化一个开放会话,并向客户端返回 200 OK,以及会话 ID 和生存时间TTL。
在需要使用同一会话进行后续操作时,您将会话 ID 作为一部分发送至 invokeendpoint 调用,从而允许 SageMaker 将后续所有请求路由到同一模型服务器实例。
为关闭或删除会话,您可以使用 invokeendpoint 并传入表明关闭会话请求的负载和会话 ID。SageMaker 路由器首先会检查会话是否存在。如果存在,路由器将调用模型服务器以关闭会话,返回 200 OK 并带有会话 ID;如果会话 ID 不存在,则返回 400 响应。
接下来,我们将通过一个示例,展示如何在 SageMaker 中使用 Sticky Routing 来实现有状态的模型推理。本例中使用的是 LLaVA Large Language and Vision Assistant 模型。LLaVA 是一个多模态模型,能够接收图像和文本提示。
我们使用 LLaVA 上传图像,然后询问有关该图像的问题,而无需为每次请求重新发送图像。图像缓存于 GPU 内存中,而不是 CPU 内存中,因此我们无需在每次调用时承受将图像从 CPU 内存移动到 GPU 内存的延迟。
部署 LLaVa 模型的主要步骤
以下是部署 LLaVa 模型的主要步骤。此部分概念化介绍步骤,以便您在后面具体实现时能更好地理解整体部署工作流程。
构建 TorchServe Docker 容器并推送至 Amazon ECR第一步是构建一个 TorchServe Docker 容器,并将其推送至 Amazon Elastic Container RegistryAmazon ECR。由于我们使用的是自定义模型,因此采用 自带容器 方法。我们使用其中一个 AWS 提供的深度学习容器 作为基础容器,具体为 pytorchinference230gpupy311cu121ubuntu2004sagemaker。
构建 TorchServe 模型工件并上传至 Amazon S3我们使用 torchmodelarchiver 收集所有工件,如 自定义处理程序 、LLaVa 模型代码、请求和响应的数据类型、模型配置、预测 API 和其他工具。然后,我们将模型工件上传至 Amazon Simple Storage ServiceAmazon S3。
创建 SageMaker 端点要创建 SageMaker 端点,请完成以下步骤:
使用 SageMaker Python SDK 中的 Model 类创建模型,并指定之前上传 TorchServe 模型工件的 S3 桶以及创建的 Docker 容器的 imageuri。SageMaker 期望会话 ID 为 XAmznSageMakerSessionId 格式;您可以在环境属性中指定。
部署模型并创建端点时,要指定与负载相匹配的初始实例数量、实例类型和超时设置。
最后,通过传入端点名称来创建 SageMaker Python SDK Predictor。
运行推理完成以下步骤以运行推理:
使用开放会话发送要询问的图像 URL。这是一个我们为特定用例定义的自定义 API请见 inferenceapipy。您可以根据自己的业务用例定义输入、输出和 API。对于本用例,我们在开放会话时发送要询问的图像 URL。对于会话 ID 头部值,使用特殊字符串 NEWSESSION 表示这是会话的开始。自定义处理程序会下载图像,将其转换为张量,并将其缓存到 GPU 内存中。我们之所以这样做,是因为我们有访问 LLaVa 源代码的权限;我们还可以修改 LLaVa 模型中的原始 predictpy 文件,以接受张量而不是 PIL 图像。通过将张量缓存在 GPU 中,我们节省了推理时间,因为无需在每次调用时都将图像从 CPU 内存移动到 GPU 内存。如果您没有访问模型源代码的权限,则必须在 CPU 内存中缓存图像。有关此源代码,请参见 inferenceapipy。开放会话 API 调用返回一个会话 ID,您将在本会话中的后续调用中使用。
发送文本提示时,从开放会话中获取会话 ID,并将其与文本提示一起发送。inferenceapipy 会根据会话 ID 查找 GPU 中缓存的图像并用于推理。这将返回 LLaVa 模型的输出字符串。
重复前一步以发送不同的文本提示。
当所有文本提示完成后,使用会话 ID 关闭会话。
在 inferenceapipy 中,我们不再保留 GPU 中的图像缓存。
本示例的源代码在 GitHub 仓库 中。您可以使用以下 笔记本 运行这些步骤。
前提条件
请使用以下代码部署一个 AWS CloudFormation 堆栈,创建一个 AWS 身份与访问管理IAM角色,以部署 SageMaker 端点:
bashaws cloudformation createstack stackname smstatefulrole templatebody https//rawgithubusercontentcom/awssamples/sagemakergenaihostingexamples/main/LLava/torchserve/workspace/smroleyaml capabilities CAPABILITYNAMEDIAM region uswest2
创建 SageMaker 笔记本实例
完成以下步骤以创建 LLaVa 模型部署的笔记本实例:
在 SageMaker 控制台中,选择导航窗格中的 Notebooks。选择 Create notebook instance。在 Notebook instance settings 部分, 在 Additional configuration 下,选择至少 500 GB 的存储卷。在 Permissions and encryption 部分,选择使用现有 IAM 角色,并选择在前提条件中创建的角色smstatefulrolexxx。您可以在 AWS CloudFormation 控制台的 Resources 标签中获取角色的完整名称,位于堆栈 smstatefulrole 中。
在 Git repositories 部分,输入 Git repository URL 为 https//githubcom/awssamples/sagemakergenaihostingexamplesgit。选择 Create notebook instance。运行笔记本
笔记本准备好后,请完成以下步骤:
在 SageMaker 控制台中,选择导航窗格中的 Notebooks。选择新实例的 Open JupyterLab。在 JupyterLab 中,通过文件浏览器导航至 LLava。导航到 torchserve /workspace / 并打开 notebook llavastatefuldeployinferipynb。运行笔记本。/buildandpushsh 脚本的运行时间大约为 30 分钟。您也可以在终端中运行 /buildandpushsh 脚本,以获得更好的反馈。请记住输入参数,并确保您在正确的目录下sagemakergenaihostingexamples/LLava/torchserve/workspace。
modeldeploy() 步骤的完成也需要 2030 分钟。
完成后,运行最后的清理单元。此外,删除 SageMaker 笔记本实例。故障排除
当您运行 /buildandpushsh 时,可能会遇到如下错误:
bash/buildandpushsh line 48 docker command not found
这意味着您没有使用 SageMaker 笔记本,可能在使用 Amazon SageMaker Studio。SageMaker Studio 默认未安装 Docker。
请查看屏幕截图以了解如何打开 Amazon SageMaker Notebook。
结论
在本篇文章中,我们解释了 Amazon SageMaker 中新的 Sticky Routing 功能如何实现超低延迟,并提升用户在服务多模态模型时的体验。您可以使用提供的 notebook 为您的多模态模型创建有状态端点,以增强用户体验。
尝试这一解决方案以适配您的用例,并在评论中告诉我们您的反馈和问题。
关于作者
Harish Rao 是 AWS 的高级解决方案架构师,专注于大规模分布式 AI 训练和推理。他帮助客户利用 AI 的力量来推动创新和解决复杂挑战。业余时间,Harish 喜欢户外活动,享受徒步旅行的宁静、壁球的强度和正念练习带来的心灵清晰。
Raghu Ramesha 是 Amazon SageMaker 服务团队的高级生成 AI/ML 解决方案架构师。他专注于帮助客户以规模构建、部署和迁移 ML 生产工作负载至 SageMaker。他专精于机器学习、AI 和计算机视觉领域,并持有德州大学达拉斯分校计算机科学硕士学位。闲暇时间他享受旅行和摄影。
Lingran Xia 是 AWS 的软件开发工程师。他目前专注于改善机器学习模型的推理性能。闲暇时,他喜欢旅行和滑雪。
Naman Nandan 是 AWS 的软件开发工程师,专注于使用 TorchServe 在 SageMaker 上支持大规模 AI/ML 推理工作负载。闲暇时,他喜欢打网球和徒步旅行。
Li Ning
宣布 QuickSight Arena:免费探索 Amazon QuickSight 并展示您的仪表
介绍 QuickSight Arena:免费探索 Amazon QuickSight 并展示您的仪表盘作者:Arun Santhosh 和 Kristin Mandia 日期:2024年1月19日关键要点在这篇文章中,我们将介绍 QuickSight Arena,这是一个嵌入式的 Amazon Qu...
从 AWS 使用 Amazon Q Business 推导出有意义的可操作运营洞察 机器学习博客
利用 Amazon Q 商业智慧从 AWS 得到有意义的运营洞察重要观点本文介绍如何利用 Amazon Q 商业 和其他 AWS 资源,如 AWS Support、AWS Trusted Advisor 和 AWS Health 数据,从 AWS 中获取具体且可实施的运营洞察。这些洞察基于常见模式、...