我在GCP的计算引擎VM实例中训练了一个模型,并使用gsutil cp -r
命令将权重复制到了云存储桶中。
然后我将存储桶设置为公开,并尝试使用命令!gsutil cp -r gs://{bucket/folder} ./
将这些权重复制到Google Colab笔记本中
然而,我收到了以下错误:
ResumableDownloadException: 在23次重试后传输失败。最终异常:匿名调用者没有访问{folder/path}的storage.objects.get权限
为什么我会收到这个错误?
回答:
编辑:
-
云存储桶缺少适当的Cloud IAM角色,使其无法完全公开读取。角色
roles/storage.objectViewer
提供了从存储桶读取和列出对象所需的权限 – 将其分配给allUsers
将使其公开。因此,根据文档,这可以通过一个单一的
gsutiliam
命令实现:gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]
。然后,在Google Colab中,你应该能够从云存储桶读取(或下载)对象:
!gsutil cp -r gs://[BUCKET_NAME]/[FOLDER_NAME] ./
-
更安全的方法是,不将整个云存储桶设为公开,而是使用以下Python代码在笔记本中对其进行身份验证:
from google.colab import auth auth.authenticate_user()
然后设置你正在使用的项目ID,使用
gcloud
命令;相应地替换my-project
:!gcloud config set project my-project
最后运行
gsutil
命令;替换bucket
和folder
:!gsutil cp -r gs://[BUCKET_NAME]/[FOLDER_NAME] ./