403 Запрещено при создании новой версии в Google Cloud Platform ML Engine. - PullRequest
0 голосов
/ 14 декабря 2018

Используя клиентскую библиотеку Python Google API из AppEngine flex, я звоню в 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')), он работает нормально.

1 Ответ

0 голосов
/ 24 июня 2019

Моя учетная запись службы Роли IAM:

  • ML Engine Developer
  • Средство просмотра объектов хранения

Мне кажется, что если я создал модельресурс через пользовательский интерфейс, я не мог создать модель модели из клиентской библиотеки 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()

Все еще выясняю, почему создание ресурса модели с помощью пользовательского интерфейса не позволяет клиенту Python создаватьверсия модели.

...