本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
安裝 Kubeflow 管道
Kubeflow 管道 (KFP)
您可以在現有的 Amazon Elastic Kubernetes Service (Amazon EKS) 上部署 Kubeflow 管道 (KFP) 或建立新的 Amazon EKS 叢集。使用閘道節點與叢集互動。閘道節點可以是您的本機機器或 Amazon EC2 執行個體。
以下部分將引導您完成設置和設定這些資源的步驟。
選擇安裝選項
Kubeflow 管道可作為 Kubeflow 在 上完整分佈的核心元件 AWS 或獨立安裝。
選取適用於您使用案例的選項:
-
若要使用 Kubeflow 管道以外的其他 Kubeflow 元件,請選擇完整的 AWS Kubeflow 發行版
部署。 -
若要在不使用 Kubeflow 的其他元件的情況下使用 Kubeflow 管道,請獨立安裝 Kubeflow 管道。
若要在 上安裝 Kubeflow 的完整版本 AWS,請從部署指南上的 Kubeflow 或任何其他支援與各種服務 (Amazon S3、Amazon RDS、Amazon Cognito) 整合的部署選項中選擇 vanilla AWS
本節假設您的使用者具有建立角色和定義角色政策的權限。
設定閘道節點
您可以使用本機機器或 Amazon EC2 執行個體作為閘道節點。閘道節點可用來建立 Amazon EKS 叢集並存取 Kubeflow 管道使用者介面。
完成以下步驟以設定節點。
-
建立閘道節點。
您可以使用現有的 Amazon EC2 執行個體,也可以使用啟動和設定 DLAMI 中的步驟,使用最新的 Ubuntu 18.04 DLAMI 版本建立新執行個體。
-
建立 IAM 角色,向閘道節點授予對 AWS 資源的存取權。
建立具有下列資源許可的 IAM 角色:CloudWatch AWS CloudFormation、IAM、Amazon EC2、Amazon S3、Amazon EKS。
將下列內嵌政策連接到角色:
-
CloudWatchLogsFullAccess
-
IAMFullAccess
-
AmazonS3FullAccess
-
AmazonEC2FullAccess
-
AmazonEKSAdminPolicy (使用 Amazon EKS 身分型政策範例中的結構描述建立此政策)
如需與將 IAM 許可新增至 IAM 角色相關的資訊,請參閱新增和移除 IAM 身分許可。
-
-
安裝下列工具和用戶端
在閘道節點上安裝並設定下列工具和資源,以存取 Amazon EKS 叢集和 KFP 使用者介面 (UI)。
-
AWS CLI:使用 AWS 服務的命令列工具。如需 AWS CLI 組態資訊,請參閱設定 AWS CLI。
-
aws-iam-authenticator 版本 0.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 管道
從閘道節點的終端機執行下列步驟,以在叢集上安裝 Kubeflow 管道。
-
安裝所有憑證管理員元件
。 kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
-
安裝 Kubeflow 管道。
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 管道服務和其他相關資源正在執行中。
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 Pod 存取 SageMaker AI 服務的權限。
SageMaker AI 元件第 2 版的組態
若要執行適用於 Kubeflow Pipelines 的 SageMaker AI Components 第 2 版,您需要安裝適用於 Kubernetes 的 SageMaker AI Operator
重要
如果您使用 Kubeflow 管道獨立部署,請遵循本節的指示操作。如果您使用 Kubeflow 1.6.0-aws-b1.0.0 版或更新版本的 AWS 分佈,SageMaker AI 元件第 2 版已設定。
-
安裝適用於 Kubernetes 的 SageMaker AI Operator,以使用 SageMaker AI 元件第 2 版。
遵循Machine Learning與 ACK SageMaker AI 控制器教學
課程的設定一節。 -
針對 Kubeflow 管道 Pod 所使用的執行角色 (服務帳戶) 設定 RBAC 許可。在 Kubeflow 管道獨立部署中,管道執行會使用
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 管道的 SageMaker AI 元件第 1 版,Kubeflow 管道 Pod 需要存取 SageMaker AI。
重要
無論您是在 AWS 部署上使用完整的 Kubeflow,還是獨立使用 Kubeflow Pilepines,請遵循本節。
若要建立授予 Kubeflow 管道 Pod 存取 SageMaker AI 的 IAM 執行角色,請遵循下列步驟:
-
匯出您的叢集名稱 (例如my-cluster-name) 和叢集區域 (例如 us-east-1)。
export CLUSTER_NAME=
my-cluster-name
export CLUSTER_REGION=us-east-1
-
根據安裝類型,匯出命名空間和服務帳戶名稱。
-
如需 AWS 安裝時的完整 Kubeflow,請將您的設定檔
namespace
(例如 kubeflow-user-example-com) 和 default-editor 匯出為服務帳戶。export NAMESPACE=
kubeflow-user-example-com
export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=default-editor -
對於獨立管道部署,請將 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 Pod 建立存取 AWS 服務的 IAM 執行角色 (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 版後,請遵循AWS 文件上 Kubeflow
存取 KFP 使用者介面 (Kubeflow 儀表板)
Kubeflow 管道使用者介面可用來管理和追蹤叢集上的實驗、工作和執行。如需有關如何從閘道節點存取 Kubeflow 管道使用者介面的指示,請遵循本節中與您的部署選項對應的步驟。
遵循AWS 網站上的 Kubeflow
遵循以下步驟,使用連接埠轉遞功能,從閘道節點存取 Kubeflow 管道使用者介面。
設定連接埠轉送至 KFP 使用者介面服務
從閘道節點的命令列執行下列命令。
-
使用以下命令驗證 KFP 使用者介面服務是否正在執行。
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 使用者介面服務的連接埠轉送。這會將 KFP 使用者介面轉送到閘道節點上的連接埠 8080,並允許您從瀏覽器存取 KFP 使用者介面。
kubectl port-forward -n kubeflow service/ml-pipeline-ui 8080:80
如果沒有任何活動,遠端機器的連接埠轉發會停止。如果儀表板無法取得日誌或更新,請再次執行此命令。如果命令傳回錯誤,請確保您嘗試使用的連接埠上沒有任何進程已在執行。
存取 KFP 使用者介面服務
您存取 KFP 使用者介面的方法取決於閘道節點類型。
-
本地機器作為閘道節點:
-
在瀏覽器中存取儀表板,如下所示:
http://localhost:8080
-
選擇管道以存取管道使用者介面。
-
-
作為閘道節點的 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 使用者介面。
-
(選用) 授予 SageMaker AI 筆記本執行個體對 Amazon EKS 的存取權,並從筆記本執行 KFP 管道。
SageMaker 筆記本執行個體屬於全受管的 Amazon EC2 運算執行個體,其可執行 Jupyter 筆記本應用程式。您可以使用筆記本執行個體來建立和管理 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。 -
執行此命令將以下政策 (AmazonSageMakerFullAccess、AmazonEKSWorkerNodePolicy、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