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

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

安装 Kubeflow Pipelines

Kubeflow Pipelines (KFP) 是 Kubeflow 的流水线编排组件。

你可以在现有的亚马逊 Elastic Kubernetes 服务(亚马逊KFP)上部署 Kubeflow Pipelines EKS (),也可以创建新的亚马逊集群。EKS使用网关节点与您的集群进行交互。网关节点可以是您的本地计算机或 Amazon EC2 实例。

以下部分将指导您完成设置和配置这些资源的步骤。

选择安装选项

Kubeflow Pipelines 可用作 Kubeflow 完整发行版的核心组件, Amazon 也可以作为独立安装使用。

选择适用于您的使用案例的选项:

  1. 部署时已完成 Kubeflow Amazon

    要使用 Kubeflow Pipelines 之外的其他 Kubeflow 组件,请选择完整的 Kubeflow on Amazon 分发版部署。

  2. 独立 Kubeflow Pipelines 部署

    要在不使用 Kubeflow 其他组件的情况下使用 Kubeflow Pipelines,请独立安装 Kubeflow Pipelines。

要在上安装 Kubeflow 的完整版本 Amazon,请从部署指南上的 Kubeflow 中选择普通 Amazon 部署选项,或者选择任何其他支持与各种服务( Amazon 亚马逊 S3、亚马逊、亚马RDS逊 Cognito)集成的部署选项。

本节假设您的用户有权创建角色并为该角色定义策略。

设置网关节点

您可以使用本地计算机或 Amazon EC2 实例作为网关节点。网关节点用于创建亚马逊EKS集群并访问 Kubeflow Pipelines 用户界面。

完成以下步骤以设置节点。

  1. 创建网关节点。

    您可以使用启动和EC2配置中的步骤,使用现有的 Amazon 实例,也可以使用最新 Ubuntu 18.04 DLAMI 版本创建新实例。DLAMI

  2. 创建IAM角色以授予网关节点对 Amazon 资源的访问权限。

    创建具有以下资源权限的IAM角色: CloudWatch、、、Amazon Amazon CloudFormation IAM、Amazon S3 EC2、Amazon EKS。

    将以下策略附加到该IAM角色:

    有关为IAM角色添加IAM权限的信息,请参阅添加和删除IAM身份权限

  3. 安装以下工具和客户端

    在您的网关节点上安装和配置以下工具和资源以访问 Amazon EKS 集群和KFP用户界面 (UI)。

    • Amazon CLI:用于处理 Amazon 服务的命令行工具。有关 Amazon CLI 配置信息,请参阅配置 Amazon CLI

    • aws-iam-authenticator0.1.31 及更高版本:一种使用 Amazon IAM凭据对 Kubernetes 集群进行身份验证的工具。

    • eksctl0.15 以上的版本:用于处理亚马逊EKS集群的命令行工具。

    • kubectl:用于与 Kubernetes 集群一起使用的命令行工具。该版本需要在一个次要版本中与您的 Kubernetes 版本相匹配。

    • Amazon SDK for Python (Boto3).

      pip install boto3

设置亚马逊集EKS群

  1. 如果您没有现有 Amazon EKS 集群,请在网关节点的命令行中运行以下步骤,否则请跳过此步骤。

    1. 运行以下命令创建版本为 1.17 或更高版本的 Amazon EKS 集群。将 <clustername> 替换为您的任何集群名称。

      eksctl create cluster --name <clustername> --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 Pipelines

从网关节点的终端运行以下步骤,以在集群上安装 Kubeflow Pipelines。

  1. 安装所有 cert-manager 组件

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
  2. 安装 Kubeflow Pipelines。

    export PIPELINE_VERSION=2.0.0-alpha.5 kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/cluster-scoped-resources?ref=$KFP_VERSION" kubectl wait --for condition=established --timeout=60s crd/applications.app.k8s.io kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/dev?ref=$KFP_VERSION"
  3. 确保 Kubeflow Pipelines 服务和其他相关资源正在运行。

    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

配置您的管道访问权限 SageMaker

在本节中,您将创建一个IAM执行角色,授予 Kubeflow Pipeline 容器访问服务的权限。 SageMaker

SageMaker 组件版本 2 的配置

要运行适用于 Kubeflow Pipelines 的 SageMaker 组件版本 2,你需要安装适用于 Kubernetes 的 Operato SageMaker r 并配置基于角色的访问控制 (RBAC),允许 Kubeflow Pipelines 容器在你的 Kubernetes 集群中创建自定义资源。 SageMaker

重要

如果您使用的是 Kubeflow Pipelines 独立部署,请按照本节进行操作。如果您使用的是 Kubeflow 版本 1.6.0-aws-b1.0.0 或更高版本的 Amazon 发行版,则组件版本 2 已经设置完毕。 SageMaker

  1. 为 Kubernetes 安装 SageMaker 操作员以使用 SageMaker 组件版本 2。

    按照带ACK SageMaker 控制器的 Machine Learning 教程的 “设置” 部分进行操作。

  2. 为 Kubeflow Pipelines 容器使用的执行角色(服务账号)配置RBAC权限。在 Kubeflow Pipelines 独立部署中,使用 pipeline-runner 服务账号在命名空间 kubeflow 中执行管道运行。

    1. 创建一个 RoleBinding,授予服务帐号管理 SageMaker自定义资源的权限。

      cat > manage_sagemaker_cr.yaml <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: manage-sagemaker-cr namespace: kubeflow subjects: - kind: ServiceAccount name: pipeline-runner namespace: kubeflow roleRef: kind: ClusterRole name: ack-sagemaker-controller apiGroup: rbac.authorization.k8s.io EOF
      kubectl apply -f manage_sagemaker_cr.yaml
    2. 确保 RoleBinding 是通过运行以下命令创建:

      kubectl get rolebinding manage-sagemaker-cr -n kubeflow -o yaml

SageMaker 组件版本 1 的配置

要运行 Kubeflow Pipelines 的 SageMaker 组件版本 1,Kubeflow Pipeline 容器需要访问权限。 SageMaker

重要

无论你是在 Amazon 部署时使用完整的 Kubeflow 还是独立的 Kubeflow Pilepines,都要按照本节进行操作。

要创建授予 Kubeflow 管道容器访问权限的IAM执行角色 SageMaker,请按照以下步骤操作:

  1. 导出您的集群名称(例如 my-cluster-name)和集群区域(例如 us-ea st-1)。

    export CLUSTER_NAME=my-cluster-name export CLUSTER_REGION=us-east-1
  2. 根据您的安装导出命名空间和服务账户名称。

    • 要在 Amazon 安装时获得完整的 Kubeflow,请将您的配置文件namespace(例如 kubeflow-user-example-com)和默认编辑器导出为服务账号。

      export NAMESPACE=kubeflow-user-example-com export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=default-editor
    • 要独立部署 Pipelines,请将 kubeflow 导出为 namespace,将 pipeline-runner 导出为服务账户。

      export NAMESPACE=kubeflow export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=pipeline-runner
  3. 使用以下命令为 Amazon EKS 集群创建IAMOIDC提供程序

    eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \ --region ${CLUSTER_REGION} --approve
  4. 为 KFP Pod 创建IAM执行角色以访问 Amazon 服务 (SageMaker, CloudWatch)。

    eksctl create iamserviceaccount \ --name ${KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT} \ --namespace ${NAMESPACE} --cluster ${CLUSTER_NAME} \ --region ${CLUSTER_REGION} \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \ --override-existing-serviceaccounts \ --approve

将管道权限配置为访问 SageMaker 组件版本 1 后,请按照 Kubeflow 上的 Kubeflow 管道 SageMaker 组件指南中的文档进行操作。 Amazon

访问KFP用户界面(Kubeflow 控制面板)

Kubeflow Pipelines UI 用于管理和跟踪集群上的实验、作业和运行。有关如何从网关节点访问 Kubeflow Pipelines UI 的说明,请按照本节中适用于您的部署选项的步骤进行操作。

按照Amazon 网站上 Kubeflow 上的说明连接到 Kubeflow 控制面板并导航到 “管道” 选项卡。

按照以下步骤使用端口转发从您的网关节点访问 Kubeflow Pipelines 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用户界面。

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

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

访问KFP用户界面服务

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

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

    1. 在浏览器中访问控制面板,如下所示:

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

  • 作为网关节点的 Amazon EC2 实例:

    1. 您需要在 Amazon EC2 实例上设置SSH隧道,才能从本地计算机的浏览器访问 Kubeflow 控制面板。

      在本地计算机上的新终端会话中,运行以下命令。<public-DNS-of-gateway-node>替换为在 Amazon EC2 控制台上找到的您的实例的 IP 地址。你也可以使用公众DNS。将 <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用户界面。

(可选)授予 SageMaker笔记本实例访问 Amazon 的权限EKS,并从您的笔记本运行KFP管道。

SageMaker 笔记本实例是运行 Jupyter 笔记本应用程序的完全托管的 Amazon EC2 计算实例。您可以使用笔记本实例来创建和管理 Jupyter 笔记本,然后使用 Amazon SDK for Python (Boto3) 或定义、编译、部署和运行KFP管道。KFP CLI

  1. 按照创建 SageMaker 笔记本实例中的步骤创建您的笔记本实例,然后将S3FullAccess策略附加到其IAM执行角色。

  2. 在网关节点的命令行中,运行以下命令以检索您创建的 notebook 实例ARN的IAM角色。将 <instance-name> 替换为实例的名称。

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

    此命令以以下ARNarn:aws:iam::<account-id>:role/<role-name>格式输出IAM角色。请注意这一点ARN。

  3. 运行此命令将以下策略(A AmazonSageMakerFullAccess mazonEKSWorker NodePolicy、AmazonS3FullAccess)附加到此IAM角色。<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. Amazon EKS 集群使用IAM角色来控制对集群的访问权限。这些规则是在名为 aws-auth 的配置映射中实施。eksctl 提供了读取和编辑 aws-auth 配置映射的命令。只有有权访问集群的用户才能编辑此配置映射。

    system:masters 是具有集群超级用户权限的默认用户组之一。将您的用户添加到此组,或创建具有更严格权限的组。

  5. 运行以下命令以将角色绑定到您的集群。<IAM-Role-arn>替换ARN为IAM角色的。 <your_username>可以是任何唯一的用户名。

    eksctl create iamidentitymapping \ --cluster <cluster-name> \ --arn <IAM-Role-arn> \ --group system:masters \ --username <your-username> \ --region <region>
  6. 在您的 SageMaker 实例上打开 Jupyter 笔记本并运行以下命令以确保它可以访问集群。

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