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 をインストールするための十分なリソースがあるかを確認します。
Google Cloud コンソールで AI Platform Pipelines を開きます。
AI Platform Pipelines ツールバーで、[新しいインスタンス] をクリックします。Kubeflow Pipelines が Google Cloud Marketplace で開きます。
[構成] をクリックします。[「Kubeflow Pipelines」をデプロイ] フォームが開きます。
[クラスタ] をクリックしてリストを展開します。十分なリソースや権限がない GKE クラスタは、対象外のクラスタとしてリストされます。それぞれの対象外のクラスタには、以下のように、Kubeflow Pipelines をインストールできない説明が含まれています。
- クラスタがアプリケーションに適合しない: クラスタに Kubeflow Pipelines をインストールするための十分なリソースがありません。クラスタに追加のリソースを割り当ててください。
- OAuth の範囲が不十分です: Kubeflow Pipelines をインストールするための十分な Google Cloud リソースと API へのアクセス権がありません。クラスタに追加の権限を付与してください。
GKE クラスタに追加のリソースを割り当てる
Google Cloud Marketplace から既存の GKE クラスタに Kubeflow Pipelines をインストールするには、クラスタには、2 つの CPU と 4 GB の使用可能なメモリを持つノードが 3 つ以上必要です。
以下の手順に従い、クラスタ内のノードプールを AI Platform Pipelines 用の十分な CPU リソース、メモリリソースを持つノードプールに置き換えます。
Google Cloud コンソールで Google Kubernetes Engine クラスタを開きます。
クラスタ名をクリックします。クラスタの詳細が表示されます。
GKE ツールバーで [ノードプールを追加] をクリックします。[新しいノードプールの追加] フォームが開きます。
[新しいノードプールを追加] フォームに次の情報を入力します。
- ノード数: ノードプール内のノード数を指定します。Google Cloud Marketplace を使用して Kubeflow Pipelines をインストールするには、クラスタに 3 つ以上のノードが必要です。
マシンタイプ: ノードプール内のインスタンスに使用する Compute Engine マシンタイプを指定します。少なくとも 2 つの CPU と 4 GB のメモリを備えたマシンタイプ(
n1-standard-2
など)を選択します。アクセス スコープ: [アクセス スコープ] で [すべての Cloud APIs への完全アクセス権を許可する] をクリックします。
それ以外の場合は、必要に応じてノードプールを構成します。クラスタへのノードプールの追加の詳細を確認してください。
[ノードプールを作成] をクリックします。ノードプールの作成には数分かかります。
[ノードプール] セクションの各ノードプール(前の手順で作成したノードプールを除く)で、
[削除] をクリックします。このノードプールの削除を確認する、[ノードプールの削除] ダイアログが表示されます。[削除] をクリックします。ノードプールの削除には数分かかります。
古いノードプールを削除したら、クラスタに十分なリソースがあり、Google Cloud Marketplace から Kubeflow Pipelines をインストールできることを確認します。
GKE クラスタに Google Cloud リソースと API へのアクセスを許可する
ML パイプラインに Google Cloud のリソースと API へのアクセスを許可する方法として、以下の 3 つがあります。
- Google Kubernetes Engine クラスタにすべての Google Cloud APIs への完全アクセス権を付与します。プロジェクト内の Google Cloud リソースに対する完全アクセス権を持つクラスタを構成する方法について学習します。
- サービス アカウントを使用して、Google Kubernetes Engine クラスタにすべての Google Cloud APIs へのきめ細かなアクセス権を付与します。Google Cloud リソースへのきめ細かなアクセス権を持つクラスタを構成する方法について学習します。
- GKE クラスタに、Kubernetes シークレットとして保存されているサービス アカウントへのアクセスを許可します。Kubernetes シークレットを使用してパイプラインに Google Cloud リソースへのアクセス権を付与する方法について確認する。
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 API にアクセスできるノードプールに置換します。GKE クラスタを変更する前に、GKE 管理者とこれらの変更について確認してください。
Google Cloud コンソールで Google Kubernetes Engine クラスタを開きます。
クラスタ名をクリックします。クラスタの詳細が表示されます。
GKE ツールバーで [ノードプールを追加] をクリックします。[新しいノードプールの追加] フォームが開きます。
[新しいノードプールを追加] フォームに次の情報を入力します。
- ノード数: ノードプール内のノード数を指定します。Google Cloud Marketplace を使用して Kubeflow Pipelines をインストールするには、クラスタに 3 つ以上のノードが必要です。
マシンタイプ: ノードプール内のインスタンスに使用する Compute Engine マシンタイプを指定します。少なくとも 2 つの CPU と 4 GB のメモリを備えたマシンタイプ(
n1-standard-2
など)を選択します。アクセス スコープ: [アクセス スコープ] で [すべての Cloud APIs への完全アクセス権を許可する] をクリックします。
それ以外の場合は、必要に応じてノードプールを構成します。クラスタへのノードプールの追加の詳細を確認してください。
[ノードプールを作成] をクリックします。ノードプールの作成には数分かかります。
[ノードプール] セクションの各ノードプール(前の手順で作成したノードプールを除く)で、
[削除] をクリックします。このノードプールの削除を確認する、[ノードプールの削除] ダイアログが表示されます。[削除] をクリックします。ノードプールの削除には数分かかります。
古いノードプールを削除したら、クラスタに十分なリソースがあり、Google Cloud Marketplace から Kubeflow Pipelines をインストールできることを確認します。
Google Cloud API へのきめ細かなアクセス権を持つ GKE クラスタの構成
次の手順に従って、GKE クラスタのサービス アカウントを構成し、クラスタのノードプールをサービス アカウントを使用するものに置き換えます。サービス アカウントを作成することで、クラスタ上のワークロードでアクセスできる Google Cloud リソースを細かく管理できます。GKE クラスタを変更する前に、GKE 管理者とこれらの変更について確認してください。
Cloud Shell セッションを開きます。
Cloud Shell は、Google Cloud Console の下部にあるフレームに表示されます。
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 プロジェクト。
ML パイプラインに必要な Google Cloud リソースまたは API へのアクセス権をサービス アカウントに付与します。詳しくは、Identity and Access Management のロールとサービス アカウントの管理についてご覧ください。
ユーザー アカウントにサービス アカウントのサービス アカウント ユーザー(
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 のユーザー名。
Google Cloud コンソールで Google Kubernetes Engine クラスタを開きます。
クラスタ名をクリックします。クラスタの詳細が表示されます。
GKE ツールバーで [ノードプールを追加] をクリックします。[新しいノードプールの追加] フォームが開きます。
[新しいノードプールを追加] フォームに次の情報を入力します。
- ノード数: ノードプール内のノード数を指定します。Google Cloud Marketplace を使用して Kubeflow Pipelines をインストールするには、クラスタに 3 つ以上のノードが必要です。
マシンタイプ: ノードプール内のインスタンスに使用する Compute Engine マシンタイプを指定します。少なくとも 2 つの CPU と 4 GB のメモリを備えたマシンタイプ(
n1-standard-2
など)を選択します。サービス アカウント: 前の手順で作成したサービス アカウントを選択します。
それ以外の場合は、必要に応じてノードプールを構成します。クラスタへのノードプールの追加の詳細を確認してください。
[ノードプールを作成] をクリックします。ノードプールの作成には数分かかります。
[ノードプール] セクションの各ノードプール(前の手順で作成したノードプールを除く)で、
[削除] をクリックします。このノードプールの削除を確認する、[ノードプールの削除] ダイアログが表示されます。[削除] をクリックします。ノードプールの削除には数分かかります。
古いノードプールを削除したら、クラスタに十分なリソースがあり、Google Cloud Marketplace から Kubeflow Pipelines をインストールできることを確認します。
Kubernetes シークレットを使用して、クラスタに Google Cloud リソースと API へのアクセスを許可する
Kubeflow Pipelines SDK の use_gcp_secret
演算子を使用して開発されたパイプラインは、Kubernetes シークレットを使用して Google Cloud リソースに対して認証を行います。
以下の手順に従い、サービス アカウントを作成し、そのアカウントにパイプラインで使用されるリソースへのアクセス権を付与し、サービス アカウントを Kubernetes シークレットとしてクラスタに追加します。
Google Cloud コンソールで Google Kubernetes Engine クラスタを開きます。
クラスタの行で、クラスタ名とゾーンを探します。
Cloud Shell セッションを開きます。
Cloud Shell は、Google Cloud コンソールの下部にあるフレームで開きます。Cloud Shell を使用してこのプロセスの残りを完了します。
次の環境変数を設定します。
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 クラスタに作成するサービス アカウントの名前。
クラスタのサービス アカウントを作成します。
gcloud iam service-accounts create $SA_NAME \ --display-name $SA_NAME --project "$PROJECT_ID"
サービス アカウントに 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 のロールについてのガイドをご覧ください。
サービス アカウントの秘密鍵を現在のディレクトリに作成します。
gcloud iam service-accounts keys create ./service-account-key.json \ --iam-account $SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
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 -
サービス アカウントの秘密鍵をクリーンアップします。
rm ./service-account-key.json