托管部署运算符 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

托管部署运算符

托管部署运算符支持创建和删除端点,以及更新现有端点,以便实时推断。托管部署运算符通过在 SageMaker 中创建模型、终端配置和终端节点,将您指定的托管部署作业规范与 SageMaker 协调一致。您可以在 SageMaker 中了解有关 SageMaker 推理的更多信息CreateEndpoint API 文档.

配置主机部署资源

使用以下命令下载主机部署作业的示例 YAML 文件:

wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/samples/xgboost-mnist-hostingdeployment.yaml

这些区域有:xgboost-mnist-hostingdeployment.yaml文件具有以下组件,可根据需要进行编辑:

  • ProductionVariants. 生产变体是为单个模型提供服务的一组实例。SageMaker 根据设定的重量在所有生产变型之间进行负载平衡。

  • 模型. 模型是为模型提供服务所需的容器和执行角色 ARN。它至少需要一个容器。

  • 容器. 容器指定数据集和提供影像。如果您使用自己的自定义算法而非 SageMaker 提供的算法,则推理代码必须满足 SageMaker 要求。有关更多信息,请参阅 。将您自己的算法与 SageMaker 搭配使用.

创建主机部署

要创建主机部署,请使用kubectl应用文件hosting.yaml使用以下命令:

kubectl apply -f hosting.yaml

SageMaker 创建具有指定配置的终端节点。在终端节点生命周期内使用的 SageMaker 资源需要支付费用。删除终端节点后,您不会产生任何费用。

创建过程大约需要 10 分钟。

列出托管部署

要验证是否已创建主机部署,请使用以下命令:

kubectl get hostingdeployments

您的输出应与以下内容类似:

NAME STATUS SAGEMAKER-ENDPOINT-NAME host-xgboost Creating host-xgboost-def0e83e0d5f11eaaa450aSMLOGS

托管部署状态值

状态字段可以为以下几个值之一:

  • SynchronizingK8sJobWithSageMaker:操作员正在准备创建终端节点。

  • ReconcilingEndpoint:操作员正在创建、更新或删除终端节点资源。如果主机部署仍处于此状态,请使用kubectl describe以查看Additional字段中返回的子位置类型。

  • OutOfService:终端节点不可用于接收传入请求。

  • CreatingCreateEndpoint执行。

  • UpdatingUpdateEndpoint或者UpdateEndpointWeightsAndCapacities执行。

  • SystemUpdating:端点正在进行维护,在完成之前无法更新、删除或重新缩放。此维护操作不会更改任何客户指定的值,例如 VPC 配置、KMS 加密、型号、实例类型或实例计数。

  • RollingBack:端点无法向上或向下扩展或更改其变体权重,并且正在回滚到以前的配置。回滚完成后,终端节点将返回到InService状态。此过渡状态仅适用于启用了自动缩放并且正在进行变体重量或容量更改的终端节点,作为UpdateEndpointWeightsAndCapacities调用或UpdateEndpointWeightsAndCapacities操作被显式调用。

  • InService:终端节点可用于处理传入的请求。

  • DeletingDeleteEndpoint执行。

  • Failed:无法创建、更新或重新缩放端点。使用描述端点:失败原因了解有关失败的信息。DeleteEndpoint是唯一可以在失败的端点上执行的操作。

描述主机部署

您可以使用describe kubectl命令。

kubectl describe hostingdeployment

您的输出应与以下内容类似:

Name: host-xgboost Namespace: default Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"sagemaker.aws.amazon.com/v1","kind":"HostingDeployment","metadata":{"annotations":{},"name":"host-xgboost","namespace":"def..." API Version: sagemaker.aws.amazon.com/v1 Kind: HostingDeployment Metadata: Creation Timestamp: 2019-11-22T19:40:00Z Finalizers: sagemaker-operator-finalizer Generation: 1 Resource Version: 4258134 Self Link: /apis/sagemaker.aws.amazon.com/v1/namespaces/default/hostingdeployments/host-xgboost UID: def0e83e-0d5f-11ea-aa45-0a3507uiduid Spec: Containers: Container Hostname: xgboost Image: 123456789012.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest Model Data URL: s3://my-bucket/inference/xgboost-mnist/model.tar.gz Models: Containers: xgboost Execution Role Arn: arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole Name: xgboost-model Primary Container: xgboost Production Variants: Initial Instance Count: 1 Instance Type: ml.c5.large Model Name: xgboost-model Variant Name: all-traffic Region: us-east-2 Status: Creation Time: 2019-11-22T19:40:04Z Endpoint Arn: arn:aws:sagemaker:us-east-2:123456789012:endpoint/host-xgboost-def0e83e0d5f11eaaaexample Endpoint Config Name: host-xgboost-1-def0e83e0d5f11e-e08f6c510d5f11eaaa450aexample Endpoint Name: host-xgboost-def0e83e0d5f11eaaa450a350733ba06 Endpoint Status: Creating Endpoint URL: https://runtime.sagemaker.us-east-2.amazonaws.com/endpoints/host-xgboost-def0e83e0d5f11eaaaexample/invocations Last Check Time: 2019-11-22T19:43:57Z Last Modified Time: 2019-11-22T19:40:04Z Model Names: Name: xgboost-model Value: xgboost-model-1-def0e83e0d5f11-df5cc9fd0d5f11eaaa450aexample Events: <none>

状态字段使用以下字段提供详细信息:

  • Additional:有关托管部署状态的其他信息。此字段为可选字段,仅在出现错误时才填充。

  • Creation Time:在 SageMaker 中创建终端节点时。

  • Endpoint ARN:SageMaker 终端节点 ARN。

  • Endpoint Config Name:终端节点配置的 SageMaker 名称。

  • Endpoint Name:终端节点的 SageMaker 名称。

  • Endpoint Status:终端节点的状态。

  • Endpoint URL:可用于访问终端节点的 HTTPS URL。有关更多信息,请参阅 。在 SageMaker 托管服务上部署模型.

  • FailureReason:如果创建、更新或删除命令失败,则此处显示原因。

  • Last Check Time:操作员上次检查端点状态的时间。

  • Last Modified Time:上次修改终端节点的时间。

  • Model Names:将部署模型名称托管到 SageMaker 模型名称的键值对。

调用终端节点

一旦端点状态为InService,您可以通过两种方式调用终端节点:使用AmazonCLI,它执行身份验证和 URL 请求签名,或者使用像 cURL 这样的 HTTP 客户端。如果您使用自己的客户端,您需要执行Amazonv4 URL 签名和身份验证您自己。

要使用AmazonCLI 中,运行以下命令。确保将地区和终端节点名称替换为终端节点的区域和 SageMaker 终端节点名称。这些信息可以从kubectl describe.

# Invoke the endpoint with mock input data. aws sagemaker-runtime invoke-endpoint \ --region us-east-2 \ --endpoint-name <endpoint name> \ --body $(seq 784 | xargs echo | sed 's/ /,/g') \ >(cat) \ --content-type text/csv > /dev/null

例如,如果您的区域是us-east-2,并且您的端点配置名称是host-xgboost-f56b6b280d7511ea824b129926example,那么以下命令将调用终端节点:

aws sagemaker-runtime invoke-endpoint \ --region us-east-2 \ --endpoint-name host-xgboost-f56b6b280d7511ea824b1299example \ --body $(seq 784 | xargs echo | sed 's/ /,/g') \ >(cat) \ --content-type text/csv > /dev/null 4.95847082138

这里,4.95847082138是模拟数据的模型预测。

更新主机部署

  1. 一旦主机部署的状态为InService中,则可以更新。主机部署可能需要大约 10 分钟才能使用。验证状态是否为InService,请使用以下命令:

    kubectl get hostingdeployments
  2. 主机部署可以在状态为InService. 操作员等待,直到 SageMaker 终端节点为InService,然后再应用更新。

    要应用更新,请修改hosting.yaml文件。例如,更改initialInstanceCount字段从 1 到 2,如下所示:

    apiVersion: sagemaker.aws.amazon.com/v1 kind: HostingDeployment metadata: name: host-xgboost spec: region: us-east-2 productionVariants: - variantName: all-traffic modelName: xgboost-model initialInstanceCount: 2 instanceType: ml.c5.large models: - name: xgboost-model executionRoleArn: arn:aws:iam::123456789012:role/service-role/AmazonSageMaker-ExecutionRole primaryContainer: xgboost containers: - xgboost containers: - containerHostname: xgboost modelDataUrl: s3://my-bucket/inference/xgboost-mnist/model.tar.gz image: 123456789012.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest
  3. 保存文件,然后使用kubectl以应用您的更新,如下所示。您将看到状态更改InServiceReconcilingEndpoint,然后Updating.

    $ kubectl apply -f hosting.yaml hostingdeployment.sagemaker.aws.amazon.com/host-xgboost configured $ kubectl get hostingdeployments NAME STATUS SAGEMAKER-ENDPOINT-NAME host-xgboost ReconcilingEndpoint host-xgboost-def0e83e0d5f11eaaa450a350abcdef $ kubectl get hostingdeployments NAME STATUS SAGEMAKER-ENDPOINT-NAME host-xgboost Updating host-xgboost-def0e83e0d5f11eaaa450a3507abcdef

SageMaker 使用您的模型部署一组新的实例,切换流量以使用新实例,并耗尽旧实例。一旦这个过程开始,状态将变为Updating. 更新完成后,终端节点将变为InService. 此过程大约需要 10 分钟。

删除主机部署

  1. 使用kubectl使用以下命令删除主机部署:

    kubectl delete hostingdeployments host-xgboost

    您的输出应与以下内容类似:

    hostingdeployment.sagemaker.aws.amazon.com "host-xgboost" deleted
  2. 要验证托管部署是否已删除,请使用以下命令:

    kubectl get hostingdeployments No resources found.

已删除的终端节点不会对 SageMaker 资源产生任何费用。