

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Kubeflow Pipelines をインストールする
<a name="kubernetes-sagemaker-components-install"></a>

[Kubeflow Pipelines (KFP)](https://www.kubeflow.org/docs/components/pipelines/v2/introduction/) は Kubeflow のパイプラインオーケストレーションコンポーネントです。

Kubeflow Pipelines (KFP) を既存の Amazon Elastic Kubernetes Service (Amazon EKS) にデプロイすることも、新しい Amazon EKS クラスターを作成することもできます。ゲートウェイノードを使用してクラスターとやりとりします。ローカルマシンまたは Amazon EC2 インスタンスをゲートウェイノードにすることができます。

以下のセクションでは、これらのリソースをセットアップして設定する手順を説明します。

**Topics**
+ [インストールオプションの選択](#choose-install-option)
+ [SageMaker AI にアクセスするためにパイプラインアクセス許可を設定する](#configure-permissions-for-pipeline)
+ [KFP UI (Kubeflow ダッシュボード) にアクセスする](#access-the-kfp-ui)

## インストールオプションの選択
<a name="choose-install-option"></a>

Kubeflow Pipelines は、 での Kubeflow の完全なディストリビューションのコアコンポーネントとして、 AWS またはスタンドアロンインストールとして使用できます。

ユースケースに該当するオプションを選択します。

1. [AWS デプロイ時のフル Kubeflow](#full-kubeflow-deployment)

   [Kubeflow Pipelines に加えて他の Kubeflow コンポーネントを使用するには、完全な Kubeflow のAWS ディストリビューション](https://awslabs.github.io/kubeflow-manifests) デプロイを選択します。

1. [Kubeflow Pipelines のスタンドアロンデプロイ](#kubeflow-pipelines-standalone)

   Kubeflow の他のコンポーネントなしで Kubeflow Pipelines を使用するには、Kubeflow パイプラインをスタンドアロンでインストールします。

### AWS デプロイ時のフル Kubeflow
<a name="full-kubeflow-deployment"></a>

Kubeflow のフルリリースを にインストールするには AWS、デプロイ[ガイドの Kubeflow からバニラ AWS](https://awslabs.github.io/kubeflow-manifests/docs/deployment/)デプロイオプションを選択するか、さまざまな AWS サービス (Amazon S3、Amazon RDS、Amazon Cognito) との統合をサポートするその他のデプロイオプションを選択します。

### Kubeflow Pipelines のスタンドアロンデプロイ
<a name="kubeflow-pipelines-standalone"></a>

このセクションは、ユーザーがロールを作成し、そのロールのポリシーを定義するアクセス許可を持っていることを前提としています。

#### ゲートウェイノードを設定する
<a name="set-up-a-gateway-node"></a>

ローカルマシンまたは Amazon EC2 インスタンスをゲートウェイノードとして使用できます。ゲートウェイノードは、Amazon EKS クラスターを作成し、Kubeflow パイプライン UI にアクセスするために使用されます。

以下の手順を実行して、ノードを設定します。

1. 

**ゲートウェイノードを作成します。**

   既存の Amazon EC2 インスタンスを使用して、「[Launching and Configuring a DLAMI](https://docs.aws.amazon.com/dlami/latest/devguide/launch-config.html)」の手順に従って、最新の Ubuntu 18.04 DLAMI バージョンで新しいインスタンスを作成します。

1. 

**IAM ロールを作成して、ゲートウェイノードに AWS リソースへのアクセスを許可します。**

   CloudWatch、、IAM、Amazon EC2、Amazon S3 CloudFormation、Amazon EKS のリソースへのアクセス許可を持つ IAM ロールを作成します。 Amazon S3

   次のポリシーを 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)
   + IAMFullAccess 
   + AmazonS3FullAccess 
   + AmazonEC2FullAccess 
   + AmazonEKSAdminPolicy (「[Amazon EKS アイデンティティベースのポリシーの例](https://docs.aws.amazon.com/eks/latest/userguide/security_iam_id-based-policy-examples.html)」のスキーマを使用してこのポリシーを作成) 

   IAM アクセス許可を IAM ロールに追加する方法については、「[IAM ID のアクセス許可の追加および削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)」を参照してください。

1. 

**以下のツールとクライアントをインストールします。**

   Amazon EKS クラスターと KFP ユーザーインターフェイス (UI) にアクセスするために、ゲートウェイノードに以下のツールとリソースをインストールして設定します。
   + [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html): AWS サービスを操作するためのコマンドラインツール。 AWS CLI の設定情報については、「[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) バージョン 0.1.31 以降: AWS IAM 認証情報を使用して Kubernetes クラスターへの認証を行うツール。
   + [https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html) バージョン 0.15 以降: Amazon EKS クラスターを操作するためのコマンドラインツール。
   + [https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl): Kubernetes クラスターを操作するためのコマンドラインツール。バージョンは、マイナーバージョン 1 つ差以内で Kubernetes のバージョンに合わせる必要があります。
   + [https://aws.amazon.com/sdk-for-python/](https://aws.amazon.com/sdk-for-python/).

     ```
     pip install boto3
     ```

#### Amazon EKS クラスターを設定する
<a name="set-up-anamazon-eks-cluster"></a>

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

   1. クラスターの作成が完了したら、クラスターのノードを一覧表示してクラスターにアクセスできることを確認します。

      ```
      kubectl get nodes
      ```

1. 次のコマンドを使用して、現在の `kubectl` コンテキストがクラスターを指していることを確認します。出力では、現在のコンテキストはアスタリスク (\$1) でマークされています。

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

1. 目的のクラスターが現在のデフォルトとして設定されていない場合は、以下のコマンドを使用してデフォルトを更新します。

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

#### Kubeflow Pipelines をインストールする
<a name="install-kubeflow-pipelines"></a>

ゲートウェイノードのターミナルから以下の手順を実行して、クラスターに Kubeflow Pipelines をインストールします。

1. [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. 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"
   ```

1. 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 にアクセスするためにパイプラインアクセス許可を設定する
<a name="configure-permissions-for-pipeline"></a>

このセクションでは、Kubeflow Pipeline ポッドに SageMaker AI サービスへのアクセスを許可する IAM 実行ロールを作成します。

### SageMaker AI コンポーネントバージョン 2 の設定
<a name="permissions-for-SM-v2"></a>

Kubeflow Pipelines 向けの SageMaker AI Components バージョン 2 を実行するには、[SageMaker AI Operator for Kubernetes](https://github.com/aws-controllers-k8s/sagemaker-controller) をインストールし、Kubernetes クラスターに SageMaker AI カスタムリソースを作成することを Kubeflow Pipelines ポッドに許可する、ロールベースのアクセスコントロール (RBAC) を設定する必要があります。

**重要**  
Kubeflow Pipelines のスタンドアロンデプロイを使用している場合は、このセクションに従ってください。Kubeflow バージョン 1.6.0-aws-b1.0.0 以降の AWS ディストリビューションを使用している場合、SageMaker AI コンポーネントバージョン 2 はすでに設定されています。

1. SageMaker AI Operator for Kubernetes をインストールして、SageMaker AI コンポーネントバージョン 2 を使用します。

   「[ACK SageMaker Controller を使用した機械学習のチュートリアル](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup)」の「*設定*」セクションに従います。

1. Kubeflow Pipelines ポッドが使用する実行ロール (サービスアカウント) の RBAC アクセス許可を設定します。Kubeflow Pipelines スタンドアロンデプロイでは、パイプラインの実行は `pipeline-runner` サービスアカウントを使用して名前空間 `kubeflow` で行われます。

   1. SageMaker AI カスタムリソースを管理するアクセス許可をサービスアカウントに付与する [RoleBinding](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-example) を作成します。

      ```
      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. 以下を実行してロールバインディングが作成されたことを確認します。

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

### SageMaker AI コンポーネントバージョン 1 の設定
<a name="permissions-for-SM-v1"></a>

Kubeflow Pipelines 向け SageMaker AI Components のバージョン 1 を実行するには、Kubeflow Pipeline ポッドが SageMaker AI にアクセスする必要があります。

**重要**  
 AWS デプロイで完全な Kubeflow を使用している場合も、Kubeflow Pilepines スタンドアロンを使用している場合も、このセクションに従ってください。

Kubeflow パイプラインポッドに SageMaker AI へのアクセスを許可する IAM 実行ロールを作成するには、次の手順に従います。

1. クラスター名 (*my-cluster-name* など) とクラスターリージョン (*us-east-1* など) をエクスポートします。

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

1. インストールに応じて、名前空間とサービスアカウント名をエクスポートします。
   +  AWS インストール時に Kubeflow 全体を表示するには、プロファイル `namespace` (*kubeflow-user-example-com* など) と *default-editor* をサービスアカウントとしてエクスポートします。

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

1. 次のコマンドを使用して、[Amazon EKS クラスター用の IAM OIDC プロバイダー](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)を作成します。

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

1.  AWS サービス (SageMaker AI、CloudWatch) にアクセスするための KFP ポッドの IAM 実行ロールを作成します。

   ```
   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 AI コンポーネントガイドに従ってください。[AWS](https://awslabs.github.io/kubeflow-manifests/docs/amazon-sagemaker-integration/sagemaker-components-for-kubeflow-pipelines/)

## KFP UI (Kubeflow ダッシュボード) にアクセスする
<a name="access-the-kfp-ui"></a>

Kubeflow Pipelines UI を使用すると、クラスターで実験、ジョブ、実行を管理および追跡できます。ゲートウェイノードから Kubeflow Pipelines UI にアクセスする方法については、このセクションのデプロイオプションに適用される手順に従ってください。

### AWS デプロイ時のフル Kubeflow
<a name="access-kfp-ui-full-kubeflow-deployment"></a>

[AWS ウェブサイトの Kubeflow](https://awslabs.github.io/kubeflow-manifests/docs/deployment/connect-kubeflow-dashboard/) の指示に従って Kubeflow ダッシュボードに接続し、パイプラインタブに移動します。

### Kubeflow Pipelines のスタンドアロンデプロイ
<a name="access-kfp-ui-standalone-kubeflow-pipelines-deployment"></a>

次の手順に従って、ポート転送を使用してゲートウェイノードから Kubeflow Pipelines UI にアクセスします。

#### KFP UI サービスへのポート転送を設定する
<a name="set-up-port-forwarding-to-the-kfp-ui-service"></a>

ゲートウェイノードのコマンドラインから以下のコマンドを実行します。

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

1. 以下のコマンドを実行して、KFP UI サービスへのポート転送を設定します。これにより、KFP UI がゲートウェイノードのポート 8080 に転送され、ブラウザから KFP UI にアクセスできるようになります。

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

   アクティビティがないと、リモートマシンからのポート転送はドロップされます。ダッシュボードでログや更新を取得できない場合は、このコマンドを再度実行します。コマンドでエラーが返される場合は、使用しようとしているポートで実行中のプロセスがないことを確認します。

#### KFP UI サービスにアクセスする
<a name="set-up-port-forwarding-to-the-kfp-ui-service-access"></a>

KFP UI へのアクセス方法は、ゲートウェイノードのタイプによって異なります。
+ ゲートウェイノードにローカルマシンを使用する場合:

  1. 以下の手順を実行して、ブラウザでダッシュボードにアクセスします。

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

  1. **[Pipelines]** (パイプライン) を選択して、パイプライン UI にアクセスします。
+ ゲートウェイノードに Amazon EC2 インスタンスを使用する場合:

  1. Kubeflow ダッシュボードにローカルマシンのブラウザからアクセスするには、Amazon EC2 インスタンスに SSH トンネルを設定する必要があります。

     ローカルマシンの新しいターミナルセッションから、以下のコマンドを実行します。`<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}
     ```

  1. ブラウザでダッシュボードにアクセスします。

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

  1. **[Pipelines]** (パイプライン) を選択して、KFP UI にアクセスします。

#### (オプション) SageMaker AI ノートブックインスタンスに Amazon EKS へのアクセス権を付与して、ノートブックから KFP パイプラインを実行します。
<a name="add-access-to-additional-iam-users-or-roles"></a>

SageMaker ノートブックインスタンスは、Jupyter Notebook アプリを実行するフルマネージド Amazon EC2 コンピューティングインスタンスです。ノートブックインスタンスを使用して、Jupyter Notebook を作成、管理できます。また、 AWS SDK for Python (Boto3) や KFP CLI を使用して KFP パイプラインを定義、コンパイル、デプロイ、実行できます。

1. 「[Create a SageMaker Notebook Instance](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-setup-working-env.html)」の手順に従ってノートブックインスタンスを作成し、`S3FullAccess` ポリシーを IAM 実行ロールにアタッチします。

1. ゲートウェイノードのコマンドラインから以下のコマンドを実行し、作成したノートブックインスタンスの IAM ロール ARN を取得します。`<instance-name>` は、インスタンスの名前に置き換えます。

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

   このコマンドでは、IAM ロールの ARN が `arn:aws:iam::<account-id>:role/<role-name>` の形式で出力されます。この ARN を書き留めておきます。

1. 次のコマンドを実行して、以下のポリシー (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
   ```

1. Amazon EKS クラスターは IAM ロールを使用して、クラスターへのアクセスを制御します。ルールは `aws-auth` という名前の設定マップに実装されています。`eksctl` は `aws-auth` 設定マップを読み込んで編集するコマンドを提供します。クラスターにアクセスできるユーザーだけがこの設定マップを編集できます。

   `system:masters` は、クラスターへのスーパーユーザーアクセス許可を持つデフォルトのユーザーグループの 1 つです。このグループにユーザーを追加するか、より制限の厳しいアクセス許可を持つグループを作成します。

1. 次のコマンドを実行して、クラスターにロールをバインディングします。`<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>
   ```

1. SageMaker AI インスタンスで Jupyter ノートブックを開き、以下のコマンドを実行してクラスターへのアクセス権があることを確認します。

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