Cloud Storage を使用する

AI Platform Training は、AI Platform Training プロジェクトにアクセス権を付与した Cloud Storage ロケーションからデータを読み取ります。このページでは、AI Platform Training で Cloud Storage を使用する方法を簡単に説明します。

概要

AI Platform Training の次のサービスを利用する場合は、Cloud Storage の使用が必須になります(あるいは推奨されます)。

  • トレーニング アプリケーションとカスタム依存関係をステージングする。
  • 表形式のデータや画像データなどのトレーニング入力データを保存する。
  • トレーニングの出力データを保存する。

リージョンに関する考慮事項

AI Platform Training で使用する Cloud Storage バケットを作成する場合、次のことを行う必要があります。

  • マルチリージョン値ではなく、特定のコンピューティング リージョンに割り当てます。
  • トレーニング ジョブを実行するのと同じリージョンを使用します。

詳しくは、AI Platform Training で利用可能なリージョンをご覧ください。

Cloud Storage バケットを設定する

このセクションでは、新しいバケットを作成する方法を説明します。既存のバケットを使用することもできますが、AI Platform ジョブを実行する予定のリージョンと同じリージョンにある必要があります。また、AI Platform Training を実行するプロジェクトに含まれていない場合は、明示的に AI Platform Training サービス アカウントへのアクセスを許可する必要があります。

  1. 新しいバケットに名前を指定します。名前は Cloud Storage のすべてのバケット全体で重複しないようにする必要があります。

    BUCKET_NAME="YOUR_BUCKET_NAME"

    たとえば、プロジェクト名に -aiplatform を追加したものを使います。

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-aiplatform
  2. 作成したバケット名を確認します。

    echo $BUCKET_NAME
  3. バケットのリージョンを選択して、REGION 環境変数を設定します。

    AI Platform Training ジョブを実行する予定のリージョンと同じリージョンを使用してください。AI Platform Training サービスに利用可能なリージョンをご覧ください。

    たとえば、次のコードは REGION を作成し、us-central1 に設定します。

    REGION=us-central1
  4. 新しいバケットを作成します。

    gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION

バケット内のモデル編成

モデルの多数の反復に対応できるように、バケット内のフォルダ構造を編成します。

  • 保存済みの各モデルをバケット内の別々のディレクトリに配置します。
  • バケット内のディレクトリに名前を付ける場合は、タイムスタンプの使用を検討してください。

たとえば、gs://your-bucket/your-model-DATE1/your-saved-model-file に似た構造に最初のモデルを配置します。モデルの後続のイテレーションで使用するディレクトリ名を指定するには、更新されたタイムスタンプ(gs://your-bucket/your-model-DATE2/your-saved-model-file など)を使用します。

トレーニング中の Cloud Storage へのアクセス

トレーニング コード内では、Cloud Storage からの読み取りに対応できる Python モジュール(Google Cloud Storage 用 Python クライアント、Tensorflow の tf.io.gfile.GFile モジュール、pandas 0.24.0 以降など)を使用します。認証は AI Platform Training によって処理されます。

別のプロジェクトの Cloud Storage バケットを使用する

このセクションでは、AI Platform Training がバケットにアクセスできるように、プロジェクトの外部から Cloud Storage バケットを構成する方法について説明します。

AI Platform Training を使用しているプロジェクトで Cloud Storage バケットを設定している場合、Cloud Storage バケットへのアクセスに必要な権限が AI Platform Training サービス アカウントにすでに付与されています。

次の場合に行う手順について説明します。

  • 大規模なデータセットを複数のプロジェクト間で共有する場合など、自分のプロジェクトからバケットを使用できない場合。
  • AI Platform Training で複数のバケットを使用する場合。バケットごとに AI Platform Training のサービス アカウントにアクセス権を付与する必要があります。

ステップ 1: クラウド プロジェクトから必要な情報を取得する

コンソール

  1. Google Cloud コンソールで IAM ページを開きます。

    [IAM] ページを開く

  2. IAM ページには、プロジェクトにアクセスできるすべてのプリンシパルのリストとそれに関連するロールが表示されます。AI Platform Training のプロジェクトには複数のサービス アカウントがあります。Cloud ML サービス アカウントのロールを持つサービス アカウントをリストから探して、そのサービス アカウントの ID をコピーします。ID は次のような形式になっています。

    "service-111111111111@cloud-ml.google.com.iam.gserviceaccount.com"

    次の手順で、このサービス アカウント ID を Google Cloud コンソール の別のページに貼り付ける必要があります。

コマンドライン

このセクションでは、プロジェクトの AI Platform Training サービス アカウントのアクセス制御を変更するために必要な Google Cloud プロジェクトの情報を取得します。後で使用できるように、値を環境変数に保存します。

  1. 選択したプロジェクトで Google Cloud CLI を使用し、プロジェクト ID を取得します。

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    
  2. gcloud を使用して、プロジェクト用のアクセス トークンを取得します。

    AUTH_TOKEN=$(gcloud auth print-access-token)
    
  3. REST サービスからプロジェクトの構成をリクエストして、サービス アカウント情報を取得します。

    SVC_ACCOUNT=$(curl -X GET -H "Content-Type: application/json" \
        -H "Authorization: Bearer $AUTH_TOKEN" \
        https://ml.googleapis.com/v1/projects/${PROJECT_ID}:getConfig \
        | python3 -c "import json; import sys; response = json.load(sys.stdin); \
        print(response['serviceAccount'])")
    

ステップ 2: Cloud Storage バケットへのアクセスを構成する

コンソール

  1. Google Cloud コンソールで [ストレージ] ページを開きます。

    [ストレージ] ページを開く

  2. バケット名の左側にあるボックスをオンにして、モデルのデプロイに使用する Cloud Storage バケットを選択します。

  3. 右上隅にある [情報パネルを表示] ボタンをクリックして、[権限] タブを表示します。

  4. サービス アカウントの ID を [プリンシパルを追加] フィールドに貼り付けます。 このフィールドの右で、必要なロール(ストレージのレガシー バケット読み取りなど)を選択します。

    選択するロールが不明な場合、複数のロールを選択すると、ロールに設定された権限の簡単な説明が [プリンシパルを追加] フィールドの下に表示されます。

  5. サービス アカウントに目的のロールを割り当てるには、[プリンシパルを追加] フィールドの右側にある [追加] ボタンをクリックします。

コマンドライン

プロジェクトとサービス アカウントの情報があるので、Cloud Storage バケットのアクセス権を更新する必要があります。以下の手順では、前のセクションと同じ変数名を使用します。

  1. BUCKET_NAME という名前の環境変数にバケットの名前を設定します。

    BUCKET_NAME="your_bucket_name"
    
  2. Cloud Storage バケット内のオブジェクトに対する読み取りアクセス権をサービス アカウントに付与します。

    gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME --member=user:$SVC_ACCOUNT --role=roles/storage.legacyObjectReader
    
  3. 書き込みアクセス権を許可します。

    gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME --member=user:$SVC_ACCOUNT --role=roles/storage.legacyObjectWriter
    

AI Platform のサービス アカウントに付与するロールについては、Cloud Storage IAM のロールをご覧ください。Cloud Storage で IAM ロールを更新する方法については、リソースのサービス アカウントにアクセス権を付与する方法をご覧ください。

次のステップ