トレーニングでの VPC ネットワーク ピアリングの使用

Virtual Private Cloud(VPC)とピアリングするように AI Platform Training ジョブを構成できます。これにより、トレーニング ジョブで Google Cloud 内またはオンプレミス ネットワーク内のプライベート IP アドレスにアクセスできます。プライベート IP を使用してトレーニング ジョブに接続すると、パブリック IP を使用する場合よりも、ネットワーク セキュリティが強化され、ネットワーク レイテンシが短縮されます。

このガイドでは、VPC ネットワーク ピアリングを使用して AI Platform Training ジョブでネットワークをピアリングすることによって、AI Platform Training でプライベート IP を構成する方法について説明します。このガイドは、Google Cloud のネットワーキングのコンセプトに精通しているネットワーク管理者を対象としています。

概要

このガイドでは、次のタスクについて説明します。

  • VPC のプライベート サービス アクセスを構成する。これにより、VPC と Google の共有 VPC ネットワークの間にピアリング接続が確立されます。
  • AI Platform Training 用に予約する必要がある IP 範囲を検討する。
  • 必要に応じて、AI Platform Training でインポートできるようにカスタムルートをエクスポートする。
  • ピアリング接続のステータスを確認する。
  • ネットワーク上でトレーニング ジョブを送信する。
  • 別のネットワーク上でジョブを送信する前に、あるネットワーク上でアクティブなトレーニング ジョブを確認する。
  • トレーニング ジョブでネットワーク内のプライベート IP にアクセスできることをテストする。

始める前に

  • AI Platform のトレーニング ジョブとピアリングする VPC を選択する。
  • AI Platform Training でトレーニング ジョブを実行する Google Cloud プロジェクトを選択するか、作成する。
  • Google Cloud プロジェクトで課金が有効になっていることを確認します

  • Compute Engine API, AI Platform Training & Prediction, and the Service Networking API を有効にします。

    API を有効にする

  • 必要に応じて、共有 VPCを使用できます。共有 VPC を使用する場合、通常は VPC ホスト プロジェクトとは別の Google Cloud プロジェクトでトレーニング ジョブを実行します。両方のプロジェクトで Compute Engine API と Service Networking API を有効にします。共有 VPC のプロビジョニング方法を学習します。
  • このガイドの gcloud コマンドラインのサンプルを実行する場合は、gcloud CLI をインストールします。

権限

プロジェクト オーナーまたは編集者でない場合は、ネットワーク リソースを管理するために必要な権限が含まれる Compute ネットワーク管理者のロールが必要です。

AI Platform Training でジョブを実行するには、AI Platform Training 管理者または AI Platform Training デベロッパーのロールに含まれている権限が必要です。詳しくは、AI Platform Training の IAM のロールをご覧ください。

オンプレミス ネットワークとのピアリング

オンプレミス ネットワークとの VPC ネットワーク ピアリングの場合、追加の手順があります。

  1. オンプレミス ネットワークを VPC に接続します。VPN トンネルまたは Interconnect を使用できます。
  2. VPC からオンプレミス ネットワークへのカスタムルートを設定します。
  3. カスタムルートをエクスポートして、AI Platform Training でインポートできるようにします。

VPC のプライベート サービス アクセスを設定する

プライベート サービス アクセスを設定すると、お客様のネットワークと、Google またはサードパーティのサービス(サービス プロデューサー)が所有するネットワークの間にプライベート接続が確立されます。この場合、AI Platform Training がサービス プロデューサーです。プライベート サービス アクセスを設定するには、サービス プロデューサー用にIP 範囲を予約してから、AI Platform Training とのピアリング接続を作成します。

プライベート サービス アクセスが構成された VPC がすでに存在していて、その VPC を使用してトレーニング ジョブとピアリングする場合は、カスタムルートのエクスポートに進みます。

  1. プロジェクト ID、リージョン名、予約済み範囲の名前、ネットワーク名の環境変数を設定します。
    • 共有 VPC を使用する場合は、VPC ホスト プロジェクトのプロジェクト ID を使用します。それ以外の場合は、トレーニング ジョブの実行に使用する Google Cloud プロジェクトのプロジェクト ID を使用します。
    • AI Platform Training で使用する有効なリージョンを選択します。
  2. 必要な API を有効にします。共有 VPC を使用する場合は、VPC ホスト プロジェクトの API と、トレーニング ジョブの実行に使用する Google Cloud プロジェクトを有効にします。
  3. gcloud compute addresses create を使用して予約済みの範囲を設定します。
  4. gcloud services vpc-peerings connect を使用して、VPC ホストプロジェクトと Google のサービス ネットワーキングの間にピアリング接続を確立します。

    PROJECT_ID=YOUR_PROJECT_ID
    gcloud config set project $PROJECT_ID
    
    REGION=YOUR_REGION
    
    # This is for display only; you can name the range anything.
    PEERING_RANGE_NAME=google-reserved-range
    
    NETWORK=YOUR_NETWORK_NAME
    
    # NOTE: `prefix-length=16` means a CIDR block with mask /16 will be
    # reserved for use by Google services, such as AI Platform Training.
    gcloud compute addresses create $PEERING_RANGE_NAME \
      --global \
      --prefix-length=16 \
      --description="peering range for Google service" \
      --network=$NETWORK \
      --purpose=VPC_PEERING
    
    # Create the VPC connection.
    gcloud services vpc-peerings connect \
      --service=servicenetworking.googleapis.com \
      --network=$NETWORK \
      --ranges=$PEERING_RANGE_NAME \
      --project=$PROJECT_ID
    

プライベート サービス アクセスの詳細をご確認ください。

AI Platform Training 用の IP 範囲の予約

サービス プロデューサー用の IP 範囲を予約すると、その範囲は、AI Platform Training とその他のサービスの両方で使用できるようになります。したがって、他のサービスを同じ予約済み範囲に接続する予定がある場合は、その範囲が IP が枯渇することのない十分な大きさであるようにする必要があります。

各トレーニング ジョブが使用するアドレスの数の控えめな見積もりは、次のように計算できます。

nextPow2(32 * NUMBER_OF_POOLS * max(POOL_SIZE))

次の表に、/16 から /19 までの予約済み範囲で実行できる並列トレーニング ジョブの最大数を示します。この範囲は AI Platform Training がほぼ独占的に使用することが前提となっています。

トレーニング ジョブのマシン構成 予約済み範囲 並列ジョブの最大数
最大 8 ノード。
例: 6 つのワーカー、1 つのマスター、1 つのパラメータ サーバー。
/16 63
/17 31
/18 15
/19 7
最大 16 ノード。
例: 14 個のワーカー、1 つのマスター、1 つのパラメータ サーバー。
/16 31
/17 15
/18 7
/19 3
最大 32 ノード。
例: 30 個のワーカー、1 つのマスター、1 つのパラメータ サーバー。
/16 15
/17 7
/18 3
/19 1

詳細については、トレーニング ジョブのマシンタイプの指定をご覧ください。

カスタムルートをエクスポートする

カスタムルートを使用する場合は、AI Platform Training でインポートできるようにエクスポートする必要があります。カスタムルートを使用しない場合は、トレーニング ジョブの送信に進みます。

カスタムルートをエクスポートするには、VPC でピアリング接続を更新します。カスタムルートをエクスポートすると、VPC ネットワーク内のすべての有効な静的ルートと動的ルート(オンプレミス ネットワークへのルートなど)がサービス プロデューサーのネットワーク(この場合は AI Platform Training)に送信されます。これにより、必要な接続が確立され、トレーニング ジョブでオンプレミス ネットワークにトラフィックを戻すことが可能になります。

オンプレミス ネットワークとのプライベート接続について学習します。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク ピアリング] ページに移動します。
    [VPC ネットワーク ピアリング] ページに移動
  2. 更新するピアリング接続を選択します。
  3. [編集] をクリックします。
  4. [カスタムルートのエクスポート] を選択します。

gcloud

  1. 更新するピアリング接続の名前を探します。複数のピアリング接続がある場合は、--format フラグを省略します。

    gcloud services vpc-peerings list \
      --network=$NETWORK \
      --service=servicenetworking.googleapis.com \
      --project=$PROJECT_ID \
      --format "value(peering)"
    
  2. ピアリング接続を更新してカスタムルートをエクスポートします。

    gcloud compute networks peerings update PEERING-NAME \
        --network=$NETWORK \
        --export-custom-routes \
        --project=$PROJECT_ID
    

ピアリング接続のステータスを確認する

ピアリング接続がアクティブであることを確認するには、以下を使用して一覧表示します。

gcloud compute networks peerings list --network $NETWORK

作成したピアリングの状態が ACTIVE と表示されているはずです。詳しくは、アクティブなピアリング接続をご覧ください。

トレーニング ジョブを送信する

トレーニング ジョブを送信するときに、AI Platform Training でアクセスするネットワークの名前を指定する必要があります。

ネットワーク名を指定せずにトレーニング ジョブを送信すると、デフォルトでは、ピアリング接続なしで、プロジェクト内のプライベート IP にアクセスすることなくトレーニング ジョブを実行します。

  1. ネットワークを指定する config.yaml を作成します。共有 VPC を使用している場合は、VPC ホスト プロジェクト番号を使用します。

    ネットワーク名が正しくフォーマットされていることを確認します。

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    cat << EOF > config.yaml
    trainingInput:
      scaleTier: BASIC
      network: projects/$PROJECT_NUMBER/global/networks/$NETWORK
    EOF
    
  2. AI Platform Training に送信するトレーニング アプリケーションを作成します。

  3. トレーニング ジョブ用のその他のパラメータを指定します。トレーニング ジョブの送信に必要なパラメータについて学習します。

    TRAINER_PACKAGE_PATH="PATH_TO_YOUR_TRAINING_APPLICATION"
    now=$(date +"%Y%m%d_%H%M%S")
    JOB_NAME="YOUR_JOB_NAME_$now"
    MAIN_TRAINER_MODULE="trainer.task"
    JOB_DIR="gs://PATH_TO_OUTPUT_DIRECTORY"
    REGION="us-east1"
    RUNTIME_VERSION="2.11"
    PYTHON_VERSION="3.7"
    
  4. config.yaml ファイルを渡して、ジョブを送信します。

    gcloud ai-platform jobs submit training $JOB_NAME \
      --module-name $MAIN_TRAINER_MODULE \
      --job-dir $JOB_DIR \
      --region $REGION \
      --runtime-version $RUNTIME_VERSION \
      --python-version $PYTHON_VERSION \
      --package-path $TRAINER_PACKAGE_PATH \
      --config config.yaml
    

異なるネットワークでのジョブの実行

別のネットワークにアクティブなトレーニング ジョブがある場合、新しいネットワークにトレーニング ジョブを送信することはできません。別のネットワークに切り替える前に、すべてのトレーニング ジョブの送信が完了するまで待つか、キャンセルする必要があります。たとえば、テスト用にネットワークを設定し、そのテスト用ネットワークでトレーニング ジョブを送信した場合は、そのテスト用ネットワークでアクティブなジョブを検索して、本番環境用に別のネットワーク上でトレーニング ジョブを送信する前に、それらが完了しているかキャンセルされたことを確認する必要があります。

ネットワーク上でまだアクティブなトレーニング ジョブを一覧表示します。

PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
NETWORK_FULL_NAME="projects/$PROJECT_NUMBER/global/networks/$NETWORK"

gcloud ai-platform jobs list \
  --filter "(state=queued OR state=running) AND (trainingInput.network=$NETWORK_FULL_NAME)"

出力は次のように表示されます。

JOB_ID                                             STATUS     CREATED
job_20200502_151443                                QUEUED     2020-05-02T15:14:47

表示されているジョブがある場合は、完了するまで待つか、gcloud ai-platform jobs cancel を使用して各ジョブをキャンセルできます。

トレーニング ジョブへのアクセスをテストする

トレーニング ジョブがネットワーク内のエンドポイントにアクセスできることをテストするには、ネットワーク内にエンドポイントを設定し、それにアクセスするトレーニング ジョブを送信する必要があります。詳しくは、ピアリング接続のテストに関するガイドをご覧ください。

トラブルシューティング

このセクションでは、AI Platform Training との VPC ネットワーク ピアリングの構成に関する一般的な問題について説明します。

  • トレーニング ジョブを送信するときは、完全なネットワーク名を使用します。

    "projects/YOUR_PROJECT_NUMBER/global/networks/YOUR_NETWORK_NAME"

  • ネットワークとピアリングされたトレーニング ジョブでは TPU を使用しないでください。TPU は、AI Platform Training での VPC ネットワーク ピアリングではサポートされていません。

  • 別のネットワークでトレーニング ジョブを送信する前に、ネットワークにアクティブなトレーニング ジョブがないことを確認します。

  • ネットワークで接続するすべてのサービス プロデューサー(AI Platform Training を含む)に対して十分な IP 範囲が割り振られていることを確認します。

その他のトラブルシューティング情報については、VPC ネットワーク ピアリングのトラブルシューティング ガイドをご覧ください。

次のステップ