本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Kubeflow Pipelines (KFP)
您可以在现有 Amazon Elastic Kubernetes Service (Amazon EKS) 上部署 Kubeflow Pipelines (KFP),也可以创建新的 Amazon EKS 集群。使用网关节点与您的集群进行交互。网关节点可以是您的本地计算机或 Amazon EC2 实例。
以下部分将指导您完成设置和配置这些资源的步骤。
选择安装选项
Kubeflow Pipelines 可用作 Kubeflow 完整发行版的核心组件, AWS 也可以作为独立安装使用。
选择适用于您的使用案例的选项:
-
要使用 Kubeflow Pipelines 之外的其他 Kubeflow 组件,请选择完整的 Kubeflow on AWS 分发版
部署。 -
要在不使用 Kubeflow 其他组件的情况下使用 Kubeflow Pipelines,请独立安装 Kubeflow Pipelines。
要在上安装 Kubeflow 的完整版本 AWS,请从部署指南上的 Kubeflow 中选择普通 AWS 部署
本节假设您的用户有权创建角色并为该角色定义策略。
设置网关节点
您可以使用本地计算机或 Amazon EC2 实例作为网关节点。网关节点用于创建 Amazon EKS 集群并访问 Kubeflow Pipelines UI。
完成以下步骤以设置节点。
-
创建网关节点。
您可以使用启动和配置 DLAMI 中的 EC2 步骤,使用现有的 Amazon 实例,也可以使用最新 Ubuntu 18.04 DLAMI 版本创建新实例。
-
创建 IAM 角色来授予您的网关节点对 AWS 资源的访问权限。
创建具有以下资源权限的 IAM 角色: CloudWatch、、IAM、Amazon AWS CloudFormation、Amazon S3 EC2、Amazon EKS。
将以下策略附加到 IAM 角色:
-
CloudWatchLogsFullAccess
-
IAMFull访问权限
-
亚马逊 3 FullAccess
-
Amazon EC2 FullAccess
-
亚马逊EKSAdmin政策(使用 A mazon EKS 基于身份的策略示例中的架构创建此策略)
有关将 IAM 权限添加到 IAM 角色的信息,请参阅添加和删除 IAM 身份权限。
-
-
安装以下工具和客户端
在您的网关节点上安装和配置以下工具和资源,以访问 Amazon EKS 集群和 KFP 用户界面 (UI)。
-
AWS CLI:用于处理 AWS 服务的命令行工具。有关 AWS CLI 配置信息,请参阅配置 AWS CLI。
-
aws-iam-authenticator0.1.31 及更高版本:一种使用 AWS IAM 凭证对 Kubernetes 集群进行身份验证的工具。
-
eksctl
0.15 以上的版本:用于处理 Amazon EKS 集群的命令行工具。 -
kubectl
:用于与 Kubernetes 集群一起使用的命令行工具。该版本需要在一个次要版本中与您的 Kubernetes 版本相匹配。 -
pip install boto3
-
设置 Amazon EKS 集群
-
如果您没有现有 Amazon EKS 集群,请在网关节点的命令行中运行以下步骤,否则请跳过此步骤。
-
运行以下命令创建 1.17 或更高版本的 Amazon EKS 集群。将
<clustername>
替换为您的任何集群名称。eksctl create cluster --name
<clustername>
--region us-east-1 --auto-kubeconfig --timeout=50m --managed --nodes=1 -
集群创建完成后,通过列出集群的节点来确保您可以访问集群。
kubectl get nodes
-
-
使用以下命令确保当前
kubectl
上下文指向您的集群。当前上下文在输出中以星号 (*) 标记。kubectl config get-contexts CURRENT NAME CLUSTER *
<username>
@<clustername>
.us-east-1.eksctl.io<clustername>
.us-east-1.eksctl.io -
如果所需的集群未配置为当前的默认集群,请使用以下命令更新默认集群。
aws eks update-kubeconfig --name
<clustername>
--region us-east-1
安装 Kubeflow Pipelines
从网关节点的终端运行以下步骤,以在集群上安装 Kubeflow Pipelines。
-
安装所有 cert-manager 组件
。 kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
-
安装 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"
-
确保 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 AI
在本节中,您将创建一个 IAM 执行角色,授予 Kubeflow Pipeline 容器对 SageMaker AI 服务的访问权限。
SageMaker AI 组件版本 2 的配置
要运行适用于 Kubeflow Pipelines 的 SageMaker AI 组件版本 2,你需要安装适用于 K ubernetes 的 SageMaker AI Operator
重要
如果您使用的是 Kubeflow Pipelines 独立部署,请按照本节进行操作。如果你使用的是 Kubeflow 版本 1.6.0-aws-b1.0.0 或更高版本的 AWS 发行版,那么人工智能组件版本 2 已经设置好了。 SageMaker
-
安装适用于 Kubernetes 的 SageMaker AI Operator 以使用 SageMaker 人工智能组件版本 2。
按照使用 ACK SageMaker AI Controller 的 Machine Learning 教程
中的设置部分进行 -
为 Kubeflow Pipelines Pod 使用的执行角色(服务账号)配置 RBAC 权限。在 Kubeflow Pipelines 独立部署中,使用
pipeline-runner
服务账号在命名空间kubeflow
中执行管道运行。-
创建一个 RoleBinding
,向服务帐号授予管理 SageMaker AI 自定义资源的权限。 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
-
确保 RoleBinding 是通过运行以下命令创建:
kubectl get rolebinding manage-sagemaker-cr -n kubeflow -o yaml
-
SageMaker AI 组件版本 1 的配置
要运行适用于 Kubeflow Pipelines 的 SageMaker AI 组件版本 1,Kubeflow Pipeline 容器需要访问人工智能。 SageMaker
重要
无论你是在 AWS 部署时使用完整的 Kubeflow 还是独立的 Kubeflow Pilepines,都要遵循本节。
要创建授予 Kubeflow 管道容器访问 A SageMaker I 的 IAM 执行角色,请按照以下步骤操作:
-
导出您的集群名称(例如 my-cluster-name)和集群区域(例如 us-ea st-1)。
export CLUSTER_NAME=
my-cluster-name
export CLUSTER_REGION=us-east-1
-
根据您的安装导出命名空间和服务账户名称。
-
要在 AWS 安装时获得完整的 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
-
-
使用以下命令创建适用于 Amazon EKS 集群的 IAM OIDC 提供商。
eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \ --region ${CLUSTER_REGION} --approve
-
为 KFP 容器创建一个 IAM 执行角色以访问 AWS 服务 (SageMaker AI、 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 AI 组件版本 1 后,请按照 Kubeflow 上的 Kubeflow 管道 SageMaker 人工智能组件指南中的文档进行操作。 AWS
访问 KFP UI(Kubeflow 控制面板)
Kubeflow Pipelines UI 用于管理和跟踪集群上的实验、作业和运行。有关如何从网关节点访问 Kubeflow Pipelines UI 的说明,请按照本节中适用于您的部署选项的步骤进行操作。
按照AWS 网站上 Kubeflow 上的
按照以下步骤使用端口转发从您的网关节点访问 Kubeflow Pipelines UI。
设置到 KFP UI 服务的端口转发
从网关节点的命令行运行以下命令。
-
请使用以下命令验证 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
-
运行以下命令以设置到 KFP UI 服务的端口转发。这会将 KFP UI 转发到网关节点上的端口 8080,并允许您从浏览器访问 KFP UI。
kubectl port-forward -n kubeflow service/ml-pipeline-ui 8080:80
如果没有活动,则远程计算机的端口转发就会停止。如果您的控制面板无法获取日志或更新,请再次运行此命令。如果命令返回错误,请确保您尝试使用的端口上没有正在运行的进程。
访问 KFP UI 服务
您访问 KFP UI 的方法取决于网关节点类型。
-
本地计算机作为网关节点:
-
在浏览器中访问控制面板,如下所示:
http://localhost:8080
-
选择管道以访问管道 UI。
-
-
作为网关节点的 Amazon EC2 实例:
-
您需要在您的 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} -
在浏览器中访问控制面板。
http://localhost:9000
-
选择管道以访问 KFP UI。
-
(可选)授予 SageMaker AI 笔记本实例访问 Amazon EKS 的权限,并从您的笔记本运行 KFP 管道。
SageMaker 笔记本实例是运行 Jupyter 笔记本应用程序的完全托管的 Amazon EC2 计算实例。您可以使用笔记本实例来创建和管理 Jupyter 笔记本,然后使用 AWS SDK for Python (Boto3) 或 KFP CLI 定义、编译、部署和运行 KFP 管道。
-
按照创建 SageMaker 笔记本实例中的步骤创建您的笔记本实例,然后将
S3FullAccess
策略附加到其 IAM 执行角色。 -
在网关节点的命令行中,运行以下命令以检索您创建的笔记本实例的 IAM 角色 ARN。将
<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>
格式的 IAM 角色 ARN。记下此 ARN。 -
运行此命令将以下策略(Amazon AmazonSageMakerFullAccess EKSWorker NodePolicy、AmazonS3FullAccess)附加到此 IAM 角色。将
<role-name>
替换为 ARN 中的<role-name>
。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 -
Amazon EKS 集群使用 IAM 角色来控制对集群的访问权限。这些规则是在名为
aws-auth
的配置映射中实施。eksctl
提供了读取和编辑aws-auth
配置映射的命令。只有有权访问集群的用户才能编辑此配置映射。system:masters
是具有集群超级用户权限的默认用户组之一。将您的用户添加到此组,或创建具有更严格权限的组。 -
运行以下命令以将角色绑定到您的集群。将
<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>
-
在你的 SageMaker AI 实例上打开 Jupyter 笔记本并运行以下命令以确保它可以访问集群。
aws eks --region
<region>
update-kubeconfig --name<cluster-name>
kubectl -n kubeflow get all | grep pipeline