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

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

SageMaker Kubernetes 的 运算符

SageMaker Kubernetes 的操作员使使用 Kubernetes 的开发人员和数据科学家能够更轻松地在 SageMaker 中训练、优化和部署机器学习 (ML) 模型。您可以在 SageMaker (Amazon Elastic Kubernetes Service) 中的 Kubernetes 集群上安装这些 Amazon EKS 运算符,以便使用 Kubernetes API 和命令行 Kubernetes 工具(如 SageMaker)在本机创建 kubectl 作业。 本指南向您介绍如何设置运算符。本指南还介绍了如何使用运算符运行模型训练、超参数优化和推理(实时和批处理)。

使用这些运算符不收取任何额外费用。您通过这些运算符使用的任何 SageMaker 资源都会产生费用。此处的过程和准则假定您熟悉 Kubernetes 及其基本命令。

什么是运算符?

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

Prerequisites

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

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

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

    • eksctl 版本 0.7.0 或更高版本

    • AWS CLI 版本 1.16.232 或更高版本

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

    • aws-iam-authenticator

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

  • 创建一个要在其上运行运算符的 Kubernetes 集群。它应该是 Kubernetes 版本 1.13 或 1.14。有关使用 eksctl 自动创建集群的信息,请参阅 eksctl 入门。预置集群需要 20 到 30 分钟的时间。

权限概述

Kubernetes 的 SageMaker 运算符允许您从 Kubernetes 集群管理 SageMaker 中的作业。操作人员将代表您访问 SageMaker 资源。运算符代入的与 AWS 资源交互的 IAM 角色不同于您用于访问 Kubernetes 集群的凭证。该角色还不同于 SageMaker 在运行您的机器学习作业时代入的角色。下图说明了此设计和流程。

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

以下各节介绍设置和部署运算符的步骤。

集群范围的部署

在使用 IAM 角色部署运算符之前,请将 OpenID Connect (OIDC) 提供程序与您的角色关联,以便对 IAM 服务进行身份验证。

为集群创建 OpenID Connect 提供程序

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

  1. 设置本地 CLUSTER_NAMEAWS_REGION 环境变量,如下所示:

    # Set the Region and cluster export CLUSTER_NAME="<your cluster name>" export AWS_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 ServiceAccount 担任该角色的权限。

获取 OIDC ID

要设置 ServiceAccount,请使用以下命令获取 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><AWS account number><EKS Cluster region> 占位符替换为与集群对应的值。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws-cn:iam::<AWS 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;您将此值传递给运算符。

将 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 ServiceAccount sagemaker-k8s-operator-default 应具有 AmazonSageMakerFullAccess 权限。在安装该运算符时,请确认这一点。

部署运算符

部署运算符时,您可以使用 YAML 文件或 Helm 图表。

使用 YAML 部署运算符

这是部署运算符的最简单方法。过程如下所述:

  1. 下载以下安装程序脚本。每当引用 installer.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
使用 Helm 图表部署操作符

使用提供的 Helm 图表来安装运算符。

  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 图表:

    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. 确保运算符 pod 成功运行。使用以下命令可列出所有 Pod:

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

    您应该在命名空间 sagemaker-k8s-operator-controller-manager-***** 中看到一个名为 sagemaker-k8s-operator-system 的 pod,如下所示:

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

命名空间范围的部署

您可以选择在单个 Kubernetes 命名空间的范围内安装您的运算符。在此模式下,控制器仅在资源是在该命名空间内创建的的情况下监控资源并将这些资源与 SageMaker 协调。这样,控制器就可以更精细地控制哪些资源由哪些控制器管理。这对于部署到多个 AWS 账户或控制哪些用户可以访问特定作业非常有用。

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

为您的 OpenID 集群创建 Amazon EKS Connect 提供商

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

  1. 设置本地 CLUSTER_NAMEAWS_REGION 环境变量,如下所示:

    # Set the region and cluster export CLUSTER_NAME="<your cluster name>" export AWS_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 ServiceAccount 代入该角色的权限。

获取 OIDC ID

要设置 ServiceAccount,请先使用以下命令获取 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><AWS account number><EKS Cluster region> 占位符替换为与集群对应的值。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws-cn:iam::<AWS 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 ServiceAccount sagemaker-k8s-operator-default 应具有 AmazonSageMakerFullAccess 权限。在安装该运算符时,请确认这一点。

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

部署运算符时,您可以使用 YAML 文件或 Helm 图表。

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

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

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

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

要将运算符安装到集群上,请执行以下操作:

  1. 下载以下运算符脚本。每当引用 operator.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 图表将运算符部署到您的命名空间

部署命名空间范围内的运算符需要两个部分。第一个是在集群级别安装的一组 CRDs。每个 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 图表:

    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. 确保运算符 pod 成功运行。使用以下命令可列出所有 Pod:

    kubectl -n my-namespace get pods

    您应该在命名空间 sagemaker-k8s-operator-controller-manager-***** 中看到一个名为 my-namespace 的 pod,如下所示:

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

安装 SageMaker 日志 kubectl 插件

作为适用于 Kubernetes 的 SageMaker 运算符的一部分,您可以对 smlogs 使用 插件kubectl。 这将使用 SageMaker 流式传输 CloudWatch kubectl 日志。kubectl 必须安装到您的 PATH 上。以下命令将二进制文件放在主目录中的 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

使用 Helm 图表安装的操作符

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

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

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

随 YAML 一起安装的运算符

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

# 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>

随 Helm 图表安装的运算符

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

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

Troubleshooting

调试失败的作业

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

    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 中创建的,请使用运算符 Pod 的日志查找问题的根源,如下所示:

    $ 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

每个区域中的映像和SMlogs

下表列出了每个区域中可用的运算符映像和 SMLogs。

区域 控制器图像 Linux SMLogs
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