AI Platform Pipelines 用の Google Kubernetes Engine クラスタを構成する

AI Platform Pipelines を使用すると、Google Kubernetes Engine で TensorFlow Extended を使用して Kubeflow Pipelines を簡単に開始でき、以下の問題が解消されます。

  • GKE クラスタの作成
  • Kubeflow Pipelines から GKE クラスタへのデプロイ
  • パイプライン アーティファクトの格納に使用する Cloud Storage バケットの作成

必要に応じて、AI Platform Pipelines を使用して、Kubeflow Pipelines がまだインストールされていない既存のクラスタに Kubeflow Pipelines をデプロイできます。このガイドを使用して、クラスタが Kubeflow Pipelines をデプロイして実行するように正しく構成されていることを確認してください。

GKE クラスタに AI Platform Pipelines 用の十分なリソースがあることを確認する

Google Cloud Marketplace を使用して GKE クラスタに Kubeflow Pipelines をデプロイするには、次の条件を満たしている必要があります。

  • クラスタには少なくとも 3 つのノードが必要です。各ノードには、少なくとも 2 つの CPU と 4 GB のメモリが必要です。
  • クラスタのアクセス スコープですべての Cloud APIs への完全アクセス権を付与するか、クラスタでカスタム サービス アカウントを使用する必要があります。
  • クラスタに Kubeflow Pipelines がインストールされていない状態である必要があります。

次の手順を行い、クラスタに AI Platform Pipelines をインストールするための十分なリソースがあるかを確認します。

  1. Google Cloud コンソールで AI Platform Pipelines を開きます。

    AI Platform Pipelines に移動

  2. AI Platform Pipelines ツールバーで、[新しいインスタンス] をクリックします。Kubeflow Pipelines が Google Cloud Marketplace で開きます。

  3. [構成] をクリックします。[「Kubeflow Pipelines」をデプロイ] フォームが開きます。

  4. [クラスタ] をクリックしてリストを展開します。十分なリソースや権限がない GKE クラスタは、対象外のクラスタとしてリストされます。それぞれの対象外のクラスタには、以下のように、Kubeflow Pipelines をインストールできない説明が含まれています。

GKE クラスタに追加のリソースを割り当てる

Google Cloud Marketplace から既存の GKE クラスタに Kubeflow Pipelines をインストールするには、クラスタには、2 つの CPU と 4 GB の使用可能なメモリを持つノードが 3 つ以上必要です。

以下の手順で、クラスタ内のノードプールを AI Platform Pipelines 用の十分な CPU リソース、メモリリソースを持つノードプールに置き換えます。

  1. Google Cloud コンソールで Google Kubernetes Engine クラスタを開きます。

    GKE クラスタに移動

  2. クラスタ名をクリックします。クラスタの詳細が表示されます。

  3. GKE ツールバーで [ノードプールを追加] をクリックします。[新しいノードプールの追加] フォームが開きます。

  4. [新しいノードプールを追加] フォームに次の情報を入力します。

    • ノード数: ノードプール内のノード数を指定します。Google Cloud Marketplace を使用して Kubeflow Pipelines をインストールするには、クラスタに 3 つ以上のノードが必要です。
    • マシンタイプ: ノードプール内のインスタンスに使用する Compute Engine マシンタイプを指定します。少なくとも 2 つの CPU と 4 GB のメモリを備えたマシンタイプ(n1-standard-2 など)を選択します。

    • アクセス スコープ: [アクセス スコープ] で [すべての Cloud APIs への完全アクセス権を許可する] をクリックします。

    それ以外の場合は、必要に応じてノードプールを構成します。クラスタへのノードプールの追加の詳細を確認してください。

  5. [ノードプールを作成] をクリックします。ノードプールの作成には数分かかります。

  6. [ノードプール] セクションの各ノードプール(前の手順で作成したノードプールを除く)で、 [削除] をクリックします。このノードプールの削除を確認する、[ノードプールの削除] ダイアログが表示されます。

  7. [削除] をクリックします。ノードプールの削除には数分かかります。

  8. 古いノードプールを削除したら、クラスタに十分なリソースがあり、Google Cloud Marketplace から Kubeflow Pipelines をインストールできることを確認します

GKE クラスタに Google Cloud リソースと API へのアクセスを許可する

ML パイプラインに Google Cloud のリソースと API へのアクセスを許可する方法として、以下の 3 つがあります。

AI Platform Pipelines をデプロイするときは、GKE クラスタに Google Cloud リソースと API への完全アクセス権を付与するか、サービス アカウントを使用してクラスタに Google Cloud へのアクセス権を付与する必要があります。

Google Cloud APIs への完全アクセス権を持つ GKE クラスタの構成

ML パイプラインやその他の GKE クラスタ ワークロードでプロジェクトの Google Cloud リソースに簡単にアクセスできるようにするには、クラスタを https://www.googleapis.com/auth/cloud-platform アクセス スコープに構成します。このアクセス スコープは、プロジェクトで有効にした Google Cloud リソースと API への完全アクセス権を提供します。このアクセス スコープを付与することで Google Cloud への必要以上のアクセスが生じる場合は、サービス アカウントを使用してきめ細かなアクセスを構成します。

次の手順に沿ってクラスタのノードプールを、プロジェクトで有効になっているすべての Google Cloud APIs に対するアクセス権をこのクラスタ上のすべてのワークロードに許可するノードプールと交換します。GKE クラスタを変更する前に、GKE 管理者とこれらの変更について確認してください。

  1. Google Cloud コンソールで Google Kubernetes Engine クラスタを開きます。

    GKE クラスタに移動

  2. クラスタ名をクリックします。クラスタの詳細が表示されます。

  3. GKE ツールバーで [ノードプールを追加] をクリックします。[新しいノードプールの追加] フォームが開きます。

  4. [新しいノードプールを追加] フォームに次の情報を入力します。

    • ノード数: ノードプール内のノード数を指定します。Google Cloud Marketplace を使用して Kubeflow Pipelines をインストールするには、クラスタに 3 つ以上のノードが必要です。
    • マシンタイプ: ノードプール内のインスタンスに使用する Compute Engine マシンタイプを指定します。少なくとも 2 つの CPU と 4 GB のメモリを備えたマシンタイプ(n1-standard-2 など)を選択します。

    • アクセス スコープ: [アクセス スコープ] で [すべての Cloud APIs への完全アクセス権を許可する] をクリックします。

    それ以外の場合は、必要に応じてノードプールを構成します。クラスタへのノードプールの追加の詳細を確認してください。

  5. [ノードプールを作成] をクリックします。ノードプールの作成には数分かかります。

  6. [ノードプール] セクションの各ノードプール(前の手順で作成したノードプールを除く)で、 [削除] をクリックします。このノードプールの削除を確認する、[ノードプールの削除] ダイアログが表示されます。

  7. [削除] をクリックします。ノードプールの削除には数分かかります。

  8. 古いノードプールを削除したら、クラスタに十分なリソースがあり、Google Cloud Marketplace から Kubeflow Pipelines をインストールできることを確認します

Google Cloud APIs へのきめ細かなアクセス権を持つ GKE クラスタの構成

次の手順に従って、GKE クラスタのサービス アカウントを構成し、クラスタのノードプールをサービス アカウントを使用するものに置き換えます。サービス アカウントを作成することで、クラスタ上のワークロードでアクセスできる Google Cloud リソースを細かく管理できます。GKE クラスタを変更する前に、GKE 管理者とこれらの変更について確認してください。

  1. Cloud Shell セッションを開きます。

    Cloud Shell を開く

    Cloud Shell は、Google Cloud Console の下部にあるフレームに表示されます。

  2. Cloud Shell で次のコマンドを実行して、サービス アカウントを作成し、AI Platform Pipelines を実行するのに十分なアクセス権を付与します。詳しくは、ユーザーが管理するサービス アカウントで AI Platform Pipelines を実行するために必要なロールをご覧ください。

    export PROJECT=PROJECT_ID
    export SERVICE_ACCOUNT=SERVICE_ACCOUNT_NAME
    gcloud iam service-accounts create $SERVICE_ACCOUNT \
      --display-name=$SERVICE_ACCOUNT \
      --project=$PROJECT
    gcloud projects add-iam-policy-binding $PROJECT \
      --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT.iam.gserviceaccount.com" \
      --role=roles/logging.logWriter
    gcloud projects add-iam-policy-binding $PROJECT \
      --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT.iam.gserviceaccount.com" \
      --role=roles/monitoring.metricWriter
    gcloud projects add-iam-policy-binding $PROJECT \
      --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT.iam.gserviceaccount.com" \
      --role=roles/monitoring.viewer
    gcloud projects add-iam-policy-binding $PROJECT \
      --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT.iam.gserviceaccount.com" \
      --role=roles/storage.objectViewer

    以下を置き換えます。

    • SERVICE_ACCOUNT_NAME: 作成するサービス アカウントの名前。
    • PROJECT_ID: サービス アカウントが作成される Google Cloud プロジェクト。
  3. ML パイプラインに必要な Google Cloud リソースまたは API へのアクセス権をサービス アカウントに付与します。詳しくは、Identity and Access Management のロールサービス アカウントの管理についてご覧ください。

  4. ユーザー アカウントにサービス アカウントのサービス アカウント ユーザー(iam.serviceAccountUser)のロールを付与します。

    gcloud iam service-accounts add-iam-policy-binding \
      "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
      --member=user:USERNAME \
      --role=roles/iam.serviceAccountUser
    

    以下を置き換えます。

    • SERVICE_ACCOUNT_NAME: サービス アカウントの名前。
    • PROJECT_ID: Google Cloud プロジェクト。
    • USERNAME: Google Cloud のユーザー名。
  5. Google Cloud コンソールで Google Kubernetes Engine クラスタを開きます。

    GKE クラスタに移動

  6. クラスタ名をクリックします。クラスタの詳細が表示されます。

  7. GKE ツールバーで [ノードプールを追加] をクリックします。[新しいノードプールの追加] フォームが開きます。

  8. [新しいノードプールを追加] フォームに次の情報を入力します。

    • ノード数: ノードプール内のノード数を指定します。Google Cloud Marketplace を使用して Kubeflow Pipelines をインストールするには、クラスタに 3 つ以上のノードが必要です。
    • マシンタイプ: ノードプール内のインスタンスに使用する Compute Engine マシンタイプを指定します。少なくとも 2 つの CPU と 4 GB のメモリを備えたマシンタイプ(n1-standard-2 など)を選択します。

    • サービス アカウント: 前の手順で作成したサービス アカウントを選択します。

    それ以外の場合は、必要に応じてノードプールを構成します。クラスタへのノードプールの追加の詳細を確認してください。

  9. [ノードプールを作成] をクリックします。ノードプールの作成には数分かかります。

  10. [ノードプール] セクションの各ノードプール(前の手順で作成したノードプールを除く)で、 [削除] をクリックします。このノードプールの削除を確認する、[ノードプールの削除] ダイアログが表示されます。

  11. [削除] をクリックします。ノードプールの削除には数分かかります。

  12. 古いノードプールを削除したら、クラスタに十分なリソースがあり、Google Cloud Marketplace から Kubeflow Pipelines をインストールできることを確認します

Kubernetes シークレットを使用して、クラスタに Google Cloud リソースと API へのアクセスを許可する

Kubeflow Pipelines SDK の use_gcp_secret 演算子を使用して開発されたパイプラインは、Kubernetes シークレットを使用して Google Cloud リソースに対して認証を行います。

以下の手順でサービス アカウントを作成して、そのアカウントにパイプラインで使用されるリソースへのアクセス権を付与し、サービス アカウントを Kubernetes Secret としてクラスタに追加します。

  1. Google Cloud コンソールで Google Kubernetes Engine クラスタを開きます。

    GKE クラスタに移動

  2. クラスタの行で、クラスタ名とゾーンを探します。

  3. Cloud Shell セッションを開きます。

    Cloud Shell を開く

    Cloud Shell は、Google Cloud コンソールの下部にあるフレームに表示されます。Cloud Shell を使用してこのプロセスの残りを完了します。

  4. 次の環境変数を設定します。

    export PROJECT_ID=PROJECT_ID
    export ZONE=ZONE
    export CLUSTER=CLUSTER_NAME
    export NAMESPACE=NAMESPACE
    export SA_NAME=SERVICE_ACCOUNT_NAME
    

    以下を置き換えます。

    • PROJECT_ID: GKE クラスタが作成された Google Cloud プロジェクト。
    • ZONE: GKE クラスタが作成された Google Cloud ゾーン。
    • CLUSTER_NAME: GKE クラスタの名前。
    • NAMESPACE: Kubeflow Pipelines がインストールされている GKE クラスタ内の名前空間。

      名前空間は、大規模な Kubernetes クラスタのリソースの管理に使用されます。クラスタで名前空間を使用しない場合は、kubernetes-namespace として default を入力します。

    • SERVICE_ACCOUNT_NAME: Google Cloud リソースと API にアクセスするために Kubeflow Pipelines クラスタに作成するサービス アカウントの名前。

  5. クラスタのサービス アカウントを作成します。

    gcloud iam service-accounts create $SA_NAME \
      --display-name $SA_NAME --project "$PROJECT_ID"
    
  6. サービス アカウントに Google Cloud リソースへのアクセス権を付与するには、Identity and Access Management のロールをサービス アカウントにバインドします。サービス アカウントに IAM のロールを付与する手順は次のとおりです。サービス アカウントに付与するロールごとに、このコマンドを 1 回呼び出します。

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member=serviceAccount:$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
      --role=iam-role
    
    • iam-role: サービス アカウントに付与する IAM のロール。たとえば、roles/storage.admin は、プロジェクト内の Cloud Storage バケットとオブジェクトのすべてを管理する権限を付与します。

      IAM のロールの詳細については、IAM のロールについてのガイドをご覧ください。

  7. サービス アカウントの秘密鍵を現在のディレクトリに作成します。

    gcloud iam service-accounts keys create ./service-account-key.json \
    --iam-account $SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
    
  8. kubectl を構成してクラスタに接続し、user-gcp-sa Kubernetes シークレットを作成します。

    gcloud container clusters get-credentials "$CLUSTER" --zone "$ZONE" \
      --project "$PROJECT_ID"
    
    kubectl create secret generic user-gcp-sa \
      --from-file=user-gcp-sa.json=./service-account-key.json \
      -n $NAMESPACE --dry-run -o yaml  |  kubectl apply -f -
    
  9. サービス アカウントの秘密鍵をクリーンアップします。

    rm ./service-account-key.json