使用 SageMaker 组件 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 SageMaker 组件

在本教程中,您将使用适用于库布流管线的 SageMaker 组件运行管线,以便使用 Ktis 与 MNIST 数据集一起训练分类模型。此工作流使用 Kubeflow 管道作为编排器,SageMaker 作为后端来运行工作流中的步骤。有关此示例和其他管道示例的完整代码,请参阅SageMaker 久维流管道示例. 有关所使用组件的信息,请参阅KubeFlow 管道 GitHub 存储库.

Setup

要使用 Kubeflow 管道 (KFP),您需要一个 Amazon Elastic Kubernetes Service (Amazon EKS) 集群和一个网关节点来与该集群进行交互。以下各节介绍了设置这些资源所需的步骤。

设置网关节点

网关节点用于创建 Amazon EKS 集群并访问 Kubeflow 管道 UI。使用您的本地计算机或 Amazon EC2 实例作为您的网关节点。如果您想要使用新的 Amazon EC2 实例,请使用最新的 Ubuntu 18.04 DLAMI 版本从Amazon控制台中的步骤启动和配置 DLAMI.

完成以下步骤来设置您的网关节点。根据您的环境,您可能已经配置了某些要求。

  1. 如果您没有 Amazon EKS 集群,请创建一个名为的用户your_credentials使用在您的Amazon账户。 如果您有现有 Amazon EKS 集群,请使用 IAM 角色或有权访问该角色的用户的证书。

  2. 将以下权限添加到您的用户,请使用更改 IAM 用户的权限:

  3. 在您的网关节点上安装以下内容以访问 Amazon EKS 集群和 KFP UI。

  4. 安装boto3.

    pip install boto3

设置 Amazon EKS 群集

从网关节点的命令行运行以下步骤来设置 Amazon EKS 集群:

  1. 如果您还没有 Amazon EKS 集群,请完成以下子步骤。如果您已有 Amazon EKS 群集,请跳过此步骤。

    1. 从命令行运行以下命令,以创建版本 1.14 或更高版本的 Amazon EKS 集群。Replace<your-cluster-name>替换为集群的任何名称。

      eksctl create cluster --name <your-cluster-name> --region us-east-1 --auto-kubeconfig --timeout=50m --managed --nodes=1
    2. 集群创建完成后,请使用以下命令验证您是否有权访问集群。

      kubectl get nodes
  2. 验证当前kubectl上下文是您想要与以下命令一起使用的集群。当前上下文在输出中标有星号 (*)。

    kubectl config get-contexts CURRENT NAME     CLUSTER *   <username>@<clustername>.us-east-1.eksctl.io   <clustername>.us-east-1.eksctl.io
  3. 如果所需群集未配置为当前默认群集,请使用以下命令更新默认群集。

    aws eks update-kubeconfig --name <clustername> --region us-east-1

安装 Kubeflow 管道

从网关节点的命令行运行以下步骤,以在群集上安装 Kubeflow 管道。

  1. 在群集上安装 Kubeflow 管道,按照部署久流管道文档. KFP 版本必须是 0.5.0 或更高版本。

  2. 验证 Kubeflow 管道服务和其他相关资源是否正在运行。

    kubectl -n kubeflow get all | grep pipeline

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

    pod/ml-pipeline-6b88c67994-kdtjv                      1/1     Running            0          2d pod/ml-pipeline-persistenceagent-64d74dfdbf-66stk     1/1     Running            0          2d pod/ml-pipeline-scheduledworkflow-65bdf46db7-5x9qj    1/1     Running            0          2d pod/ml-pipeline-ui-66cc4cffb6-cmsdb                   1/1     Running            0          2d pod/ml-pipeline-viewer-crd-6db65ccc4-wqlzj            1/1     Running            0          2d pod/ml-pipeline-visualizationserver-9c47576f4-bqmx4   1/1     Running            0          2d service/ml-pipeline                       ClusterIP   10.100.170.170   <none>        8888/TCP,8887/TCP   2d service/ml-pipeline-ui                    ClusterIP   10.100.38.71     <none>        80/TCP              2d service/ml-pipeline-visualizationserver   ClusterIP   10.100.61.47     <none>        8888/TCP            2d deployment.apps/ml-pipeline                       1/1     1            1           2d deployment.apps/ml-pipeline-persistenceagent      1/1     1            1           2d deployment.apps/ml-pipeline-scheduledworkflow     1/1     1            1           2d deployment.apps/ml-pipeline-ui                    1/1     1            1           2d deployment.apps/ml-pipeline-viewer-crd            1/1     1            1           2d deployment.apps/ml-pipeline-visualizationserver   1/1     1            1           2d replicaset.apps/ml-pipeline-6b88c67994                      1         1         1       2d replicaset.apps/ml-pipeline-persistenceagent-64d74dfdbf     1         1         1       2d replicaset.apps/ml-pipeline-scheduledworkflow-65bdf46db7    1         1         1       2d replicaset.apps/ml-pipeline-ui-66cc4cffb6                   1         1         1       2d replicaset.apps/ml-pipeline-viewer-crd-6db65ccc4            1         1         1       2d replicaset.apps/ml-pipeline-visualizationserver-9c47576f4   1         1         1       2d

访问 KFP 用户界面

Kubeflow 管道 UI 用于管理和跟踪集群上的实验、作业和运行。您可以使用端口转发从网关节点访问 Kubeflow 管道 UI。

设置向 KFP UI 服务的端口转发

从网关节点的命令行运行以下命令:

  1. 使用以下命令验证 KFP UI 服务是否正在运行。

    kubectl -n kubeflow get service ml-pipeline-ui NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE ml-pipeline-ui   ClusterIP   10.100.38.71   <none>        80/TCP    2d22h
  2. 运行以下命令以设置向 KFP UI 服务的端口转发。这将 KFP UI 转发到网关节点上的端口 8080,并允许您从浏览器访问 KFP UI。

    kubectl port-forward -n kubeflow service/ml-pipeline-ui 8080:80

    如果没有活动,则从远程计算机转发的端口会丢弃。如果您的仪表板无法获取日志或更新,请再次运行此命令。如果命令返回错误,请确保您尝试使用的端口上没有正在运行的进程。

访问 KFP UI 服务

访问 KFP UI 的方法取决于您的网关节点类型。

  • 本地计算机作为网关节点

    1. 按如下方式访问浏览器中的仪表板:

      http://localhost:8080
    2. 选择管道访问管道 UI。

  • Amazon EC2 实例作为网关节点

    1. 您需要在 Amazon EC2 实例上设置 SSH 隧道,以便从本地计算机的浏览器访问 Kubeflow 仪表板。

      在本地计算机中的新终端会话中,运行以下命令。Replace<public-DNS-of-gateway-node>替换为 Amazon EC2 控制台中找到的实例的 IP 地址。您也可以使用公有 DNS。Replace<path_to_key>,其中包含用于访问网关节点的 pem 密钥的路径。

      public_DNS_address=<public-DNS-of-gateway-node> key=<path_to_key> on Ubuntu: ssh -i ${key} -L 9000:localhost:8080 ubuntu@${public_DNS_address} or on Amazon Linux: ssh -i ${key} -L 9000:localhost:8080 ec2-user@${public_DNS_address}
    2. 在浏览器中访问仪表板。

      http://localhost:9000
    3. 选择管道访问 KFP 用户界面。

为KFP 窗格和 SageMaker 服务创建 IAM 用户/角色

您现在有一个设置了库贝内特人群集。要为久流管线运行 SageMaker 组件,需要访问 SageMaker 管线窗格的权限。在本节中,您将创建 IAM 用户/角色,供 Kubeflow 管道窗格和 SageMaker 使用。

创建 KFP 执行角色

从网关节点的命令行运行以下命令:

  1. 使用以下命令在 Amazon EKS 集群上启用 OIDC 支持。Replace<cluster_name>将替换为您的集群的名称,<cluster_region>与您的集群所在的区域一起使用。

    eksctl utils associate-iam-oidc-provider --cluster <cluster-name> \         --region <cluster-region> --approve
  2. 运行以下命令以获取OIDC发布者 URL。此 URL 的形式为https://oidc.eks.<region>.amazonaws.com/id/<OIDC_ID>.

    aws eks describe-cluster --region <cluster-region> --name <cluster-name> --query "cluster.identity.oidc.issuer" --output text
  3. 运行以下命令以创建名为的文件trust.json. Replace<OIDC_URL>与您的 OIDC 发行商 URL 一起使用。请不要包含https://在您的 OIDC 发行商 URL 中。将 <AWS_account_number> 替换为您的 Amazon 账号。

    OIDC_URL="<OIDC-URL>" AWS_ACC_NUM="<AWS-account-number>" # Run this to create trust.json file cat <<EOF > trust.json {   "Version": "2012-10-17",   "Statement": [     {       "Effect": "Allow",       "Principal": {         "Federated": "arn:aws:iam::${AWS_ACC_NUM}:oidc-provider/${OIDC_URL}"       },       "Action": "sts:AssumeRoleWithWebIdentity",       "Condition": {         "StringEquals": {           "${OIDC_URL}:aud": "sts.amazonaws.com",           "${OIDC_URL}:sub": "system:serviceaccount:kubeflow:pipeline-runner"         }       }     }   ] } EOF
  4. 创建命名为kfp-example-pod-role,使用trust.json使用以下命令。KFP 窗格使用此角色从 KFP 组件创建 SageMaker 作业。记下输出中返回的 ARN。

    aws iam create-role --role-name kfp-example-pod-role --assume-role-policy-document file://trust.json aws iam attach-role-policy --role-name kfp-example-pod-role --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess aws iam get-role --role-name kfp-example-pod-role --output text --query 'Role.Arn'
  5. 使用以下命令编辑您的管道运行程序服务帐户。

    kubectl edit -n kubeflow serviceaccount pipeline-runner
  6. 在文件中,添加以下 Amazon EKS 角色注释,并将<role_arn>与您的角色 ARN。

    eks.amazonaws.com/role-arn: <role-arn>
  7. 添加 Amazon EKS 角色注释后,您的文件应如下所示。保存文件。

    apiVersion: v1 kind: ServiceAccount metadata:   annotations:     eks.amazonaws.com/role-arn: <role-arn>     kubectl.kubernetes.io/last-applied-configuration: |       {"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"labels":{"app":"pipeline-runner","app.kubernetes.io/component":"pipelines-runner","app.kubernetes.io/instance":"pipelines-runner-0.2.0","app.kubernetes.io/managed-by":"kfctl","app.kubernetes.io/name":"pipelines-runner","app.kubernetes.io/part-of":"kubeflow","app.kubernetes.io/version":"0.2.0"},"name":"pipeline-runner","namespace":"kubeflow"}}   creationTimestamp: "2020-04-16T05:48:06Z"   labels:     app: pipeline-runner     app.kubernetes.io/component: pipelines-runner     app.kubernetes.io/instance: pipelines-runner-0.2.0     app.kubernetes.io/managed-by: kfctl     app.kubernetes.io/name: pipelines-runner     app.kubernetes.io/part-of: kubeflow     app.kubernetes.io/version: 0.2.0   name: pipeline-runner   namespace: kubeflow   resourceVersion: "11787"   selfLink: /api/v1/namespaces/kubeflow/serviceaccounts/pipeline-runner   uid: d86234bd-7fa5-11ea-a8f2-02934be6dc88 secrets: - name: pipeline-runner-token-dkjrk

创建 SageMaker 执行角色

这些区域有:kfp-example-sagemaker-execution-roleIAM 角色由 SageMaker 作业用于访问Amazon资源的费用。有关更多信息,请参阅 IAM 权限部分。您可以在运行管道时将此角色作为输入参数提供。

运行以下命令创建角色。记下在输出中返回的 ARN。

SAGEMAKER_EXECUTION_ROLE_NAME=kfp-example-sagemaker-execution-role TRUST="{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"sagemaker.amazonaws.com\" }, \"Action\": \"sts:AssumeRole\" } ] }" aws iam create-role --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --assume-role-policy-document "$TRUST" aws iam attach-role-policy --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess aws iam attach-role-policy --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess aws iam get-role --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --output text --query 'Role.Arn'

添加对其他 IAM 用户或角色的访问权限

如果您使用像 Jupyter 这样直观的 IDE,或者希望组织中的其他人员使用您设置的群集,则还可以授予他们访问权限。以下步骤使用 SageMaker 笔记本电脑在此工作流中运行。SageMaker 笔记本实例是一个完全托管的 Amazon EC2 计算实例,它运行 Jupyter 笔记本应用程序。您可以使用笔记本实例创建和管理 Jupyter 笔记本以创建 ML 工作流。 您可以使用 KFP Python 软件开发工具包或 CLI 来定义、编译、部署和运行管道。如果您没有使用 SageMaker 笔记本来运行 Jupyter,则需要安装Amazon CLI和最新版本的kubectl.

  1. 按中的步骤操作。创建 SageMaker 笔记本实例以创建 SageMaker 笔记本实例(如果还没有 SageMaker 笔记本实例)。 为此实例的 IAM 角色授予S3FullAccess权限。

  2. Amazon EKS 集群使用 IAM 用户和角色来控制对集群的访问。这些规则在名为aws-auth. 只有具有群集访问权限的用户/角色才能编辑此配置映射。从网关节点的命令行运行以下命令以获取您创建的笔记本实例的 IAM 角色。Replace<instance-name>替换为实例的名称。

    aws sagemaker describe-notebook-instance --notebook-instance-name <instance-name> --region <region> --output text --query 'RoleArn'

    此命令将在arn:aws:iam::<account-id>:role/<role-name>格式的日期和时间。记下此 ARN。

  3. 运行以下命令将策略附加到 IAM 角色。Replace<role-name><role-name>在您的 ARN 中。

    aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
  4. eksctl提供了读取和编辑aws-auth配置映射。system:masters是默认用户组之一。将用户添加到此组。这些区域有:system:masters组具有群集的超级用户权限。您还可以创建具有更多限制权限的组,也可以直接将权限绑定到用户。Replace<IAM-Role-arn>使用 IAM 角色的 ARN。<your_username>可以是任何唯一的用户名。

    eksctl create iamidentitymapping \     --cluster <cluster-name> \     --arn <IAM-Role-arn> \     --group system:masters \     --username <your-username> \     --region <region>
  5. 在 SageMaker 实例上打开 Jupyter 笔记本电脑,然后运行以下命令以验证它是否具有对集群的访问权限。

    aws eks --region <region> update-kubeconfig --name <cluster-name> kubectl -n kubeflow get all | grep pipeline

运行久保流管线

现在您的网关节点和 Amazon EKS 集群的设置已完成,您可以创建分类管道。要创建您的管道,您需要定义和编译它。然后,您可以部署它并使用它来运行工作流。 您可以在 Python 中定义管道,并使用 KFP 仪表板、KFP CLI 或 Python 软件开发工具包编译、部署和运行工作流。MNIST 分类管道示例的完整代码可在Kubeflow Github 存储库. 要使用它,请将示例 Python 文件克隆到您的网关节点。

准备数据集

要运行管道,您需要将数据提取预处理脚本上载到 Amazon S3 存储桶。此存储桶和此示例的所有资源必须位于us-east-1Amazon Recure 区域。如果您没有存储桶,请使用创建存储桶.

mnist-kmeans-sagemaker文件夹中您在网关节点上克隆的 Kubeflow 存储库,请运行以下命令以上传kmeans_preprocessing.py文件添加到您的 Amazon S3 存储桶。变更<bucket-name>设置为您创建的 Amazon S3 存储桶的名称。

aws s3 cp mnist-kmeans-sagemaker/kmeans_preprocessing.py s3://<bucket-name>/mnist_kmeans_example/processing_code/kmeans_preprocessing.py

使用 SageMaker 组件创建库布流管线

MNIST 分类管道的完整代码可在Kubeflow Github 存储库. 要使用它,请将示例 Python 文件克隆到您的网关节点。

输入参数

完整 MNIST 分类管道具有特定于运行的参数,您必须在创建运行时为其提供值。必须为管道的每个元件提供这些参数。使用其他管线时,也可以更新这些参数。 我们为示例分类管道文件中的所有参数提供了默认值。

以下是运行示例管道所需要传递的唯一参数。要传递这些参数,请在创建新运行时更新它们的条目。

  • 角色 ARN:这必须是 IAM 角色的 ARN,该 SageMaker 在您的Amazonaccount. 使用的 ARNkfp-example-pod-role.

  • 存储桶:这是您上传的 Amazon S3 存储桶的名称。kmeans_preprocessing.py文件到。

您可以使用 KFP UI 调整任何输入参数,然后再次触发运行。

编译和部署您的管道

在 Python 中定义管线后,必须将管线编译为中间表示,然后才能将其提交给 Kubeflow 管道服务。中间表示法是压缩到 tar.gz 文件中的 YAML 文件形式的工作流规范。 您需要 KFP SDK 来编译您的管道。

安装 KFP 开发工具包

从网关节点的命令行运行以下命令:

  1. 按照Kubeflow 管道文档.

  2. 使用以下命令验证 KFP SDK 是否已安装:

    pip show kfp
  3. 确认 。dsl-compile已正确安装,如下所示:

    which dsl-compile

编译您的管道

您有三个选项可以与久流管线进行交互:KFP UI、KFP CLI 或 KFP 软件开发工具包。以下各节说明了使用 KFP UI 和 CLI 的工作流程。

从您的网关节点完成以下操作以编译管道。

  1. 使用您的 Amazon S3 存储桶名称和 IAM 角色 ARN 修改您的 Python 文件。

  2. 使用dsl-compile命令来编译您的管道,如下所示。Replace<path-to-python-file>与您的管道路径,<path-to-output>与您希望您的 tar.gz 文件所在的位置。

    dsl-compile --py <path-to-python-file> --output <path-to-output>

使用 KFP CLI 上传并运行管道

从您的网关节点的命令行完成以下步骤。KFP 将管道的运行作为实验进行组织。您可以选择指定实验名称。如果不指定一个,则运行将在默认值实验。

  1. 将管道上传如下所示:

    kfp pipeline upload --pipeline-name <pipeline-name> <path-to-output-tar.gz>

    您的输出应与以下内容类似。记下ID.

    Pipeline 29c3ff21-49f5-4dfe-94f6-618c0e2420fe has been submitted Pipeline Details ------------------ ID           29c3ff21-49f5-4dfe-94f6-618c0e2420fe Name         sm-pipeline Description Uploaded at  2020-04-30T20:22:39+00:00 ... ...
  2. 使用以下命令创建运行。KFP CLI 运行命令当前不支持在创建运行时指定输入参数。在编译之前,您需要更新 Python 管道文件中的参数。Replace<experiment-name><job-name>与任何名字。Replace<pipeline-id>替换为您提交的管道的 ID。Replace<your-role-arn>的 ARNkfp-example-pod-role. Replace<your-bucket-name>替换为您创建的 Amazon S3 存储桶的名称。

    kfp run submit --experiment-name <experiment-name> --run-name <job-name> --pipeline-id <pipeline-id> role_arn="<your-role-arn>" bucket_name="<your-bucket-name>"

    您还可以使用已编译的管道包直接提交运行,作为dsl-compile命令。

    kfp run submit --experiment-name <experiment-name> --run-name <job-name> --package-file <path-to-output> role_arn="<your-role-arn>" bucket_name="<your-bucket-name>"

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

    Creating experiment aws. Run 95084a2c-f18d-4b77-a9da-eba00bf01e63 is submitted +--------------------------------------+--------+----------+---------------------------+ | run id                               | name   | status   | created at                | +======================================+========+==========+===========================+ | 95084a2c-f18d-4b77-a9da-eba00bf01e63 | sm-job |          | 2020-04-30T20:36:41+00:00 | +--------------------------------------+--------+----------+---------------------------+
  3. 导航到 UI 以检查作业的进度。

使用 KFP UI 上传和运行管道

  1. 在左侧面板上,选择管道选项卡。

  2. 在右上角,选择+ 上传管道.

  3. 输入管道名称和描述。

  4. 选择上传文件,然后输入您使用 CLI 或 Python 软件开发工具包创建的 tar.gz 文件的路径。

  5. 在左侧面板上,选择管道选项卡。

  6. 找到您创建的管线。

  7. 选择+ 创意.

  8. 输入输入参数。

  9. 选择运行

运行预测

部署分类管道后,您可以对部署组件创建的终端节点运行分类预测。使用 KFP UI 检查sagemaker-deploy-model-endpoint_name. 下载 .tgz 文件以提取终端节点名称,或检查您使用的区域中的 SageMaker 控制台。

配置运行预测的权限

如果要从网关节点运行预测,请跳过此部分。

  1. 要使用任何其他计算机运行预测,请将sagemaker:InvokeEndpoint访问客户端计算机使用的 IAM 角色或 IAM 用户的权限。此权限用于运行预测。

  2. 在网关节点上,运行以下命令以创建策略文件:

    cat <<EoF > ./sagemaker-invoke.json {     "Version": "2012-10-17",     "Statement": [         {             "Effect": "Allow",             "Action": [                 "sagemaker:InvokeEndpoint"             ],             "Resource": "*"         }     ] } EoF
  3. 将策略附加到客户端节点的 IAM 角色或 IAM 用户。

  4. 如果您的客户端计算机附加了 IAM 角色,请运行以下命令。Replace<your-instance-IAM-role>替换为客户端节点的 IAM 角色的名称。Replace<path-to-sagemaker-invoke-json>替换为您创建的策略文件的路径。

    aws iam put-role-policy --role-name <your-instance-IAM-role> --policy-name sagemaker-invoke-for-worker --policy-document file://<path-to-sagemaker-invoke-json>
  5. 如果您的客户端计算机配置了 IAM 用户证书,请运行以下命令。Replace<your_IAM_user_name>替换为客户端节点的 IAM 用户的名称。Replace<path-to-sagemaker-invoke-json>替换为您创建的策略文件的路径。

    aws iam put-user-policy --user-name <your-IAM-user-name> --policy-name sagemaker-invoke-for-worker --policy-document file://<path-to-sagemaker-invoke-json>

运行预测

  1. 从您的客户端计算机创建一个名为mnist-predictions.py,其中包含以下内容。替换ENDPOINT_NAME变量。此脚本加载 MNIST 数据集,然后从这些数字创建 CSV 并将其发送到端点进行预测。然后输出结果。

    import boto3 import gzip import io import json import numpy import pickle ENDPOINT_NAME='<endpoint-name>' region = boto3.Session().region_name # S3 bucket where the original mnist data is downloaded and stored downloaded_data_bucket = f"jumpstart-cache-prod-{region}" downloaded_data_prefix = "1p-notebooks-datasets/mnist" # Download the dataset s3 = boto3.client("s3") s3.download_file(downloaded_data_bucket, f"{downloaded_data_prefix}/mnist.pkl.gz", "mnist.pkl.gz") # Load the dataset with gzip.open('mnist.pkl.gz', 'rb') as f:     train_set, valid_set, test_set = pickle.load(f, encoding='latin1') # Simple function to create a csv from our numpy array def np2csv(arr):     csv = io.BytesIO()     numpy.savetxt(csv, arr, delimiter=',', fmt='%g')     return csv.getvalue().decode().rstrip() runtime = boto3.Session(region).client('sagemaker-runtime') payload = np2csv(train_set[0][30:31]) response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,                                    ContentType='text/csv',                                    Body=payload) result = json.loads(response['Body'].read().decode()) print(result)
  2. 按如下方式运行 Python 文件:

    python mnist-predictions.py

查看结果和日志

当管道运行时,您可以选择任何组件来检查执行详细信息,例如输入和输出。这将列出已创建资源的名称。

如果成功处理 KFP 请求并创建了 SageMaker 作业,则 KFP UI 中的组件日志将提供指向 SageMaker 中创建的作业的链接。如果作业创建成功,也会提供 CloudWatch 日志。

如果您在同一群集上运行过多的管道作业,您可能会看到一条错误消息,指示您没有足够的可用容器。要解决此问题,请登录到您的网关节点,然后按如下方式删除由未使用的管道创建的容器:

kubectl get pods -n kubeflow kubectl delete pods -n kubeflow <name-of-pipeline-pod>

Cleanup

完成使用管道后需要清除资源。

  1. 在 KFP 仪表板中,如果管道运行不正确退出,则通过选择终止.

  2. 如果终止选项不起作用,请登录网关节点并手动终止管道创建的所有容器,如下所示:

    kubectl get pods -n kubeflow kubectl delete pods -n kubeflow <name-of-pipeline-pod>
  3. 使用Amazon帐户,请登录到 SageMaker 服务。手动停止所有培训、批处理转换和 HPO 作业。删除模型、数据存储桶和终端节点,以避免产生任何额外成本。 终止管道运行并不会停止 SageMaker 中的作业。