排查 Vertex AI Workbench 问题

本页面介绍了在遇到 Vertex AI Workbench 使用问题时可能有帮助的问题排查步骤。

如需使用 Vertex AI 其他组件的帮助,另请参阅排查 Vertex AI 问题

若要过滤此页面的内容,请点击一个主题:

实用流程

本部分介绍了一些可能对您有帮助的流程。

使用 SSH 连接到用户管理的笔记本实例

通过在 Cloud Shell 中或安装了 Google Cloud CLI 的任何环境中输入以下命令,使用 ssh 连接到您的实例。

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 按钮,以连接到您的实例。

向“反向代理”服务器重新注册

如需向内部反向代理服务器重新注册用户管理的笔记本实例,您可以从用户管理的笔记本页面停止和启动虚拟机,或者通过 SSH 连接到用户管理的笔记本实例,然后输入:

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

验证 Docker 服务状态

如需验证 Docker 服务状态,您可以使用 ssh 连接到由用户管理的笔记本实例,然后输入:

 sudo service docker status 

验证“反向代理”代理正在运行

如需验证笔记本“反向代理”代理是否正在运行,请通过 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 Internal API 是否处于活跃状态

Jupyter API 应始终在端口 8080 上运行。您可以通过检查实例的 syslog 是否包含类似以下内容的条目来验证这一点:

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

如需验证 Jupyter Internal 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 服务,您可以从用户管理的笔记本页面停止并启动虚拟机,或者通过 SSH 连接到用户管理的笔记本实例,然后输入以下命令:

 sudo service docker restart 

重启“反向代理”代理

如需重启“反向代理”代理,您可以从用户管理的笔记本页面停止和启动虚拟机,或者通过 SSH 连接到用户管理的笔记本实例,然后输入:

 sudo docker restart proxy-agent 

重启 Jupyter 服务

如需重启 Jupyter 服务,您可以从用户管理的笔记本页面停止并启动虚拟机,或者通过 SSH 连接到用户管理的笔记本实例,然后输入以下命令:

 sudo service jupyter restart 

重启 Notebooks Collection Agent

Notebooks Collection Agent 服务在后台运行 Python 进程,以验证 Vertex AI Workbench 实例的核心服务的状态。

如需重启 Notebooks Collection Agent 服务,您可以从 Google Cloud 控制台停止并重新启动虚拟机;也可以通过 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 界面中,选择文件 > 新建 > 终端,以打开终端窗口。对于用户管理的笔记本实例,您可以使用 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 虚拟机启动磁盘映像:检查实例是否是使用自定义容器、官方 workbench-instances 映像、Deep Learning VM Image 或可能导致实例卡在配置状态的不受支持的映像创建的。
    • 自定义脚本:检查实例是否正在使用自定义启动或启动后脚本,这些脚本会更改默认的 Jupyter 端口或破坏依赖关系,从而可能导致实例卡在配置状态。
    • 环境版本:通过检查实例的可升级性来检查其是否使用最新的环境版本。较低版本可能会导致实例卡在预配状态。
    • 实例的 Compute Engine 虚拟机性能:检查虚拟机的当前性能,确保其不会因 CPU 使用率过高、内存不足或可能中断正常操作的磁盘空间问题而受到影响。
    • 实例的 Compute Engine 串行端口或系统日志记录:检查实例是否有串行端口日志,并分析这些日志以确保 Jupyter 在端口 127.0.0.1:8080 上运行。
    • 实例的 Compute Engine SSH 和终端访问权限:检查实例的 Compute Engine 虚拟机是否正在运行,以便用户可以通过 SSH 并打开终端来验证“home/jupyter”中的空间使用率是否低于 85%。如果没有剩余空间,可能会导致实例卡在预配状态。
    • 外部 IP 已关闭:检查是否已关闭外部 IP 访问权限。网络配置不正确可能会导致实例卡在预配状态。

    Docker

    您可以使用封装容器运行 gcpdiag,以在 Docker 容器中启动 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

    查看此 Runbook 的可用参数

    替换以下内容:

    • 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 CreatorService 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