使用 'gsutil' 从 Cloud Storage 存储桶上传到 Google Colab 时出错

Error when uploading from a Cloud Storage bucket to Google Colab using 'gsutil'

我在 GCP 的 Compute Engine VM 实例中训练了一个模型,并使用 gsutil cp -r 命令将权重复制到 Cloud Storage 存储桶中。

然后我制作了桶 public 并尝试使用命令 !gsutil cp -r gs://{bucket/folder} ./

将这些权重复制到 Google Colab 笔记本中

但是,我收到以下错误:

ResumableDownloadException: Transfer failed after 23 retries. Final exception: Anonymous caller does not have storage.objects.get access to {folder/path}

为什么会出现此错误?

编辑:

  • Cloud Storage 存储桶缺少适当的 Cloud IAM 角色 使其完全 public 可阅读。角色 roles/storage.objectViewer 提供读取和列出对象的必要权限 bucket - 将其分配给 allUsers 将使它成为 public.

    因此,根据 documentation, 这可以通过单个 gsutil iam 来实现 命令:

    gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME].

    然后,在 Google Colab 中,您应该能够通过以下方式从 Cloud Storage 存储桶中读取(或下载)对象:

    !gsutil cp -r gs://[BUCKET_NAME]/[FOLDER_NAME] ./


  • 一种更安全的方法是,而不是将整个 Cloud Storage 存储桶 public,使用以下 Python 对其进行身份验证 笔记本中的代码:

    from google.colab import auth auth.authenticate_user()

    然后使用gcloud命令设置您正在使用的项目ID; 相应地替换 my-project

    !gcloud config set project my-project

    最后 运行 gsutil 命令;替换 bucketfolder:

    !gsutil cp -r gs://[BUCKET_NAME]/[FOLDER_NAME] ./