使用 AppEngine flex 中的 Python Google API 客户端库,我正在调用 GCP ML Engine API。 当我列出不同的模型、获取它们的默认版本和所有“只读”操作时,它工作正常,但当我尝试为模型创建新版本时,它不起作用。我收到“访问模型被拒绝”的 403 Forbidden 错误。
我使用服务帐户来调用电话。在 IAM 中,我的服务帐户拥有“ML Engine 管理员”权限。
这就是我打电话的方式
from google.oauth2.service_account import Credentials
credentials = Credentials.from_service_account_file(PATH_TO_MY_JSON)
ml_client = discovery.build(u'ml', u'v1', credentials=credentials)
body = {
u"name": version_name,
u"description": description,
u"runtimeVersion": current_default_version.get(u"runtimeVersion"),
u"framework": current_default_version.get(u"framework"),
u"pythonVersion": current_default_version.get(u"pythonVersion"),
u"deploymentUri": deployment_uri
}
request = ml_client.projects().models().versions().create(parent=get_query_name(model_name), body=body)
request.execute()
错误
<HttpError 403 when requesting https://ml.googleapis.com/v1/projects/XXX/models/YYY/versions?alt=json returned "Access to model denied.">
它与服务帐户有关,因为当我在 Cloud Shell 中运行此代码并在没有凭据的情况下构建我的 ml_client
(ml_client = discovery.build(u'ml', u' v1')
),它工作正常。
最佳答案
我的服务账户 IAM 角色:
- 机器学习引擎开发人员
- 存储对象查看器
对我来说,如果我通过 UI 创建模型资源,我无法从 python 客户端库创建模型版本。但是,如果我通过 python 客户端创建了模型资源,则创建一个可以工作的模型版本。
credentials = Credentials.from_service_account_file('./service_account.json')
ml = discovery.build('ml', 'v1', credentials=credentials)
request_dict = {
'name': 'model_resource_name',
'description': 'your_model_description'}
project_id = 'projects/{}'.format('YOUR_PROJECT_ID')
request = ml.projects().models().create(parent=project_id, body=request_dict)
request.execute()
body = {
u"name": "test_version",
u"description": "description",
u"runtimeVersion": "1.13",
u"framework": "TENSORFLOW",
u"pythonVersion": "3.5",
u"deploymentUri": "gs://BUCKET_ID/directory_path_to_your_model/"
}
request = ml.projects().models().versions().create(
parent='projects/{}/models/{}'.format(
'YOUR_PROJECT_ID',
'model_resource'),
body=body)
response = request.execute()
仍在调查为什么通过 UI 创建模型资源不允许 python 客户端创建模型版本。
关于google-cloud-platform - 在 Google Cloud Platform ML Engine 中创建新版本时出现 403 Forbidden,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53781343/