使用 '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
命令;替换 bucket
和
folder
:
!gsutil cp -r gs://[BUCKET_NAME]/[FOLDER_NAME] ./
我在 GCP 的 Compute Engine VM 实例中训练了一个模型,并使用 gsutil cp -r
命令将权重复制到 Cloud Storage 存储桶中。
然后我制作了桶 public 并尝试使用命令 !gsutil cp -r gs://{bucket/folder} ./
但是,我收到以下错误:
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
命令;替换bucket
和folder
:!gsutil cp -r gs://[BUCKET_NAME]/[FOLDER_NAME] ./