Vertex AI Workbench のトラブルシューティング

このページでは、Vertex AI Workbench の使用中に問題が発生した場合に役立つトラブルシューティング手順について説明します。

Vertex AI のその他のコンポーネントの使用方法については、Vertex AI のトラブルシューティングをご覧ください。

このページのコンテンツをフィルタするには、トピックをクリックします。

役に立つ手順

このセクションでは、役に立ちそうな手順について説明します。

SSH を使用してユーザー管理ノートブック インスタンスに接続する

SSH を使用してインスタンスに接続するには、Cloud Shell または Google Cloud CLI がインストールされている環境で次のコマンドを入力します。

gcloud compute ssh --project PROJECT_ID \
  --zone ZONE \
  INSTANCE_NAME -- -L 8080:localhost:8080

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • ZONE: インスタンスが配置されている Google Cloud ゾーン
  • INSTANCE_NAME: インスタンスの名前

インスタンスの Compute Engine の詳細ページを開き、[SSH] ボタンをクリックしてインスタンスに接続することもできます。

Inverting Proxy サーバーに再登録する

ユーザー管理ノートブック インスタンスを内部 Inverting Proxy サーバーに再登録するには、ユーザー管理ノートブックのページから VM を停止して起動します。あるいは、SSH を使用してユーザー管理ノートブック インスタンスに接続して、次のように入力します。

cd /opt/deeplearning/bin
sudo ./attempt-register-vm-on-proxy.sh

Docker サービスのステータスを確認する

Docker サービスのステータスを確認するには、SSH でユーザー管理のノートブック インスタンスに接続して、次のように入力します。

sudo service docker status

Inverting Proxy エージェントが実行されていることを確認する

ノートブックの Inverting Proxy エージェントが実行されているかどうかを確認するには、SSH でユーザー管理のノートブック インスタンスに接続して、次のように入力します。

# Confirm Inverting Proxy agent Docker container is running (proxy-agent)
sudo docker ps

# Verify State.Status is running and State.Running is true.
sudo docker inspect proxy-agent

# Grab logs
sudo docker logs proxy-agent

Jupyter サービスのステータスを確認してログを収集する

Jupyter サービスのステータスを確認するには、SSH でユーザー管理のノートブック インスタンスに接続して、次のように入力します。

sudo service jupyter status

Jupyter サービスログを収集するには:

sudo journalctl -u jupyter.service --no-pager

Jupyter の内部 API がアクティブであることを確認する

Jupyter API は常にポート 8080 で実行する必要があります。これを確認するには、インスタンスの syslog で次のようなエントリを調べます。

Jupyter Server ... running at:
http://localhost:8080

Jupyter の内部 API がアクティブであることを確認するには、SSH を使用してユーザー管理ノートブック インスタンスに接続して、次のように入力する方法もあります。

curl http://127.0.0.1:8080/api/kernelspecs

リクエストに時間がかかりすぎる場合は、API が応答するまでの時間を測定することもできます。

time curl -V http://127.0.0.1:8080/api/status
time curl -V http://127.0.0.1:8080/api/kernels
time curl -V http://127.0.0.1:8080/api/connections

Vertex AI Workbench インスタンスでこれらのコマンドを実行するには、JupyterLab を開いて新しいターミナルを作成します。

Docker サービスを再起動する

Docker サービスを再起動するには、ユーザー管理のノートブックのページから VM を停止して起動します。あるいは、SSH でユーザー管理ノートブック インスタンスに接続して、次のように入力します。

sudo service docker restart

Inverting Proxy エージェントを再起動する

Inverting Proxy エージェントを再起動するには、ユーザー管理のノートブックのページから VM を停止して起動します。あるいは、SSH でユーザー管理ノートブック インスタンスに接続して、次のように入力します。

sudo docker restart proxy-agent

Jupyter サービスを再起動する

Jupyter サービスを再起動するには、ユーザー管理のノートブックのページから VM を停止して起動します。あるいは、SSH でユーザー管理ノートブック インスタンスに接続して、次のように入力します。

sudo service jupyter restart

Notebooks Collection Agent を再起動する

Notebooks Collection Agent サービスは、Vertex AI Workbench インスタンスのコアサービスのステータスを確認する Python プロセスをバックグラウンドで実行します。

Notebooks Collection Agent サービスを再起動するには、Google Cloud コンソールから VM を停止して起動します。あるいは、SSH を使用して Vertex AI Workbench インスタンスに接続し、次のように入力します。

sudo systemctl stop notebooks-collection-agent.service

続けて次のように入力します。

sudo systemctl start notebooks-collection-agent.service

Vertex AI Workbench インスタンスでこれらのコマンドを実行するには、JupyterLab を開いて新しいターミナルを作成します。

Notebooks Collection Agent スクリプトを変更する

スクリプトにアクセスして編集するには、インスタンスでターミナルを開くか、SSH を使用して Vertex AI Workbench インスタンスに接続し、次のように入力します。

nano /opt/deeplearning/bin/notebooks_collection_agent.py

ファイルを編集したら、必ず保存してください。

次に、Notebooks Collection Agent サービスを再起動する必要があります。

インスタンスが必要な DNS ドメインを解決できることを確認する

インスタンスが必要な DNS ドメインを解決できることを確認するには、SSH を使用してユーザー管理ノートブック インスタンスに接続して、次のように入力します。

host notebooks.googleapis.com
host *.notebooks.cloud.google.com
host *.notebooks.googleusercontent.com
host *.kernels.googleusercontent.com

または

curl --silent --output /dev/null "https://notebooks.cloud.google.com"; echo $?

インスタンスで Dataproc が有効になっている場合は、次のコマンドを実行して、インスタンスが *.kernels.googleusercontent.com を解決することを確認できます。

curl --verbose -H "Authorization: Bearer $(gcloud auth print-access-token)" https://${PROJECT_NUMBER}-dot-${REGION}.kernels.googleusercontent.com/api/kernelspecs | jq .

Vertex AI Workbench インスタンスでこれらのコマンドを実行するには、JupyterLab を開いて新しいターミナルを作成します。

インスタンスのユーザーデータのコピーを作成する

インスタンスのユーザーデータを Cloud Storage にコピーするには、次の手順を完了します。

Cloud Storage バケットを作成する(省略可)

インスタンスが配置されているプロジェクトと同じプロジェクトに、ユーザーデータを保存する Cloud Storage バケットを作成します。すでに Cloud Storage バケットがある場合は、この手順をスキップします。

  • Create a Cloud Storage bucket:
    gcloud storage buckets create gs://BUCKET_NAME
    Replace BUCKET_NAME with a bucket name that meets the bucket naming requirements.

    ユーザーデータをコピーする

    1. インスタンスの JupyterLab インターフェースで、[File] > [New] > [Terminal] を選択して、ターミナル ウィンドウを開きます。ユーザー管理ノートブック インスタンスの場合は、代わりに SSH を使用してインスタンスのターミナルに接続できます。

    2. gcloud CLI を使用して、Cloud Storage バケットにユーザーデータをコピーします。次のコマンドの例では、インスタンスの /home/jupyter/ ディレクトリから Cloud Storage バケット内のディレクトリにすべてのファイルをコピーします。

      gcloud storage cp /home/jupyter/* gs://BUCKET_NAMEPATH --recursive
      

      次のように置き換えます。

      • BUCKET_NAME: Cloud Storage バケットの名前。
      • PATH: ファイルをコピーするディレクトリのパス(例: /copy/jupyter/

    gcpdiag を使用して、プロビジョニングから進まなくなっているインスタンスを調べる

    gcpdiag はオープンソース ツールです。正式にサポートされている Google Cloud プロダクトではありません。gcpdiag ツールを使用すると、 Google Cloudプロジェクトの問題を特定して修正できます。詳細については、GitHub の gcpdiag プロジェクトをご覧ください。

    この gcpdiag ランブックでは、Vertex AI Workbench インスタンスがプロビジョニングのステータスから先に進まなくなる原因を調査します。次の点を調べます。
    • ステータス: インスタンスの現在のステータスを確認し、プロビジョニングの状態で止まっていて、停止やアクティブの状態ではないことを確認します。
    • インスタンスの Compute Engine VM ブートディスク イメージ: カスタム コンテナ、公式の workbench-instances イメージ、Deep Learning VM イメージ、プロビジョニング ステータスから進まなくなる原因となるサポート対象外のイメージのどれを使用してインスタンスが作成されたかを確認します。
    • カスタム スクリプト: インスタンスで、デフォルトの Jupyter ポートを変更するか、依存関係を壊すカスタムの起動スクリプトまたは起動後のスクリプトが使用されているかどうか確認します。これらは、インスタンスがプロビジョニングのステータスから進まなくなる原因になり得ます。
    • 環境バージョン: アップグレードの可否を確認して、インスタンスで最新の環境バージョンが使用されているかどうか確認します。バージョンが古いと、インスタンスがプロビジョニング ステータスから進まなくなる可能性があります。
    • インスタンスの Compute Engine VM のパフォーマンス: VM の現在のパフォーマンスをチェックし、正常なオペレーションの妨げとなる高い CPU 使用率、メモリ不足、ディスク容量の問題によってパフォーマンスが低下していないことを確認します。
    • インスタンスの Compute Engine シリアルポートまたはシステム ロギング: インスタンスにシリアルポートのログがあるかどうか確認します。このログを分析して、Jupyter がポート 127.0.0.1:8080 で実行されていることを確認します。
    • インスタンスの Compute Engine SSH とターミナルへのアクセス: インスタンスの Compute Engine VM が実行されているかどうか確認します。実行されていれば、ユーザーは SSH を使用してターミナルを開き、「home/jupyter」の容量の使用率が 85% 未満であることを確認できます。空き容量が残っていないと、インスタンスがプロビジョニングのステータスから進まなくなる可能性があります。
    • 外部 IP がオフになっている: 外部 IP アクセスがオフになっているかどうかを確認します。ネットワーク構成が正しくないと、インスタンスがプロビジョニング ステータスから進まなくなる可能性があります。

    Docker

    Docker コンテナで gcpdiag を起動するラッパーを使用して gcpdiag を実行できます。Docker または Podman がインストールされている必要があります。

    1. ローカル ワークステーションで次のコマンドをコピーして実行します。
      curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
    2. gcpdiag コマンドを実行します。
      ./gcpdiag runbook vertex/workbench-instance-stuck-in-provisioning \
          --parameter project_id=PROJECT_ID \
          --parameter instance_name=INSTANCE_NAME \
          --parameter zone=ZONE

    このランブックで使用可能なパラメータを表示します。

    次のように置き換えます。

    • PROJECT_ID: リソースを含むプロジェクトの ID。
    • INSTANCE_NAME: プロジェクト内のターゲット Vertex AI Workbench インスタンスの名前。
    • ZONE: ターゲット Vertex AI Workbench インスタンスが配置されているゾーン。

    有用なフラグ:

    gcpdiag ツールのフラグの一覧と説明については、gcpdiag の使用手順をご覧ください。

    Vertex AI でサービス アカウントのロールを使用する際の権限エラー

    問題

    Vertex AI でサービス アカウント ロールを使用すると、一般的な権限エラーが発生します。

    これらのエラーは、Cloud Logging のプロダクト コンポーネント ログまたは監査ログに表示されることがあります。影響を受けるプロジェクトの任意の組み合わせで表示されることもあります。

    これらの問題は、次のいずれかまたは両方が原因で発生する可能性があります。

    • Service Account User ロールを使用すべきときに Service Account Token Creator ロールを使用した場合、またはその逆の場合。これらのロールはサービス アカウントに異なる権限を付与するため、相互に置き換えることはできません。Service Account Token Creator ロールと Service Account User ロールの違いについては、サービス アカウントのロールをご覧ください。

    • 複数のプロジェクトにまたがってサービス アカウントに権限が付与されています。これはデフォルトでは許可されていません。

    ソリューション

    この問題を解決するには、次の対処方法をいくつか試してください。

    • Service Account Token Creator ロールまたは Service Account User ロールが必要かどうかを判断します。詳細については、使用している Vertex AI サービスの IAM ドキュメントと、使用している他のプロダクト インテグレーションをご覧ください。

    • 複数のプロジェクトにサービス アカウントの権限を付与している場合は、iam.disableCrossProjectServiceAccountUsage が強制適用されていないことを確認して、プロジェクトにまたがってサービス アカウントを関連付けられるようにします。iam.disableCrossProjectServiceAccountUsage が強制適用されていないことを確認するには、次のコマンドを実行します。

      gcloud resource-manager org-policies disable-enforce \
        iam.disableCrossProjectServiceAccountUsage \
        --project=PROJECT_ID