Installieren von Kubeflow Pipelines - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Installieren von Kubeflow Pipelines

Kubeflow Pipelines (KFP) ist die Pipeline-Orchestrierungskomponente von Kubeflow.

Sie können Kubeflow Pipelines (KFP) auf einem vorhandenen Amazon Elastic Kubernetes Service (AmazonEKS) bereitstellen oder einen neuen Amazon-Cluster erstellen. EKS Verwenden Sie einen Gateway-Knoten, um mit Ihrem Cluster zu interagieren. Der Gateway-Knoten kann Ihr lokaler Computer oder eine EC2 Amazon-Instance sein.

Der folgende Abschnitt führt Sie durch die Schritte zur Einrichtung und Konfiguration dieser Ressourcen.

Eine Installationsoption auswählen

Kubeflow Pipelines ist als Kernkomponente der vollständigen Distribution von Kubeflow auf AWS oder als eigenständige Installation verfügbar.

Wählen Sie die Option aus, die für Ihren Anwendungsfall gilt:

  1. Vollständiger Kubeflow bei der Bereitstellung AWS

    Um zusätzlich zu Kubeflow Pipelines weitere Kubeflow-Komponenten zu verwenden, wählen Sie die vollständige AWS Distribution von Kubeflow Bereitstellung.

  2. Eigenständige Bereitstellung von Kubeflow Pipelines

    Um die Kubeflow-Pipelines ohne die anderen Komponenten von Kubeflow zu verwenden, installieren Sie Kubeflow-Pipelines eigenständig.

Um die Vollversion von Kubeflow on zu installieren AWS, wählen Sie die Vanilla-Bereitstellungsoption aus dem Kubeflow on AWS Deployment Guide oder eine andere Bereitstellungsoption, die Integrationen mit verschiedenen AWS Diensten (Amazon S3, Amazon, Amazon RDS Cognito) unterstützt.

In diesem Abschnitt wird davon ausgegangen, dass Ihr Benutzer berechtigt ist, Rollen zu erstellen und Richtlinien für die Rolle zu definieren.

Einrichten eines Gateway-Knotens

Sie können Ihren lokalen Computer oder eine EC2 Amazon-Instance als Gateway-Knoten verwenden. Ein Gateway-Knoten wird verwendet, um einen EKS Amazon-Cluster zu erstellen und auf die Kubeflow Pipelines UI zuzugreifen.

Führen Sie die folgenden Schritte aus, um Ihren Knoten einzurichten.

  1. Erstellen Sie einen Gateway-Knoten.

    Sie können eine bestehende EC2 Amazon-Instance verwenden oder eine neue Instance mit der neuesten Ubuntu DLAMI 18.04-Version erstellen, indem Sie die Schritte unter Starten und Konfigurieren von a verwenden. DLAMI

  2. Erstellen Sie eine IAM Rolle, um Ihrem Gateway-Knoten Zugriff auf Ressourcen zu AWS gewähren.

    Erstellen Sie eine IAM Rolle mit Berechtigungen für die folgenden Ressourcen: CloudWatch, AWS CloudFormation,IAM, AmazonEC2, Amazon S3, AmazonEKS.

    Fügen Sie der IAM Rolle die folgenden Richtlinien hinzu:

    Informationen zum Hinzufügen von IAM Berechtigungen zu einer IAM Rolle finden Sie unter Hinzufügen und Entfernen von IAM Identitätsberechtigungen.

  3. Installieren Sie die folgenden Tools und Clients

    Installieren und konfigurieren Sie die folgenden Tools und Ressourcen auf Ihrem Gateway-Knoten, um auf den EKS Amazon-Cluster und die KFP Benutzeroberfläche (UI) zuzugreifen.

    • AWS CLI: Das Befehlszeilentool für die Arbeit mit AWS Services. Informationen zur AWS CLI Konfiguration finden Sie unter Konfiguration von AWS CLI.

    • aws-iam-authenticatorVersion 0.1.31 und höher: Ein Tool zur Verwendung von AWS IAM Anmeldeinformationen zur Authentifizierung bei einem Kubernetes-Cluster.

    • eksctlVersion über 0.15: Das Befehlszeilentool für die Arbeit mit EKS Amazon-Clustern.

    • kubectl – Das Befehlszeilenwerkzeug für die Arbeit mit Kubernetes-Clustern. Die Version muss innerhalb einer Nebenversion mit Ihrer Kubernetes-Version übereinstimmen.

    • AWS SDK for Python (Boto3).

      pip install boto3

Einen EKS Amazon-Cluster einrichten

  1. Wenn Sie noch keinen EKS Amazon-Cluster haben, führen Sie die folgenden Schritte von der Befehlszeile Ihres Gateway-Knotens aus, andernfalls überspringen Sie diesen Schritt.

    1. Führen Sie den folgenden Befehl aus, um einen EKS Amazon-Cluster mit Version 1.17 oder höher zu erstellen. Ersetzen Sie <clustername> durch einen beliebigen Namen für Ihren Cluster.

      eksctl create cluster --name <clustername> --region us-east-1 --auto-kubeconfig --timeout=50m --managed --nodes=1
    2. Wenn die Cluster-Erstellung abgeschlossen ist, stellen Sie sicher, dass Sie Zugriff auf Ihren Cluster haben, indem Sie die Knoten des Clusters auflisten.

      kubectl get nodes
  2. Stellen Sie mit dem folgenden Befehl sicher, dass der aktuelle kubectl Kontext auf Ihren Cluster verweist. Der aktuelle Kontext ist in der Ausgabe mit einem Sternchen (*) gekennzeichnet.

    kubectl config get-contexts CURRENT NAME CLUSTER * <username>@<clustername>.us-east-1.eksctl.io <clustername>.us-east-1.eksctl.io
  3. Wenn der gewünschte Cluster nicht als Ihr aktueller Standard konfiguriert ist, aktualisieren Sie den Standard mit dem folgenden Befehl.

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

Installieren von Kubeflow Pipelines

Führen Sie die folgenden Schritte vom Terminal Ihres Gateway-Knotens aus, um Kubeflow Pipelines auf Ihrem Cluster zu installieren.

  1. Installieren Sie alle Cert-Manager-Komponenten.

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
  2. Installieren Sie die 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. Stellen Sie sicher, dass der Kubeflow Pipelines Service und andere zugehörige Ressourcen laufen.

    kubectl -n kubeflow get all | grep pipeline

    Die Ausgabe sollte wie folgt aussehen.

    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

Konfigurieren Sie Ihre Pipeline-Zugriffsberechtigungen SageMaker

In diesem Abschnitt erstellen Sie eine IAM Ausführungsrolle, die Kubeflow Pipeline-Pods Zugriff SageMaker auf Dienste gewährt.

Konfiguration für SageMaker Komponenten, Version 2

Um SageMaker Components Version 2 für Kubeflow Pipelines auszuführen, müssen Sie SageMaker Operator for Kubernetes installieren und Role-Based Access Control (RBAC) konfigurieren, sodass die Kubeflow Pipelines Pods benutzerdefinierte Ressourcen in Ihrem Kubernetes-Cluster erstellen können. SageMaker

Wichtig

Folgen Sie diesem Abschnitt, wenn Sie die eigenständige Bereitstellung von Kubeflow-Pipelines verwenden. Wenn Sie die AWS Distribution von Kubeflow Version 1.6.0-aws-b1.0.0 oder höher verwenden, sind die Komponenten Version 2 bereits eingerichtet. SageMaker

  1. Installieren Sie Operator for Kubernetes SageMaker , um die Komponentenversion 2 zu verwenden. SageMaker

    Folgen Sie dem Abschnitt „Einrichtung“ des Tutorials „Machine Learning mit ACK SageMaker Controller“.

  2. Konfigurieren Sie die RBAC Berechtigungen für die Ausführungsrolle (Dienstkonto), die von den Kubeflow Pipelines-Pods verwendet wird. Bei der eigenständigen Bereitstellung von Kubeflow-Pipelines werden die Pipelineläufe im namespacekubeflow unter Verwendung des Service-Kontos pipeline-runner ausgeführt.

    1. Erstellen Sie eine RoleBinding, die dem Dienstkonto die Erlaubnis erteilt, benutzerdefinierte Ressourcen zu verwalten 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. Stellen Sie sicher, dass die Rollenbindung erstellt wurde, indem Sie Folgendes ausführen:

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

Konfiguration für SageMaker Komponenten, Version 1

Um SageMaker Components Version 1 für Kubeflow Pipelines auszuführen, benötigen die Kubeflow Pipeline-Pods Zugriff auf. SageMaker

Wichtig

Folgen Sie diesem Abschnitt, unabhängig davon, ob Sie die vollständige Version von Kubeflow bei der Bereitstellung oder die eigenständige Version von Kubeflow Pilepines verwenden. AWS

Gehen Sie wie folgt vor, um eine IAM Ausführungsrolle zu erstellen, auf die Kubeflow-Pipeline-Pods Zugriff gewähren: SageMaker

  1. Exportieren Sie Ihren Clusternamen (z. B. my-cluster-name) und Ihre Cluster-Region (z. B. us-east-1).

    export CLUSTER_NAME=my-cluster-name export CLUSTER_REGION=us-east-1
  2. Exportieren Sie den Namespace und den Namen des Service-Kontos entsprechend Ihrer Installation.

    • Für den vollständigen Kubeflow bei der AWS Installation exportieren Sie Ihr Profil namespace (z. B. kubeflow-user-example-com) und den Standardeditor als Dienstkonto.

      export NAMESPACE=kubeflow-user-example-com export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=default-editor
    • Exportieren Sie für die eigenständige Pipelines-Bereitstellung Kubeflow als namespace und Pipeline-Runner als Service-Konto.

      export NAMESPACE=kubeflow export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=pipeline-runner
  3. Erstellen Sie mit dem folgenden Befehl einen IAM OIDC Anbieter für den EKS Amazon-Cluster.

    eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \ --region ${CLUSTER_REGION} --approve
  4. Erstellen Sie eine IAM Ausführungsrolle für die KFP Pods für den Zugriff auf AWS Dienste (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

Sobald Ihre Pipeline-Berechtigungen für den Zugriff auf SageMaker Components Version 1 konfiguriert sind, folgen Sie dem Leitfaden zu SageMaker Komponenten für Kubeflow-Pipelines in der Dokumentation zu Kubeflow on. AWS

Greifen Sie auf die KFP Benutzeroberfläche zu (Kubeflow Dashboard)

Die Kubeflow Pipelines UI wird für die Verwaltung und Nachverfolgung von Experimenten, Aufträge und Läufen in Ihrem Cluster verwendet. Anweisungen zum Zugriff auf die Kubeflow Pipelines UI von Ihrem Gateway-Knoten aus finden Sie in diesem Abschnitt in den Schritten, die für Ihre Bereitstellungsoption gelten.

Folgen Sie den Anweisungen auf der Kubeflow AWS on-Website, um eine Verbindung zum Kubeflow-Dashboard herzustellen und zur Registerkarte Pipelines zu navigieren.

Verwenden Sie die Portweiterleitung, um von Ihrem Gateway-Knoten aus auf die Benutzeroberfläche von Kubeflow Pipelines zuzugreifen, indem Sie die folgenden Schritte ausführen.

Richten Sie die Portweiterleitung zum UI-Service ein KFP

Führen Sie den folgenden Befehl von der Befehlszeile Ihres Gateway-Knotens aus.

  1. Stellen Sie mithilfe des folgenden Befehls sicher, dass der KFP UI-Dienst ausgeführt wird.

    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. Führen Sie den folgenden Befehl aus, um die Portweiterleitung zum KFP UI-Dienst einzurichten. Dadurch wird die KFP Benutzeroberfläche an Port 8080 auf Ihrem Gateway-Knoten weitergeleitet und Sie können von Ihrem Browser aus auf die KFP Benutzeroberfläche zugreifen.

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

    Die Portweiterleitung von Ihrem Remote-Computer wird unterbrochen, wenn keine Aktivität stattfindet. Führen Sie diesen Befehl erneut aus, wenn Ihr Dashboard keine Protokolle oder Updates abrufen kann. Wenn die Befehle einen Fehler zurückgeben, stellen Sie sicher, dass auf dem Port, den Sie verwenden möchten, bereits kein Prozess läuft.

Greifen Sie auf den UI-Service zu KFP

Ihre Methode für den Zugriff auf die KFP Benutzeroberfläche hängt von Ihrem Gateway-Knotentyp ab.

  • Lokaler Computer als Gateway-Knoten:

    1. Greifen Sie wie folgt auf das Dashboard in Ihrem Browser zu:

      http://localhost:8080
    2. Wählen Sie Pipelines, um auf die Pipeline-Benutzeroberfläche zuzugreifen.

  • EC2Amazon-Instance als Gateway-Knoten:

    1. Sie müssen einen SSH Tunnel auf Ihrer EC2 Amazon-Instance einrichten, um über den Browser Ihres lokalen Computers auf das Kubeflow-Dashboard zuzugreifen.

      Führen Sie in einer neuen Terminalsitzung auf Ihrem lokalen Computer Folgendes aus. <public-DNS-of-gateway-node>Ersetzen Sie es durch die IP-Adresse Ihrer Instance, die Sie auf der EC2 Amazon-Konsole gefunden haben. Sie können auch die Öffentlichkeit verwendenDNS. Ersetzen Sie <path_to_key> durch den Pfad zu dem PEM-Schlüssel, der für den Zugriff auf den Gateway-Knoten verwendet wird.

      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. Greifen Sie in Ihrem Browser auf das Dashboard zu.

      http://localhost:9000
    3. Wählen Sie Pipelines, um auf die KFP Benutzeroberfläche zuzugreifen.

(Optional) Gewähren Sie SageMaker Notebook-Instances Zugriff auf Amazon EKS und führen Sie KFP Pipelines von Ihrem Notebook aus aus.

Eine SageMaker Notebook-Instance ist eine vollständig verwaltete EC2 Amazon-Compute-Instance, auf der die Jupyter Notebook App ausgeführt wird. Sie können eine Notebook-Instance verwenden, um Jupyter-Notebooks zu erstellen und zu verwalten und dann Ihre Pipelines mithilfe von oder zu definieren, zu kompilieren, bereitzustellen und auszuführen. KFP AWS SDK for Python (Boto3) KFP CLI

  1. Folgen Sie den Schritten unter Notebook-Instanz erstellen, um Ihre SageMaker Notebook-Instanz zu erstellen, und fügen Sie dann die S3FullAccess Richtlinie der Ausführungsrolle hinzu. IAM

  2. Führen Sie in der Befehlszeile Ihres Gateway-Knotens den folgenden Befehl aus, um die IAM Rolle der ARN von Ihnen erstellten Notebook-Instanz abzurufen. Ersetzen Sie <instance-name> durch den Namen Ihrer Instance.

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

    Dieser Befehl gibt die IAM Rolle ARN im folgenden arn:aws:iam::<account-id>:role/<role-name> Format aus. Nehmen Sie das zur KenntnisARN.

  3. Führen Sie diesen Befehl aus, um die folgenden Richtlinien (AmazonSageMakerFullAccess, A mazonEKSWorkerNodePolicy, AmazonS3FullAccess) an diese IAM Rolle anzuhängen. Ersetzen Sie es <role-name> durch das <role-name> in Ihrem. 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. EKSAmazon-Cluster verwenden IAM Rollen, um den Zugriff auf den Cluster zu steuern. Die Regeln sind in einer Konfigurationsübersicht mit dem Namen aws-auth implementiert. eksctl stellt Befehle zum Lesen und Bearbeiten der aws-auth Config-Map bereit. Nur Benutzer, die Zugriff auf den Cluster haben, können diese Konfigurationsübersicht bearbeiten.

    system:masters ist eine der Standardbenutzergruppen mit Superuser-Rechten für den Cluster. Fügen Sie Ihren Benutzer zu dieser Gruppe hinzu oder erstellen Sie eine Gruppe mit restriktiveren Berechtigungen.

  5. Binden Sie die Rolle an Ihren Cluster, indem Sie den folgenden Befehl ausführen. <IAM-Role-arn>Ersetzen Sie es durch das ARN der IAM Rolle. <your_username>kann ein beliebiger eindeutiger Benutzername sein.

    eksctl create iamidentitymapping \ --cluster <cluster-name> \ --arn <IAM-Role-arn> \ --group system:masters \ --username <your-username> \ --region <region>
  6. Öffnen Sie ein Jupyter-Notebook auf Ihrer SageMaker Instance und führen Sie den folgenden Befehl aus, um sicherzustellen, dass es Zugriff auf den Cluster hat.

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