适用于库贝内特人的 SageMaker 操作员 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

适用于库贝内特人的 SageMaker 操作员

适用于 Kubernetes 的 SageMaker 操作员使使用 Kubernetes 的开发人员和数据科学家能够更轻松地在 SageMaker 中培训、调整和部署机器学习 (ML) 模型。您可以在亚马逊弹性库贝内特斯服务(亚马逊 EKS)中将这些 SageMaker 操作员安装到您的 Kubernetes 集群上,以便使用 Kubernetes API 和命令行库贝内特工具本地创建 SageMaker 作业,如kubectl. 本指南向您介绍如何设置操作符。本指南还介绍了如何使用运算符运行模型训练、超参数调整和推理(实时和批量)。

使用这些运营商不收取任何额外费用。您确实需要为通过这些运营商使用的任何 SageMaker 资源收取费用。这里的过程和指南假定您熟悉 Kubernetes 及其基本命令。

什么是运算符?

Kubernetes 是建立在所谓的控制器模式. 此模式允许应用程序和工具侦听中央状态管理器 (ETCD),并在发生事件时采取行动。此类应用程序的示例包括cloud-controller-managercontroller-manager. 控制器模式允许您创建分离体验,而不必担心其他组件是如何集成的。要向 Kubernetes 添加新功能,开发人员可以通过创建包含其应用程序特定或特定于域的逻辑和组件的自定义资源来扩展 Kubernetes API。Kubernetes 中的运算符允许用户本地调用这些自定义资源并自动执行关联的工作流。

Prerequisites

本指南假设您已完成以下先决条件:

  • 在用于访问 Kubernetes 群集的客户端计算机上安装了以下工具:

    • kubectl1.13 版或更高版本。使用kubectl版本(位于 Amazon EKS 集群控制层面的一个次要版本内)。例如,一个 1.13kubectl客户端与 Kubernetes 1.13 和 1.14 集群配合使用。OpenID 1.13 之前的版本中不支持 OIDC Connect。

    • eksctl0.7.0 版或更高版本

    • AmazonCLI1.16.232 版本或更高版本

    • (可选)Helm版本 3.0 或更高版本

    • aws-iam-身份验证器

  • 拥有 IAM 权限以创建角色并将策略附加到角色。

  • 创建了要在其上运行运算符的 Kubernetes 群集。它应该是 Kubernetes 版本 1.13 或 1.14。对于使用eksctl,请参阅使用 eksctl 入门. 配置群集需要 20 到 30 分钟。

权限概述

适用于库贝内特人的 SageMaker 操作员允许您在库贝内特群集中管理 SageMaker 中的作业。操作员代您访问 SageMaker 资源。操作员承担的与交互的 IAM 角色Amazon资源不同于您用于访问 Kubernetes 集群的凭证。该角色还与 SageMaker 在运行机器学习作业时承担的角色不同。下图解释了此设计和流程。

IAM 基于角色的设置和操作员部署

以下几节介绍了设置和部署操作员的步骤。

群集范围部署

在使用 IAM 角色部署操作员之前,请将 OpenID Connect (OIDC) 提供商与您的角色相关联,以便与 IAM 服务进行身份验证。

为群集创建 OpenID Connect 提供商

以下说明说明如何创建 OIDC 提供商并将其与您的 Amazon EKS 集群相关联。

  1. 设置 LocalCLUSTER_NAMEAWS_REGION环境变量,如下所示:

    # Set the Region and cluster export CLUSTER_NAME="<your cluster name>" export Amazon_REGION="<your region>"
  2. 使用以下命令将 OIDC 提供程序与您的集群相关联。有关更多信息,请参阅 。在集群上为服务账户启用 IAM 角色。

    eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \ --region ${AWS_REGION} --approve

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

    [_] eksctl version 0.10.1 [_] using region us-east-1 [_] IAM OpenID Connect provider is associated with cluster "my-cluster" in "us-east-1"

现在群集具有 OIDC 身份提供程序,您可以创建角色并授予 Kubernetes 服务帐户权限来担任该角色。

获取 OIDC ID

若要设置服务帐户,请使用以下命令获取 OpenID Connect 颁发者 URL:

aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} \ --query cluster.identity.oidc.issuer --output text

此命令会返回类似以下内容的 URL:

https://oidc.eks.${AWS_REGION}.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID

在此 URL 中,D48675832CA65BD10A532F597OIDCID是 OIDC ID。您集群的 OIDC ID 不同。您需要此 OIDC ID 值才能创建角色。

如果您的输出为None,这意味着您的客户端版本是旧的。要变通解决此问题,请运行以下命令:

aws eks describe-cluster --region ${AWS_REGION} --query cluster --name ${CLUSTER_NAME} --output text | grep OIDC

将返回 OIDC URL,如下所示:

OIDC https://oidc.eks.us-east-1.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID

创建 IAM 角色

  1. 创建一个名为的文件trust.json,并在其中插入以下信任关系代码块。请务必替换所有<OIDC ID><Amazon account number>, 和<EKS Cluster region>占位符,其中包含与您的集群对应的值。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws-cn:iam::<Amazon account number>:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com", "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default" } } } ] }
  2. 运行以下命令以创建具有在中定义的信任关系的角色trust.json. 此角色使 Amazon EKS 集群能够从 IAM 获取和刷新证书。

    aws iam create-role --region ${AWS_REGION} --role-name <role name> --assume-role-policy-document file://trust.json --output=text

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

    ROLE arn:aws:iam::123456789012:role/my-role 2019-11-22T21:46:10Z / ABCDEFSFODNN7EXAMPLE my-role ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS sts.amazonaws.com system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default PRINCIPAL arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/

    记下ROLE ARN; 您将此值传递给您的运算符。

将卓越亚马逊制造商全权访问政策附加到角色

要授予角色访问 SageMaker 的权限,请将AmazonSageMakerFullAccess政策。如果您要限制对操作员的权限,可以创建自己的自定义策略并附加其。

附加以下策略:

aws iam attach-role-policy --region ${AWS_REGION} --role-name <role name> --policy-arn arn:aws-cn:iam::aws:policy/AmazonSageMakerFullAccess

Kubernetes 服务账户sagemaker-k8s-operator-default应该具有AmazonSageMakerFullAccess权限。在您安装操作员时,确认此点。

部署操作员

部署操作员时,可以使用 YAML 文件或 Helm 图表。

使用 YAML 部署操作员

这是部署操作员的最简单方法。过程如下所述:

  1. 下载以下安装程序脚本。WHinstaller.yaml被引用,请使用installer_china.yaml相反。

    wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/china/installer_china.yaml
  2. 编辑installer.yaml要替换的文件eks.amazonaws.com/role-arn. 在此处将 ARN 替换为您创建的基于 OIDC 的角色的 Amazon 资源名称 (ARN)。

  3. 使用以下命令来部署集群:

    kubectl apply -f installer.yaml
使用舵手图部署操作员

使用提供的头盔图安装操作员。

  1. 使用以下命令克隆 Helm 安装程序目录:

    git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
  2. 导航到 amazon-sagemaker-operator-for-k8s/hack/charts/installer 文件夹。编辑rolebased/values.yaml文件,其中包括图表的高级参数。此处将角色 ARN 替换为您创建的基于 OIDC 的角色的 Amazon 资源名称 (ARN)。

  3. 使用以下命令安装 Helm Tatch:

    kubectl create namespace sagemaker-k8s-operator-system helm install --namespace sagemaker-k8s-operator-system sagemaker-operator rolebased/

    如果您决定将运算符安装到指定命名空间以外的命名空间中,则需要调整 IAM 角色中定义的命名空间trust.json文件进行匹配。

  4. 过了一会儿,图表将使用随机生成的名称进行安装。运行以下命令验证安装是否成功:

    helm ls

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

    NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION sagemaker-operator sagemaker-k8s-operator-system 1 2019-11-20 23:14:59.6777082 +0000 UTC deployed sagemaker-k8s-operator-0.1.0

验证操作员部署

  1. 通过运行以下命令,您应该能够查看部署到集群的每个操作员的 SageMaker 自定义资源定义 (CRD):

    kubectl get crd | grep sagemaker

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

    batchtransformjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z endpointconfigs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hostingdeployments.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hyperparametertuningjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z models.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z trainingjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z
  2. 确保操作容器正在成功运行。使用以下命令列出所有窗格:

    kubectl -n sagemaker-k8s-operator-system get pods

    您应看到一个名为的窗格sagemaker-k8s-operator-controller-manager-*****命名空间sagemaker-k8s-operator-system如下所示:

    NAME READY STATUS RESTARTS AGE sagemaker-k8s-operator-controller-manager-12345678-r8abc 2/2 Running 0 23s

命名空间范围部署

您可以选择在单个 Kubernetes 命名空间的范围内安装操作符。在此模式下,如果资源是在该命名空间中创建的,则控制器仅监视和协调资源与 SageMaker。这允许对哪个控制器正在管理哪些资源进行更精细的控制。这对于部署到多个Amazon帐户或控制哪些用户可以访问特定作业。

本指南概述了如何将运算符安装到特定的预定义命名空间中。要将控制器部署到第二个命名空间,请从头到尾按照指南进行操作,并在每个步骤中更改命名空间。

为您的亚马逊 EKS 集群创建 OpenID Connect 提供商

以下说明说明如何创建 OIDC 提供商并将其与您的 Amazon EKS 集群相关联。

  1. 设置 LocalCLUSTER_NAMEAWS_REGION环境变量,如下所示:

    # Set the region and cluster export CLUSTER_NAME="<your cluster name>" export Amazon_REGION="<your region>"
  2. 使用以下命令将 OIDC 提供程序与您的集群相关联。有关更多信息,请参阅 。在集群上为服务账户启用 IAM 角色。

    eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \ --region ${AWS_REGION} --approve

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

    [_] eksctl version 0.10.1 [_] using region us-east-1 [_] IAM OpenID Connect provider is associated with cluster "my-cluster" in "us-east-1"

现在群集具有 OIDC 身份提供商,请创建一个角色并授予 Kubernetes 服务帐户代入该角色的权限。

获取您的 OIDC ID

若要设置服务帐户,首先使用以下命令获取 OpenID Connect 颁发者 URL:

aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} \ --query cluster.identity.oidc.issuer --output text

此命令会返回类似以下内容的 URL:

https://oidc.eks.${AWS_REGION}.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID

在此 URL 中,值 D48675832CA65BD10A532F597OIDCID 是 OIDC ID。您的集群的 OIDC ID 将不同。您需要此 OIDC ID 值才能创建角色。

如果您的输出为None,这意味着您的客户端版本是旧的。要变通解决此问题,请运行以下命令:

aws eks describe-cluster --region ${AWS_REGION} --query cluster --name ${CLUSTER_NAME} --output text | grep OIDC

将返回 OIDC URL,如下所示:

OIDC https://oidc.eks.us-east-1.amazonaws.com/id/D48675832CA65BD10A532F597OIDCID

创建 IAM 角色

  1. 创建一个名为的文件trust.json,并在其中插入以下信任关系代码块。请务必替换所有<OIDC ID><Amazon account number>, 和<EKS Cluster region>占位符,其中包含与您的集群对应的值。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws-cn:iam::<Amazon account number>:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com", "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:<Namespace>:sagemaker-k8s-operator-default" } } } ] }
  2. 运行以下命令以创建具有在中定义的信任关系的角色trust.json. 此角色使 Amazon EKS 集群能够从 IAM 获取和刷新证书。

    aws iam create-role --region ${AWS_REGION} --role-name <role name> --assume-role-policy-document file://trust.json --output=text

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

    ROLE arn:aws:iam::123456789012:role/my-role 2019-11-22T21:46:10Z / ABCDEFSFODNN7EXAMPLE my-role ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS sts.amazonaws.com system:serviceaccount:my-namespace:sagemaker-k8s-operator-default PRINCIPAL arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/

记下ROLE ARN. 您将此值传递给您的操作员。

将 AmazonSageMakerFullAccess 政策附加到您的角色

要授予角色访问 SageMaker 的权限,请将AmazonSageMakerFullAccess政策。如果您要限制对操作员的权限,可以创建自己的自定义策略并附加其。

附加以下策略:

aws iam attach-role-policy --region ${AWS_REGION} --role-name <role name> --policy-arn arn:aws-cn:iam::aws:policy/AmazonSageMakerFullAccess

Kubernetes 服务账户sagemaker-k8s-operator-default应该具有AmazonSageMakerFullAccess权限。在您安装操作员时,确认此点。

将操作员部署到您的命名空间

部署操作员时,可以使用 YAML 文件或 Helm 图表。

使用 YAML 将运算符部署到您的命名空间

在命名空间的范围内部署运算符有两个部分。第一个是在群集级别安装的 CRD 集合。每个 Kubernetes 群集只需安装一次这些资源定义。第二部分是操作员权限和部署本身。

如果尚未将 CRD 安装到群集中,请使用以下命令应用 CRD 安装程序 YAML:

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/crd.yaml

将操作员安装到群集上:

  1. 下载以下运算符脚本。WHoperator.yaml被引用,请使用operator_china.yaml相反。

    wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/china/operator_china.yaml
  2. 使用以下命令更新安装程序 YAML 以将资源放入指定的命名空间中:

    sed -i -e 's/PLACEHOLDER-NAMESPACE/<YOUR NAMESPACE>/g' operator.yaml
  3. 编辑operator.yaml文件将资源放入eks.amazonaws.com/role-arn. 在此处将 ARN 替换为您创建的基于 OIDC 的角色的 Amazon 资源名称 (ARN)。

  4. 使用以下命令来部署集群:

    kubectl apply -f operator.yaml
使用 Helm 图表将运算符部署到您的命名空间

在命名空间的范围内部署运算符需要有两个部分。第一个是在群集级别安装的 CRD 集合。每个 Kubernetes 群集只需安装一次这些资源定义。第二部分是操作员权限和部署本身。使用 helm 图表时,您必须首先使用kubectl.

  1. 使用以下命令克隆 Helm 安装程序目录:

    git clone https://github.com/aws/amazon-sagemaker-operator-for-k8s.git
  2. 导航到 amazon-sagemaker-operator-for-k8s/hack/charts/installer/namespaced 文件夹。编辑rolebased/values.yaml文件,其中包括图表的高级参数。此处将角色 ARN 替换为您创建的基于 OIDC 的角色的 Amazon 资源名称 (ARN)。

  3. 使用以下命令安装 Helm Tatch:

    helm install crds crd_chart/
  4. 使用以下命令创建所需的命名空间并安装运算符:

    kubectl create namespace <namespace> helm install --n <namespace> op operator_chart/
  5. 过了一会儿,图表安装时的名称为sagemaker-operator. 运行以下命令验证安装是否成功:

    helm ls

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

    NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION sagemaker-operator my-namespace 1 2019-11-20 23:14:59.6777082 +0000 UTC deployed sagemaker-k8s-operator-0.1.0

验证操作员部署到您的命名空间

  1. 通过运行以下命令,您应该能够查看部署到集群的每个操作员的 SageMaker 自定义资源定义 (CRD):

    kubectl get crd | grep sagemaker

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

    batchtransformjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z endpointconfigs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hostingdeployments.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z hyperparametertuningjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z models.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z trainingjobs.sagemaker.aws.amazon.com 2019-11-20T17:12:34Z
  2. 确保操作容器正在成功运行。使用以下命令列出所有窗格:

    kubectl -n my-namespace get pods

    您应看到一个名为的窗格sagemaker-k8s-operator-controller-manager-*****命名空间my-namespace如下所示:

    NAME READY STATUS RESTARTS AGE sagemaker-k8s-operator-controller-manager-12345678-r8abc 2/2 Running 0 23s

安装 SageMaker 日志kubectl插件

作为适用于库贝内特的 SageMaker 运算符的一部分,您可以使用smlogs 插件对于 来说为kubectl. 这使得 SageMaker CloudWatch 日志可以通过kubectl.kubectl必须安装到您的路径. 以下命令将二进制文件放置在sagemaker-k8s-bin目录,然后将该目录添加到PATH.

export os="linux" wget https://amazon-sagemaker-operator-for-k8s-us-east-1.s3.amazonaws.com/kubectl-smlogs-plugin/v1/${os}.amd64.tar.gz tar xvzf ${os}.amd64.tar.gz # Move binaries to a directory in your homedir. mkdir ~/sagemaker-k8s-bin cp ./kubectl-smlogs.${os}.amd64/kubectl-smlogs ~/sagemaker-k8s-bin/. # This line adds the binaries to your PATH in your .bashrc. echo 'export PATH=$PATH:~/sagemaker-k8s-bin' >> ~/.bashrc # Source your .bashrc to update environment variables: source ~/.bashrc

使用以下命令验证kubectl插件是否已正确安装:

kubectl smlogs

如果kubectl插件安装正确,您的输出应与以下内容类似:

View SageMaker logs via Kubernetes Usage: smlogs [command] Aliases: smlogs, SMLogs, Smlogs Available Commands: BatchTransformJob View BatchTransformJob logs via Kubernetes TrainingJob View TrainingJob logs via Kubernetes help Help about any command Flags: -h, --help help for smlogs Use "smlogs [command] --help" for more information about a command.

删除运算符

删除基于群集的运算符

使用 YAML 安装的操作员

要从群集中卸载操作员,请确保已从群集中删除所有 SageMaker 资源。否则会导致操作员删除操作挂起。删除所有 SageMaker 作业后,请使用kubectl从集群中删除运算符。运行以下命令以停止所有作业并从群集中删除操作员:

# Delete all SageMaker jobs from Kubernetes kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com # Delete the operator and its resources kubectl delete -f /installer.yaml

您应看到类似下面的输出:

$ kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com trainingjobs.sagemaker.aws.amazon.com "xgboost-mnist-from-for-s3" deleted $ kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com hyperparametertuningjob.sagemaker.aws.amazon.com "xgboost-mnist-hpo" deleted $ kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com batchtransformjob.sagemaker.aws.amazon.com "xgboost-mnist" deleted $ kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com hostingdeployment.sagemaker.aws.amazon.com "host-xgboost" deleted $ kubectl delete -f raw-yaml/installer.yaml namespace "sagemaker-k8s-operator-system" deleted customresourcedefinition.apiextensions.k8s.io "batchtransformjobs.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "endpointconfigs.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "hostingdeployments.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "hyperparametertuningjobs.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "models.sagemaker.aws.amazon.com" deleted customresourcedefinition.apiextensions.k8s.io "trainingjobs.sagemaker.aws.amazon.com" deleted role.rbac.authorization.k8s.io "sagemaker-k8s-operator-leader-election-role" deleted clusterrole.rbac.authorization.k8s.io "sagemaker-k8s-operator-manager-role" deleted clusterrole.rbac.authorization.k8s.io "sagemaker-k8s-operator-proxy-role" deleted rolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-leader-election-rolebinding" deleted clusterrolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-manager-rolebinding" deleted clusterrolebinding.rbac.authorization.k8s.io "sagemaker-k8s-operator-proxy-rolebinding" deleted service "sagemaker-k8s-operator-controller-manager-metrics-service" deleted deployment.apps "sagemaker-k8s-operator-controller-manager" deleted secrets "sagemaker-k8s-operator-abcde" deleted

使用头盔图表安装的操作员

要删除操作员 CRD,请首先删除所有正在运行的作业。然后使用以下命令删除用于部署运算符的 Helm 图表:

# get the helm charts $ helm ls # delete the charts $ helm delete <chart name>

删除基于命名空间的运算符

使用 YAML 安装的操作员

要从群集中卸载操作员,请确保已从群集中删除所有 SageMaker 资源。否则会导致操作员删除操作挂起。删除所有 SageMaker 作业后,请使用kubectl首先从命名空间中删除运算符,然后从群集中删除 CRD。运行以下命令以停止所有作业并从群集中删除操作员:

# Delete all SageMaker jobs from Kubernetes kubectl delete --all --all-namespaces hyperparametertuningjob.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces trainingjobs.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces batchtransformjob.sagemaker.aws.amazon.com kubectl delete --all --all-namespaces hostingdeployment.sagemaker.aws.amazon.com
# Delete the operator using the same yaml file that was used to install the operator kubectl delete -f operator.yaml # Now delete the CRDs using the CRD installer yaml kubectl delete -f https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/namespaced/crd.yaml # Now you can delete the namespace if you want kubectl delete namespace <namespace>

安装了掌舵图的操作员

要删除操作员 CRD,请首先删除所有正在运行的作业。然后使用以下命令删除用于部署运算符的 Helm 图表:

# Delete the operator $ helm delete -n <namespace> op # delete the crds $ helm delete crds # optionally delete the namespace $ kubectl delete namespace <namespace>

Troubleshooting

调试失败的 Job

  • 通过运行以下操作来检查作业状态:

    kubectl get <CRD Type> <job name>
  • 如果作业是在 SageMaker 中创建的,则可以使用以下命令查看STATUSSageMaker Job Name

    kubectl get <crd type> <job name>
  • 您可以使用smlogs使用以下命令查找问题的原因:

    kubectl smlogs <crd type> <job name>
  • 您也可以使用describe命令可以使用以下命令获取有关作业的更多详细信息。输出具有additional字段,该字段包含有关作业状态的更多信息。

    kubectl describe <crd type> <job name>
  • 如果作业未在 SageMaker 中创建,则使用操作员窗格的日志来查找问题的原因,如下所示:

    $ kubectl get pods -A | grep sagemaker # Output: sagemaker-k8s-operator-system sagemaker-k8s-operator-controller-manager-5cd7df4d74-wh22z 2/2 Running 0 3h33m $ kubectl logs -p <pod name> -c manager -n sagemaker-k8s-operator-system

删除操作员 CRD

如果删除作业不起作用,请检查运算符是否正在运行。如果运算符未运行,则必须使用以下步骤删除终结器:

  1. 在新终端中,在编辑器中使用kubectl edit如下所示:

    $ kubectl edit <crd type> <job name>
  2. 通过从文件中删除以下两行来编辑作业以删除终结器。保存文件,作业将被删除。

    finalizers: - sagemaker-operator-finalizer

每个区域的映像和 SMLog

下表列出每个区域中可用的操作员映像和 SMLog。

区域 控制器映像 Linux SMLog
us-east-1 957583890962.dkr.ecr.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.us-east-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz
us-east-2 922499468684.dkr.ecr.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.us-east-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-east-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz
us-west-2 640106867763.dkr.ecr.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.us-west-2.amazonaws.com/amazon-sagemaker-operator-for-k8s-us-west-2/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz
eu-west-1 613661167059.dkr.ecr.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s:v1 https://s3.eu-west-1.amazonaws.com/amazon-sagemaker-operator-for-k8s-eu-west-1/kubectl-smlogs-plugin/v1/linux.amd64.tar.gz