Google Cloud アカウントのセットアップと接続

TensorFlow.orgで閲覧 Google Colabで実行GitHubで見るノートブックをダウンロードKaggleのロゴKaggleで実行

このガイドは、Google Cloud AI Platform 上で大規模なトレーニングを簡単に実行するためにtensorflow_cloudを使用することを目的として、初めて Google Cloud Platform アカウントを設定するユーザーを支援するためのものです。TensorFlow Cloud は、ローカル環境または Kaggle 環境での Keras および TensorFlow コードのデバッグ、トレーニング、チューニングから、クラウド上での分散トレーニング/チューニングへと簡単に移行できる API を提供します。

1. Google Cloud Platformにサインアップする

まず、 https://cloud.google.com/にアクセスし、「無料で始める」をクリックしてください。登録は2段階で行われ、氏名、住所、クレジットカード情報の入力が必要です。スターターアカウントは無料で、300ドルのクレジットが付与されます。このステップでは、Googleアカウント(Gmailアカウントなど)を入力してログインする必要があります。

サインアッププロセスが完了すると、 Google Cloud Platform のウェルカムページにリダイレクトされます。「ホーム」タブをクリックし、プロジェクト ID とプロジェクト番号をメモしてください。(プロジェクトの識別を参照)

GCP_PROJECT_ID = 'YOUR_PROJECT_ID'
PROJECT_NUMBER = 'YOUR_PROJECT_NUMBER'

2. Google Cloud SDK を有効にしてノートブックを認証します

プロジェクトの設定が完了したので、このノートブックから直接、残りの設定手順に進むことができます。ノートブックには3種類あり、この手順(手順2)はノートブックごとに若干異なりますが、残りの手順(手順3~6)はすべてのノートブックで共通です。

  • 2.1. Kaggleノートブックの認証
  • 2.2. Colabノートブックの認証
  • 2.3. クラウドAIノートブックの認証 - サポートされていません。

2.1 Kaggleノートブックの認証設定

Kaggleノートブックを使用している場合は、このプロジェクトで使用する新しいノートブックごとにこの手順を繰り返す必要があります。ノートブックで、[アドオン] -> [Google Cloud SDK] をクリックし、プロンプトの指示に従ってください。次に、次のコマンドを実行して、認証情報をこのノートブックに追加します。

import sys
if "kaggle_secrets" in sys.modules:
    from kaggle_secrets import UserSecretsClient
    UserSecretsClient().set_gcloud_credentials(project=GCP_PROJECT_ID)

2.2 Colabノートブックの認証設定

Colabノートブックを使用している場合は、このプロジェクトで使用する新しいノートブックごとにこの手順を繰り返す必要があります。以下のコマンドを実行して、認証情報をこのノートブックに追加してください。

import sys
if "google.colab" in sys.modules:
    from google.colab import auth
    auth.authenticate_user()

次のステップは、このプロジェクトの請求アカウントを設定することです。Google Cloud はデフォルトで「My First Project」という名前のプロジェクトを作成します。ここでは、このデフォルトプロジェクトを使用します。ステップ 1 で取得したプロジェクト ID を使用して、以下のコマンドを実行してください。これにより、請求アカウント ID が表示されますので、次のステップで使用するためにメモしておいてください。

gcloud beta billing accounts list

上記の請求アカウントIDを使用して、以下の手順を実行し、請求アカウントをプロジェクトにリンクしてください。

既存のプロジェクトを使用している場合、Account_ID が表示されないことがあります。これは、以下のコマンドを実行するための適切な権限がないことを意味します。管理者にお問い合わせいただくか、新しいプロジェクトを作成してください。

BILLING_ACCOUNT_ID = 'YOUR_BILLING_ACCOUNT_ID'

!gcloud beta billing projects link $GCP_PROJECT_ID --billing-account $BILLING_ACCOUNT_ID

4. プロジェクトでtensorflow-cloudに必要なAPIを有効にする

tensorflow_cloudでは、AI Platform Training Jobs APIとCloud Builder APIという2つの特定のAPIを使用します。なお、このプロジェクトでは一度だけ設定を行う必要があり、ノートブックごとにこのコマンドを再実行する必要はありません。

gcloud services --project $GCP_PROJECT_ID enable ml.googleapis.com cloudbuild.googleapis.com

5. Google Cloud Storage バケットを作成する

このストレージバケットは、一時的なアセットの保存とモデ​​ルのチェックポイントの保存に使用します。今後の参照のために、バケット名をメモしておいてください。バケット名はグローバルに一意であることに注意してください。

BUCKET_NAME = 'YOUR_BUCKET_NAME'

GCS_BUCKET = f'gs://{BUCKET_NAME}'
!gsutil mb -p $GCP_PROJECT_ID $GCS_BUCKET

HP Tuningジョブ用のサービスアカウントを作成します。

この手順は、CloudTuner を使用して Google Cloud 上で HP Tuning を利用するために必要です。サービス アカウントを作成し、プロジェクト エディターへのアクセス権を付与するには、次のコマンドを実行し、サービス アカウント名をメモしておいてください。

SERVICE_ACCOUNT_NAME ='YOUR_SERVICE_ACCOUNT_NAME'

SERVICE_ACCOUNT_EMAIL = f'{SERVICE_ACCOUNT_NAME}@{GCP_PROJECT_ID}.iam.gserviceaccount.com'
!gcloud iam --project $GCP_PROJECT_ID service-accounts create $SERVICE_ACCOUNT_NAME
!gcloud projects add-iam-policy-binding $GCP_PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
    --role=roles/editor

default AI Platform service account 、 service-PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.comという形式のメールアドレスで識別されます。手順 1 で取得したプロジェクト番号を使用してサービス アカウントのメールアドレスを作成し、新しいサービス アカウントにdefault AI Platform service account管理者ロール (roles/iam.serviceAccountAdmin) を付与します。

DEFAULT_AI_PLATFORM_SERVICE_ACCOUNT = f'service-{PROJECT_NUMBER}@cloud-ml.google.com.iam.gserviceaccount.com'

!gcloud iam --project $GCP_PROJECT_ID service-accounts add-iam-policy-binding \
--role=roles/iam.serviceAccountAdmin \
--member=serviceAccount:$DEFAULT_AI_PLATFORM_SERVICE_ACCOUNT \
$SERVICE_ACCOUNT_EMAIL

おめでとう !

これでtensorflow-cloudを実行する準備が整いました。これらの手順は一度だけ実行すれば十分です。プロジェクトの設定が完了したら、以降の実行では同じプロジェクトとバケット構成を再利用できます。新しいノートブックを作成する場合は、手順2を繰り返してGoogle Cloudの認証情報を追加する必要があります。

以下の値はtensorflow-cloudを実行するために必要なので、メモしておいてください。

print(f"Your GCP_PROJECT_ID is:       {GCP_PROJECT_ID}")
print(f"Your SERVICE_ACCOUNT_NAME is: {SERVICE_ACCOUNT_NAME}")
print(f"Your BUCKET_NAME is:          {BUCKET_NAME}")
Your GCP_PROJECT_ID is:       YOUR_PROJECT_ID
Your SERVICE_ACCOUNT_NAME is: YOUR_SERVICE_ACCOUNT_NAME
Your BUCKET_NAME is:          YOUR_BUCKET_NAME