调用实时端点 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

调用实时端点

使用 SageMaker 托管服务部署模型后,您可以通过向该终端节点发送测试数据来测试您的模型。您可以使用 Amazon SageMaker StudioAmazon CLI、或Amazon软件开发工具包测试您的终端节点。

使用亚马逊 SageMaker 工作室测试您的终端节点

将模型部署到终端节点(参见创建您的终端节点并部署您的模型)后,您可以使用 Amazon SageMaker Studio 检查该终端节点。

注意

注意: SageMaker 仅支持使用 Amazon SageMaker Studio 对实时终端节点进行终端节点测试。

  1. 启动亚马逊 SageMaker 工作室。

  2. 选择左侧边栏上的SageMaker 组件和注册表图标。

  3. 从下拉列表中选择终端节点

  4. 按名称搜索端点的并双击端点的名称。SageMaker 资源面板中列出的端点名称是在部署模型时定义的。可以通过多种方式部署模型:

    • SageMaker Python 开发工具包模型类sagemaker.model.Model.deploy

    • Amazon SDK for Python (Boto3) SageMaker 服务客户端 API CreateEndpoint

    • 控制 SageMaker 台。在左侧面板中选择推理,然后选择端点配置。在 “端点名称” 字段中提供端点名称

  5. (可选)您可以选择提供要将请求发送到的自定义 URL。在配置端点 URL 和标头字段中,提供托管模型的 URL。如果您使用 SageMaker 终端节点,请将此字段留空。您也可以选择添加多个键值标头,以将其他信息传递给推理请求。

  6. Studio 工作区中将填充一个新选项卡。选择 “测试推理” 选项卡。

  7. 通过提供 JSON 格式的示例数据,向您的终端节点发送请求。使用 JSON 编辑器向您的终端节点提交请求。

  8. 选择 “发送请求”。

  9. 当您发送请求时,控制台右侧会出现 Inference 输出卡

卡片顶部将显示发送到终端节点的请求类型(目前仅接受 JSON)。卡片中有四个主要字段:StatusExecution LengthRequest Time、和Result Time

  • 状态:显示请求状态。状态有三种类型:

    • Complete-如果请求成功,将显示状态Complete,执行时长将通过跟踪请求时间来计算。

    • Failed-如果请求因任何原因失败。失败响应将出现在 “失败原因” 手风琴中。

    • Pending-推理请求待处理时,将出现一个旋转的圆形图标。

  • 执行长度:调用所花费的时间(结束时间减去开始时间),以毫秒为单位。

  • 请求时间:自发送请求以来已经过去了多少分钟。

  • 结果时间:自返回结果以来已经过去了多少分钟。

使用Amazon SDK 测试您的终端节点

将模型部署到终端节点(参见创建您的终端节点并部署您的模型)后,您可以使用其中一个Amazon SDKInvokeEndpoint 通过 API 检查您的终端节点。如果调用成功, SageMaker 将返回 HTTP 200 响应。您可以索引返回的响应字典对象,以了解有关响应标头的更多信息。有关更多信息,请参阅InvokeEndpoint

以下内容演示了InvokeEndpoint如何使用来检查终端节点的状态Amazon SDK for Python (Boto3)。输入端点的名称。这是您在创建终端节点EndpointName时指定的名称CreateEndpoint

在 Body 字段中提供 SageMaker 要传递给模型的输入数据。数据的格式必须与用于训练的格式相同。

import boto3 # Create a low-level client representing Amazon SageMaker Runtime sagemaker_runtime = boto3.client("sagemaker-runtime", region_name=<aws_region>) # The name of the endpoint. The name must be unique within an Amazon Region in your Amazon account. endpoint_name='<endpoint-name>' # After you deploy a model into production using SageMaker hosting # services, your client applications use this API to get inferences # from the model hosted at the specified endpoint. response = sagemaker_runtime.invoke_endpoint( EndpointName=endpoint_name, Body=bytes('{"features": ["This is great!"]}', 'utf-8') # Replace with your own data. ) # Optional - Print the response body and decode it so it is human read-able. print(response['Body'].read().decode('utf-8'))

获得响应对象(在上述示例中,它存储在名为的变量中response)后,就可以对其进行索引以检查 HTTP 状态、已部署模型的名称 (InvokedProductionVariant) 和其他字段。

后续代码片段打印出HTTPStatusCode存储在response变量中的内容:

print(response["HTTPStatusCode"])

有关更多信息,请参见InvokeEndpoint《 SageMaker API 参考指南》。

使用测试您的终端节点Amazon CLI

以下内容演示了InvokeEndpoint如何使用来检查终端节点的状态Amazon CLI。输入端点的名称。这是您在创建终端节点EndpointName时指定的名称CreateEndpoint

在 Body 字段中提供 SageMaker 要传递给模型的输入数据。数据的格式必须与用于训练的格式相同。示例代码模板显示如何向您的终端节点发送二进制数据。

aws sagemaker-runtime invoke-endpoint \ --endpoint-name endpoint_name \ --body fileb://$file_name \ output_file.txt

有关在将文件内容传递给的参数fileb://时何时使用file:// over 的更多信息Amazon CLI,请参阅本地文件参数的最佳实践

有关可以传递的其他参数的更多信息,请参阅invoke-endpointAmazon CLI命令参考指南》。

如果上面的调用显示了如下代码片段,则表示命令已成功执行。否则,请检查输入负载的格式是否正确。

{ "ContentType": "<content_type>; charset=utf-8", "InvokedProductionVariant": "<Variant>" }

通过检查文件输出文件来查看调用的输出(在本示例output_file.txt中)。

more output_file.txt