本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
部署模型进行实时推理
重要
允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker资源的自定义 IAM 策略还必须授予向这些资源添加标签的权限。需要向资源添加标签的权限,因为 Studio 和 Studio Classic 会自动标记他们创建的任何资源。如果 IAM 策略允许 Studio 和 Studio Classic 创建资源但不允许标记,则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息,请参阅 提供为资源添加标签 SageMaker的权限。
AWS 适用于亚马逊的托管政策 SageMaker授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。
使用 SageMaker 托管服务部署模型有多种选择。您可以使用 SageMaker Studio 以交互方式部署模型。或者,你可以使用 SDK(例如 Python AWS SDK 或 SageMaker Python SDK for Boto3),以编程方式部署模型。您也可以使用进行部署 AWS CLI。
开始前的准备工作
在部署 SageMaker 模型之前,请找到并记下以下内容:
-
您的 AWS 区域 Amazon S3 存储桶所在的位置
-
存储模型构件的 Amazon S3 URI 路径
-
的 IAM 角色 SageMaker
-
包含推理代码的自定义镜像的 Docker Amazon ECR URI 注册表路径,或者支持和支持的内置 Docker 镜像的框架和版本 AWS
有关每个地图中 AWS 服务 可用的列表 AWS 区域,请参阅区域地图和边缘网络
重要
存储模型构件的 Amazon S3 存储桶必须与您正在创建的模型 AWS 区域 相同。
与多个模型共享资源利用率
您可以使用 Amazon 将一个或多个模型部署到终端节点 SageMaker。当多个模型共享一个终端节点时,它们会共同使用托管在那里的资源,例如机器学习计算实例、CPU 和加速器。将多个模型部署到一个端点的最灵活方法是将每个模型定义为推理组件。
推理组件
推理组件是一个 SageMaker 托管对象,可用于将模型部署到终端节点。在推理组件设置中,您可以指定模型、端点以及模型如何利用端点托管的资源。要指定模型,可以指定 SageMaker 模型对象,也可以直接指定模型工件和图像。
在设置中,您可以通过定制向模型分配所需的 CPU 内核、加速器和内存的方式来优化资源利用率。您可以将多个推理组件部署到一个终端节点,其中每个推理组件都包含一个模型以及该模型所需的资源利用率。
部署推理组件后,您可以在 SageMaker API 中使用 InvokeEndpoint 操作时直接调用关联的模型。
推理组件具有以下优点:
- 弹性
-
推理组件将托管模型的详细信息与端点本身分离。这样可以更灵活地控制模型的托管和使用端点提供服务的方式。您可以在同一个基础架构上托管多个模型,也可以根据需要在端点中添加或删除模型。您可以单独更新每个模型。
- 可扩展性
-
您可以指定要托管每个模型的副本数量,也可以设置最小副本数,以确保模型加载的数量与满足请求所需的数量相同。您可以将任何推理组件副本缩小到零,这为另一个副本腾出空间进行扩展。
SageMaker 使用以下方法部署模型时,将其打包为推理组件:
-
SageMaker 经典工作室。
-
用于部署模型对象的 SageMaker Python SDK(将终端节点类型设置为其中
EndpointType.INFERENCE_COMPONENT_BASED
)。 -
用于定义部署 AWS SDK for Python (Boto3) 到终端节点的
InferenceComponent
对象。
使用 SageMaker Studio 部署模型
完成以下步骤,通过 SageMaker Studio 以交互方式创建和部署模型。有关 Studio 的更多信息,请参阅 Studio 文档。有关各种部署场景的更多演练,请参阅博客 Package 并使用 Amazon 轻松部署经典机器学习模型和 LLM SageMaker — 第 2 部分
准备您的工件和权限
在 SageMaker Studio 中创建模型之前,请先完成本节。
您可以通过两种方式在 Studio 中携带工件和创建模型:
-
您可以带上预先打包的
tar.gz
存档,其中应包括您的模型工件、任何自定义推理代码以及文件中列出的任何依赖项。requirements.txt
-
SageMaker 可以为你打包你的神器。您只需要将原始模型工件和任何依赖项带到
requirements.txt
文件中, SageMaker 就可以为您提供默认的推理代码(或者您可以使用自己的自定义推理代码覆盖默认代码)。 SageMaker以下框架支持此选项: PyTorch,xgBoost。
除了带上您的模型、您的 AWS Identity and Access Management (IAM) 角色和 Docker 容器(或 SageMaker 具有预构建容器的所需框架和版本)外,您还必须授予通过 SageMaker Studio 创建和部署模型的权限。
您应该将AmazonSageMakerFull访问策略附加到您的 IAM 角色,以便您可以访问 SageMaker 和其他相关服务。要在 Studio 中查看实例类型的价格,您还必须附加AWS PriceListServiceFull访问策略(或者如果您不想附加整个策略,更具体地说,就是pricing:GetProducts
操作)。
如果您在创建模型时选择上传模型项目(或上传示例负载文件以获取推理建议),则必须创建 Amazon S3 存储桶。存储桶名称必须以单词SageMaker
为前缀。也可以使用其他大写 SageMaker 形式:Sagemaker
或。sagemaker
我们建议您使用存储桶命名惯例sagemaker-{
。此存储桶用于存储您上传的项目。Region
}-{accountID
}
创建存储桶后,将以下 CORS(跨源资源共享)策略附加到存储桶:
[ { "AllowedHeaders": ["*"], "ExposeHeaders": ["Etag"], "AllowedMethods": ["PUT", "POST"], "AllowedOrigins": ['https://*.sagemaker.aws'], } ]
您可以使用以下任何一种方法将 CORS 策略附加到 Amazon S3 存储桶:
-
通过 Amazon S3 控制台中的编辑跨源资源共享 (CORS)
页面 -
使用 Amazon S3 API PutBucketC ors
-
使用 put-bucket-cors AWS CLI 命令:
aws s3api put-bucket-cors --bucket="..." --cors-configuration="..."
创建可部署模型
在此步骤中,您将 SageMaker 通过提供构件以及其他规范(例如所需的容器和框架、任何自定义推理代码和网络设置)来创建模型的可部署版本。
通过执行以下操作在 SageMaker Studio 中创建可部署模型:
-
打开 SageMaker Studio 应用程序。
-
在左侧导航窗格中,选择 模型。
-
选择可部署模型选项卡。
-
在可部署模型页面上,选择创建。
-
在创建可部署模型页面上,在模型名称字段中,输入模型的名称。
在 “创建可部署模型” 页面上还有几个部分可供您填写。
容器定义部分如下图所示:
对于 “容器定义” 部分,请执行以下操作:
-
对于容器类型,如果您想使用 SageMaker 托管容器,请选择预建容器;如果您有自己的容器,请选择自带容器。
-
如果您选择了预建容器,请选择要使用的容器框架、框架版本和硬件类型。
-
如果您选择自带容器,请输入 Amazon ECR 路径作为容器映像的 ECR 路径。
然后,填写 “Ar t ifacts” 部分,如下图所示:
对于 “工件” 部分,请执行以下操作:
-
如果你使用的是 SageMaker 支持打包模型工件(PyTorch 或 XGBoost)的框架之一,那么对于构件,你可以选择上传工件选项。使用此选项,您可以简单地指定原始模型工件、您拥有的任何自定义推理代码以及 requirements.txt 文件,然后 SageMaker 为您打包存档。执行以下操作:
-
对于构件,请选择上传构件以继续提供您的文件。否则,如果您已经有包含模型文件、推理代码和
requirements.txt
文件的tar.gz
档案,请选择 Input S3 URI 到预打包的项目。 -
如果您选择上传项目,则对于 S3 存储桶,请输入 Amazon S3 路径,指 SageMaker 向在为您打包项目后要存储的存储桶。然后,完成以下步骤。
-
对于上传模型工件,请上传您的模型文件。
-
对于推理代码,如果您想使用 SageMaker 提供推理服务的默认代码,请选择使用默认推理代码。否则,请选择上传自定义推理代码以使用您自己的推理代码。
-
对于 Upload requirements.txt,请上传一个列出您要在运行时安装的所有依赖项的文本文件。
-
-
如果您使用的框架不 SageMaker 支持打包模型工件,Studio 会向您显示预打包的构件选项,并且您必须提供所有已打包为
tar.gz
存档的构件。执行以下操作:-
对于预打包的项目,如果您已将
tar.gz
档案上传到 Amazon S3,请为预打包的模型工件选择输入 S3 URI。如果您想直接将存档上传到,请选择上传预先打包的模型工件。 SageMaker -
如果您为预打包的模型项目选择了输入 S3 URI,请输入 S3 URI 存档的 Amazon S 3 路径。否则,请从本地计算机上选择并上传档案。
-
下一部分是 “安全”,它看起来像以下屏幕截图:
对于 “安全” 部分,请执行以下操作:
-
对于 IAM 角色,请输入 IAM 角色的 ARN。
-
(可选)对于虚拟私有云 (VPC) P rivate Cloud,您可以选择一个 Amazon VPC 来存储您的模型配置和项目。
-
(可选)如果您想限制容器的互联网访问,请打开网络隔离开关。
最后,您可以选择填写 “高级选项” 部分,如下图所示:
(可选)对于 “高级选项” 部分,请执行以下操作:
-
如果您想在模型创建后对其运行 Amazon SageMaker Inference 推荐器作业,请打开自定义实例推荐开关。推理推荐器是一项功能,可为您提供推荐的实例类型,以优化推理性能和成本。在准备部署模型时,您可以查看这些实例建议。
-
在添加环境变量中,输入容器的环境变量作为键值对。
-
对于标签,将任何标签作为键值对输入。
-
完成模型和容器配置后,选择创建可部署模型。
现在 SageMaker Studio 中应该有一个可以部署的模型。
部署模型
最后,将您在上一步中配置的模型部署到 HTTPS 终端节点。您可以将单个模型或多个模型部署到端点。
模型和端点兼容性
在将模型部署到端点之前,模型和端点必须通过以下设置具有相同的值来兼容:
-
IAM 角色
-
Amazon VPC,包括其子网和安全组
-
网络隔离(启用或禁用)
Studio 禁止您通过以下方式将模型部署到不兼容的端点:
-
如果您尝试将模型部署到新的终端节点, SageMaker 请使用兼容的初始设置配置该端点。如果您通过更改这些设置而破坏兼容性,Studio 会显示警报并阻止您的部署。
-
如果您尝试部署到现有终端节点,但该终端节点不兼容,Studio 会显示警报并阻止您的部署。
-
如果您尝试向部署中添加多个模型,Studio 会阻止您部署彼此不兼容的模型。
当 Studio 显示有关型号和端点不兼容的警报时,您可以在警报中选择查看详细信息以查看哪些设置不兼容。
部署模型的一种方法是在 Studio 中执行以下操作:
-
打开 SageMaker Studio 应用程序。
-
在左侧导航窗格中,选择 模型。
-
在模型页面上,从模型列表中选择一个或多个 SageMaker 模型。
-
选择部署。
-
对于端点名称,打开下拉菜单。您可以选择现有端点,也可以创建部署模型的新端点。
-
对于实例类型,选择要用于终端节点的实例类型。如果您之前为模型运行过推理推荐器作业,则推荐的实例类型将显示在 “推荐” 标题下的列表中。否则,您将看到一些可能适合您的模型的潜在实例。
的实例类型兼容性 JumpStart
如果您正在部署 JumpStart 模型,Studio 仅显示该模型支持的实例类型。
-
在初始实例数中,输入您要为终端节点配置的初始实例数。
-
对于最大实例数,请指定终端节点在向上扩展以适应流量增加时可以配置的最大实例数。
-
如果您要部署的模型是模型中心中最常用的 JumpStart LLM 之一,则在实例类型和实例计数字段之后会显示替代配置选项。
对于最受欢迎的 JumpStart LLM, AWS 有预先基准测试的实例类型,可以针对成本或性能进行优化。这些数据可以帮助您决定使用哪种实例类型来部署 LLM。选择 “备用配置”,打开一个包含预先基准测试数据的对话框。面板如下图所示:
在 “备用配置” 框中,执行以下操作:
-
选择一个实例类型。您可以选择 “每小时成本” 或 “最佳性能”,查看针对指定型号优化成本或性能的实例类型。您也可以选择 “其他支持的实例”,查看与该 JumpStart 模型兼容的其他实例类型的列表。请注意,在此处选择实例类型会覆盖先前在步骤 6 中指定的任何实例选择。
-
(可选)打开 “自定义所选配置” 开关以指定最大总令牌数(您要允许的最大令牌数,即您的输入令牌和模型生成的输出的总和)、最大输入令牌长度(允许每个请求输入的最大令牌数)和最大并发请求数(模型一次可以处理的最大请求数)。
-
选择选择以确认您的实例类型和配置设置。
-
-
模型字段应该已经填充了您正在部署的一个或多个模型的名称。您可以选择添加模型以向部署中添加更多模型。对于您添加的每个模型,请填写以下字段:
-
在 “CPU 核心数” 中,输入您要专用于模型使用的 CPU 内核。
-
在 “最小副本数” 中,输入您希望在任何给定时间在端点上托管的最小模型副本数。
-
在最小 CPU 内存 (MB) 中,输入模型所需的最小内存量(以 MB 为单位)。
-
在 “最大 CPU 内存 (MB)” 中,输入您希望允许模型使用的最大内存量(以 MB 为单位)。
-
-
(可选)对于 “高级” 选项,请执行以下操作:
-
对于 IAM 角色,请使用默认 SageMaker IAM 执行角色或指定您自己的具有所需权限的角色。请注意,此 IAM 角色必须与您在创建可部署模型时指定的角色相同。
-
对于虚拟私有云 (VPC),您可以指定要在其中托管终端节点的 VPC。
-
对于加密 KMS 密 AWS KMS 钥,选择一个密钥来加密连接到托管终端节点的 ML 计算实例的存储卷上的数据。
-
打开 “启用网络隔离” 开关,以限制容器的互联网访问。
-
在超时配置中,在模型数据下载超时(秒)和容器启动运行状况检查超时(秒)字段中输入值。这些值分别决定了 SageMaker 允许将模型下载到容器和启动容器的最长时间。
-
对于标签,将任何标签作为键值对输入。
注意
SageMaker 使用与您正在部署的模型兼容的初始值配置 IAM 角色、VPC 和网络隔离设置。如果您通过更改这些设置而破坏兼容性,Studio 会显示警报并阻止您的部署。
-
配置完选项后,该页面应如以下屏幕截图所示。
配置部署后,选择 Deploy 以创建终端节点并部署您的模型。
使用 Python 软件开发工具包部署模型
使用 SageMaker Python SDK,您可以通过两种方式构建模型。第一种方法是从Model
或ModelBuilder
类中创建模型对象。如果您使用Model
类来创建Model
对象,则需要指定模型包或推理代码(取决于您的模型服务器)、用于处理客户端和服务器之间数据的序列化和反序列化的脚本,以及要上传到 Amazon S3 以供使用的任何依赖项。构建模型的第二种方法是使用您ModelBuilder
为其提供模型工件或推理代码的模型。 ModelBuilder
自动捕获您的依赖关系,推断所需的序列化和反序列化函数,并打包依赖关系以创建对象。Model
有关 ModelBuilder
的更多信息,请参阅使用 Amazon SageMaker 创建模型 ModelBuilder。
以下部分介绍了创建模型和部署模型对象的两种方法。
设置
以下示例为模型部署过程做准备。他们导入必要的库并定义用于定位模型工件的 S3 URL。
例 模型工件网址
以下代码构建了一个示例 Amazon S3 网址。该 URL 可在 Amazon S3 存储桶中找到预训练模型的模型构件。
# Create a variable w/ the model S3 URL # The name of your S3 bucket: s3_bucket = "DOC-EXAMPLE-BUCKET" # The directory within your S3 bucket your model is stored in: bucket_prefix = "
sagemaker/model/path
" # The file name of your model artifact: model_filename = "my-model-artifact.tar.gz
" # Relative S3 path: model_s3_key = f"{bucket_prefix}/"+model_filename # Combine bucket name, model file name, and relate S3 path to create S3 model URL: model_url = f"s3://{s3_bucket}/{model_s3_key}"
完整的 Amazon S3 网址存储在变量中model_url
,该变量将在以下示例中使用。
概述
您可以通过多种方式使用 SageMaker Python SDK 或适用于 Python 的 SDK (Boto3) 部署模型。以下各节总结了您为几种可能的方法所完成的步骤。以下示例演示了这些步骤。
配置
以下示例配置将模型部署到终端节点所需的资源。
部署
以下示例将模型部署到端点。
使用部署模型 AWS CLI
您可以使用将模型部署到终端节点 AWS CLI。
概述
使用部署模型时 AWS CLI,无论是否使用推理组件,都可以部署模型。以下各节总结了您为这两种方法运行的命令。以下示例演示了这些命令。
配置
以下示例配置将模型部署到终端节点所需的资源。
部署
以下示例将模型部署到端点。