

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Installation de Kubeflow Pipelines
<a name="kubernetes-sagemaker-components-install"></a>

[Kubeflow Pipelines (KFP)](https://www.kubeflow.org/docs/components/pipelines/v2/introduction/) est le composant d'orchestration de pipelines de Kubeflow.

Vous pouvez déployer Kubeflow Pipelines (KFP) sur un cluster Amazon Elastic Kubernetes Service (Amazon EKS) existant ou créer un nouveau cluster Amazon EKS. Utilisez un nœud de passerelle pour interagir avec votre cluster. Le nœud de passerelle peut être votre machine locale ou une instance Amazon EC2.

La section suivante vous guide tout au long de la procédure d'installation et de configuration de ces ressources.

**Topics**
+ [Choisir une option d’installation](#choose-install-option)
+ [Configurez les autorisations de votre pipeline pour accéder à l' SageMaker IA](#configure-permissions-for-pipeline)
+ [Accès à l’interface utilisateur KFP (tableau de bord Kubeflow)](#access-the-kfp-ui)

## Choisir une option d’installation
<a name="choose-install-option"></a>

Kubeflow Pipelines est disponible en tant que composant principal de la distribution complète de Kubeflow AWS ou en tant qu'installation autonome.

Sélectionnez l’option qui s’applique à votre cas d’utilisation :

1. [Kubeflow complet lors du déploiement AWS](#full-kubeflow-deployment)

   Pour utiliser d'autres composants Kubeflow en plus de Kubeflow Pipelines, choisissez le déploiement complet [Distribution de Kubeflow sur AWS](https://awslabs.github.io/kubeflow-manifests). 

1. [Déploiement de Kubeflow Pipelines autonome](#kubeflow-pipelines-standalone)

   Pour utiliser Kubeflow Pipelines sans les autres composants de Kubeflow, installez les pipelines Kubeflow de manière autonome. 

### Kubeflow complet lors du déploiement AWS
<a name="full-kubeflow-deployment"></a>

Pour installer la version complète de Kubeflow AWS, choisissez l'option de déploiement standard dans le [guide de déploiement de Kubeflow on ou toute autre option de AWS déploiement](https://awslabs.github.io/kubeflow-manifests/docs/deployment/) prenant en charge les intégrations avec différents services ( AWS Amazon S3, Amazon RDS, Amazon Cognito).

### Déploiement de Kubeflow Pipelines autonome
<a name="kubeflow-pipelines-standalone"></a>

Cette section part du principe que votre utilisateur est autorisé à créer des rôles et à définir des politiques pour le rôle.

#### Configuration d’un nœud de passerelle
<a name="set-up-a-gateway-node"></a>

Vous pouvez utiliser votre machine locale ou une instance Amazon EC2 comme nœud de passerelle. Un nœud de passerelle est utilisé pour créer un cluster Amazon EKS et accéder à l’interface utilisateur de Kubeflow Pipelines. 

Suivez la procédure ci-dessous pour configurer votre nœud. 

1. 

**Créez un nœud de passerelle.**

   Vous pouvez utiliser une instance Amazon EC2 existante ou créer une nouvelle instance avec la dernière version de DLAMI Ubuntu 18.04 en suivant la procédure fournie dans [Lancement et configuration d'une DLAMI](https://docs.aws.amazon.com/dlami/latest/devguide/launch-config.html).

1. 

**Créez un rôle IAM pour accorder à votre nœud de passerelle l'accès aux AWS ressources.**

   Créez un rôle IAM avec des autorisations sur les ressources suivantes : CloudWatch,, IAM CloudFormation, Amazon EC2, Amazon S3, Amazon EKS.

   Attachez les politiques suivantes au rôle IAM :
   + CloudWatchLogsFullAccess 
   + [https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess)
   + IAMFullAccès 
   + Amazon S3 FullAccess 
   + Amazon EC2 FullAccess 
   + Amazon EKSAdmin Policy (créez cette politique à l'aide du schéma fourni par [Amazon EKS Identity-Based Policy Examples](https://docs.aws.amazon.com/eks/latest/userguide/security_iam_id-based-policy-examples.html)) 

   Pour en savoir plus sur l'ajout d'autorisations IAM à un rôle IAM, consultez [Ajout et suppression d'autorisations basées sur l'identité IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html).

1. 

**Installez les outils et clients suivants.**

   Installez et configurez les outils et ressources suivants sur votre nœud de passerelle pour accéder au cluster Amazon EKS et à l'interface utilisateur de KFP. 
   + [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html): outil de ligne de commande permettant de travailler avec AWS les services. Pour obtenir des informations de configuration AWS CLI , consultez [Configuration d' AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html). 
   + [aws-iam-authenticator](https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html)version 0.1.31 et supérieure : outil permettant d'utiliser les informations d'identification AWS IAM pour s'authentifier auprès d'un cluster Kubernetes.
   + [https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html) version supérieure à 0.15 : outil de ligne de commande permettant de travailler avec des clusters Amazon EKS.
   + [https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl) : outil de ligne de commande pour travailler avec des clusters Kubernetes. La version doit correspondre à votre version de Kubernetes dans une version mineure.
   + [https://aws.amazon.com/sdk-for-python/](https://aws.amazon.com/sdk-for-python/).

     ```
     pip install boto3
     ```

#### Configuration d’un cluster Amazon EKS
<a name="set-up-anamazon-eks-cluster"></a>

1. Si vous ne possédez pas de cluster Amazon EKS, exécutez les actions suivantes à partir de la ligne de commande de votre nœud de passerelle. Dans le cas contraire, ignorez cette étape.

   1. Exécutez la commande suivante pour créer un cluster Amazon EKS avec la version 1.17 ou ultérieure. Remplacez `<clustername>` par n’importe quel nom pour votre cluster. 

      ```
      eksctl create cluster --name {{<clustername>}} --region us-east-1 --auto-kubeconfig --timeout=50m --managed --nodes=1
      ```

   1. Une fois la création du cluster terminée, assurez-vous d'avoir accès à votre cluster en répertoriant les nœuds du cluster. 

      ```
      kubectl get nodes
      ```

1. Assurez-vous que le contexte `kubectl` actuel pointe vers votre cluster à l'aide de la commande suivante. Le contexte actuel est repéré par un astérisque (\*) dans le résultat.

   ```
   kubectl config get-contexts
   
   CURRENT NAME     CLUSTER
   *   {{<username>}}@{{<clustername>}}.us-east-1.eksctl.io   {{<clustername>}}.us-east-1.eksctl.io
   ```

1. Si le cluster souhaité n'est pas configuré comme valeur par défaut actuelle, mettez à jour la valeur par défaut à l'aide de la commande suivante. 

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

#### Installation de Kubeflow Pipelines
<a name="install-kubeflow-pipelines"></a>

Exécutez les étapes suivantes à partir du terminal de votre nœud de passerelle pour installer Kubeflow Pipelines sur votre cluster.

1. Installez tous les [composants cert-manager](https://cert-manager.io/docs/installation/kubectl/).

   ```
   kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
   ```

1. Installez les pipelines 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"
   ```

1. Assurez-vous que le service Kubeflow Pipelines et d'autres ressources connexes sont en cours d'exécution.

   ```
   kubectl -n kubeflow get all | grep pipeline
   ```

   Le résultat doit être similaire à ce qui suit.

   ```
   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
   ```

## Configurez les autorisations de votre pipeline pour accéder à l' SageMaker IA
<a name="configure-permissions-for-pipeline"></a>

Dans cette section, vous allez créer un rôle d'exécution IAM permettant aux pods Kubeflow Pipeline d'accéder aux SageMaker services d'IA. 

### Configuration pour les composants SageMaker AI version 2
<a name="permissions-for-SM-v2"></a>

Pour exécuter SageMaker AI Components version 2 pour Kubeflow Pipelines, vous devez installer [SageMaker AI Operator for Kubernetes](https://github.com/aws-controllers-k8s/sagemaker-controller) et configurer le contrôle d'accès basé sur les rôles (RBAC) permettant aux pods Kubeflow Pipelines de créer des ressources IA personnalisées dans votre cluster Kubernetes. SageMaker 

**Important**  
Suivez cette section si vous utilisez le déploiement autonome de Kubeflow Pipelines. Si vous utilisez AWS la distribution de Kubeflow version 1.6.0-aws-b1.0.0 ou supérieure, SageMaker les composants AI version 2 sont déjà configurés.

1. Installez SageMaker AI Operator pour Kubernetes pour utiliser les composants SageMaker AI version 2.

   Suivez la section *Configuration* du [didacticiel Machine Learning with ACK SageMaker AI Controller](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup).

1. Configurez les autorisations RBAC pour le rôle d’exécution (compte de service) utilisé par les pods de pipeline Kubeflow. Dans le déploiement autonome de Kubeflow Pipelines, les exécutions de pipeline s’effectuent dans l’espace de noms `kubeflow` à l’aide du compte de service `pipeline-runner`.

   1. Créez un [RoleBinding](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-example)qui autorise le compte de service à gérer les ressources personnalisées de l' SageMaker IA.

      ```
      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
      ```

   1. Assurez-vous que la liaison de rôles a été créée en exécutant :

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

### Configuration des composants de l' SageMaker IA version 1
<a name="permissions-for-SM-v1"></a>

Pour exécuter SageMaker AI Components version 1 pour Kubeflow Pipelines, les pods Kubeflow Pipeline doivent avoir accès à l'IA. SageMaker 

**Important**  
Suivez cette section, que vous utilisiez le Kubeflow complet lors du AWS déploiement ou que vous utilisiez Kubeflow Pilepines en mode autonome.

Pour créer un rôle d'exécution IAM autorisant les pods du pipeline Kubeflow à accéder à l' SageMaker IA, procédez comme suit :

1. Exportez le nom de votre cluster (par exemple, *my-cluster-name*) et la région de votre cluster (par exemple, *us-east-1*).

   ```
   export CLUSTER_NAME={{my-cluster-name}}
   export CLUSTER_REGION={{us-east-1}}
   ```

1. Exportez l'espace de noms et le nom du compte de service en fonction de votre installation.
   + Pour accéder à l'intégralité de Kubeflow lors de AWS l'installation, exportez votre profil `namespace` (par exemple *kubeflow-user-example-com*) et votre *éditeur par défaut en tant que compte de service*.

     ```
     export NAMESPACE={{kubeflow-user-example-com}}
     export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=default-editor
     ```
   + Pour le déploiement autonome de Pipelines, exportez *kubeflow* en tant que `namespace` et *pipeline-runner* en tant que compte de service.

     ```
     export NAMESPACE=kubeflow
     export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=pipeline-runner
     ```

1. Créez un [fournisseur OIDC IAM pour le cluster Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) avec la commande suivante.

   ```
   eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \
               --region ${CLUSTER_REGION} --approve
   ```

1. Créez un rôle d'exécution IAM pour que les pods KFP puissent accéder aux AWS services (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
   ```

Une fois que vos autorisations de pipeline sont configurées pour accéder à la version 1 d' SageMaker AI Components, suivez le guide des composants SageMaker AI pour les pipelines Kubeflow sur la documentation de [Kubeflow](https://awslabs.github.io/kubeflow-manifests/docs/amazon-sagemaker-integration/sagemaker-components-for-kubeflow-pipelines/). AWS 

## Accès à l’interface utilisateur KFP (tableau de bord Kubeflow)
<a name="access-the-kfp-ui"></a>

L’interface utilisateur de Kubeflow Pipelines sert à gérer et suivre les expériences, les tâches et les exécutions sur votre cluster. Pour obtenir des instructions sur l'accès à l'interface utilisateur de Kubeflow Pipelines à partir de votre nœud de passerelle, suivez les étapes qui s'appliquent à votre option de déploiement dans cette section.

### Kubeflow complet lors du déploiement AWS
<a name="access-kfp-ui-full-kubeflow-deployment"></a>

Suivez les instructions du [AWS site Web de Kubeflow on](https://awslabs.github.io/kubeflow-manifests/docs/deployment/connect-kubeflow-dashboard/) pour vous connecter au tableau de bord Kubeflow et accéder à l'onglet pipelines.

### Déploiement de Kubeflow Pipelines autonome
<a name="access-kfp-ui-standalone-kubeflow-pipelines-deployment"></a>

Utilisez le transfert de port pour accéder à l'interface utilisateur de Kubeflow Pipelines à partir de votre nœud de passerelle, en suivant ces étapes.

#### Configuration du transfert de port vers le service d’interface utilisateur de KFP
<a name="set-up-port-forwarding-to-the-kfp-ui-service"></a>

Exécutez la commande suivante à partir de la ligne de commande de votre nœud de passerelle.

1. Vérifiez que le service d'interface utilisateur de KFP est en cours d'exécution en utilisant la commande suivante :

   ```
   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
   ```

1. Exécutez la commande suivante pour configurer le transfert de port vers le service d’interface utilisateur de KFP. Cela transfère l'interface utilisateur de KFP vers le port 8080 de votre nœud de passerelle et vous permet d'accéder à l'interface utilisateur de KFP à partir de votre navigateur. 

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

   Le transfert de port de votre machine distante s'arrête s'il n'y a pas d'activité. Exécutez à nouveau cette commande si votre tableau de bord ne parvient pas à obtenir des journaux ou des mises à jour. Si les commandes renvoient une erreur, assurez-vous qu'aucun processus n'est déjà en cours d'exécution sur le port que vous essayez d'utiliser. 

#### Accès au service d'interface utilisateur de KFP
<a name="set-up-port-forwarding-to-the-kfp-ui-service-access"></a>

Votre méthode d’accès à l’interface utilisateur de KFP dépend du type de nœud de passerelle.
+ Machine locale en tant que nœud de passerelle :

  1. Accédez au tableau de bord dans votre navigateur comme suit : 

     ```
     http://localhost:8080
     ```

  1. Choisissez **Pipelines** pour accéder à l’interface utilisateur de Pipelines. 
+ Instance Amazon EC2 en tant que nœud de passerelle :

  1. Vous devez configurer un tunnel SSH sur votre instance Amazon EC2 pour accéder au tableau de bord Kubeflow à partir du navigateur de votre machine locale. 

     À partir d’une nouvelle session de terminal sur votre machine locale, exécutez ce qui suit. Remplacez `<public-DNS-of-gateway-node>` par l'adresse IP de votre instance qui se trouve sur la console Amazon EC2. Vous pouvez également utiliser le DNS public. Remplacez `<path_to_key>` par le chemin d'accès à la clé PEM utilisée pour accéder au nœud de passerelle. 

     ```
     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}
     ```

  1. Accédez au tableau de bord dans votre navigateur. 

     ```
     http://localhost:9000
     ```

  1. Choisissez **Pipelines** pour accéder à l’interface utilisateur de KFP. 

#### (Facultatif) Accordez aux instances de bloc-notes SageMaker AI l'accès à Amazon EKS et exécutez des pipelines KFP depuis votre bloc-notes.
<a name="add-access-to-additional-iam-users-or-roles"></a>

Une instance de SageMaker bloc-notes est une instance de calcul Amazon EC2 entièrement gérée qui exécute l'application Jupyter Notebook. Vous utilisez une instance de bloc-notes pour créer et gérer les blocs-notes Jupyter, puis définir, compiler, déployer et exécuter vos pipelines KFP à l'aide du kit AWS SDK pour Python (Boto3) ou de l'interface de ligne de commande KFP. 

1. Suivez les étapes décrites dans [Créer une instance de SageMaker bloc-notes](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-setup-working-env.html) pour créer votre instance de bloc-notes, puis associez la `S3FullAccess` politique à son rôle d'exécution IAM.

1. À partir de la ligne de commande de votre nœud de passerelle, exécutez la commande suivante pour récupérer l'ARN de rôle IAM de l'instance de bloc-notes que vous avez créée. Remplacez `<instance-name>` par le nom de votre instance.

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

   Cette commande fournit en sortie l'ARN du rôle IAM au format `arn:aws:iam::<account-id>:role/<role-name>`. Notez cet ARN.

1. Exécutez cette commande pour associer les politiques suivantes (Amazon AmazonSageMakerFullAccess EKSWorkerNodePolicy, AmazonS3FullAccess) à ce rôle IAM. Remplacez `<role-name>` par le `<role-name>` dans votre 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
   ```

1. Les clusters Amazon EKS utilisent des rôles IAM pour contrôler l'accès au cluster. Les règles sont implémentées dans une carte de configuration nommée `aws-auth`. `eksctl` fournit des commandes pour lire et modifier la carte de configuration `aws-auth`. Seuls les utilisateurs ayant accès au cluster peuvent modifier cette carte de configuration.

   `system:masters` est l'un des groupes d'utilisateurs par défaut dotés d'autorisations de super-utilisateur sur le cluster. Ajoutez votre utilisateur à ce groupe ou créez un groupe doté d'autorisations plus restrictives.

1. Liez le rôle à votre cluster en exécutant la commande suivante. Remplacez `<IAM-Role-arn>` par l’ARN du rôle IAM. `<your_username>` peut être n’importe quel nom d’utilisateur unique.

   ```
   eksctl create iamidentitymapping \
   --cluster {{<cluster-name>}} \
   --arn {{<IAM-Role-arn>}} \
   --group system:masters \
   --username {{<your-username>}} \
   --region {{<region>}}
   ```

1. Ouvrez un bloc-notes Jupyter sur votre instance SageMaker AI et exécutez la commande suivante pour vous assurer qu'il a accès au cluster.

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