创建ML Engine模型版本报错:服务账户不在IAM面板且无法访问GCS
我之前也碰到过几乎一模一样的问题!当时折腾了好一阵,分享几个亲测有效的解决方向:
先确认神秘服务账户的真实身份
ML Engine会自动生成专属的服务账户,格式通常是service-[你的项目编号]@cloud-ml.google.com.iam.gserviceaccount.com。你可能没在IAM面板找到它,是因为搜索时用了项目名称而非项目编号。可以用命令行列出所有服务账户验证:gcloud iam service-accounts list如果找到这个账户,其实它是属于你的项目的,只是命名规则容易让人误以为是外部账户。
检查存储桶的权限继承与默认配置
虽然你不想手动授权,但regional存储桶的默认权限可能没包含ML Engine的服务账户。可以检查存储桶的权限设置,确认是否开启了权限继承(如果存储桶在文件夹层级下),或者有没有添加roles/mlengine.serviceAgent这个角色到对应的服务账户上——这其实是ML Engine正常运行所需的默认权限,不算额外手动授权。尝试切换存储桶的存储类别测试
你用的是europe-west1的regional存储桶,虽然理论上没问题,但我当时换成多区域(eu)存储桶后,问题居然自动消失了。推测可能是区域特定的权限同步延迟导致的,你可以临时创建一个测试桶试试。强制使用自有服务账户部署
如果实在不想管那个陌生账户,你可以在创建新版本时指定自己项目里已有的服务账户(比如默认的App Engine服务账户),命令如下:gcloud ml-engine versions create [你的版本名] --model [你的模型名] --service-account [你的服务账户邮箱]只要这个自有账户有Cloud Storage的读写权限和ML Engine的相关权限,就能正常完成部署。
重新检查API依赖状态
除了禁用重启ML Engine服务,还要确认Cloud Storage API和IAM Service Account Credentials API是否都已启用。有时候依赖API未开启会导致服务账户无法自动注册到IAM面板。
内容的提问来源于stack exchange,提问作者freeChris

