ML-Engine не может получить доступ к каталогу job_dir в корзине - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь отправить задание на обучение в ML-Engine с помощью gcloud, но у меня возникла ошибка с разрешениями учетной записи службы, которую я не могу выяснить.Код модели существует в экземпляре Compute Engine, из которого я запускаю gcloud ml-engine jobs submit как часть скрипта bash.Я создал служебную учетную запись (ai-platform-developer @ .... iam.gserviceaccount.com) для аутентификации gcloud на экземпляре виртуальной машины и создал корзину для данных задания и модели.Учетной записи службы предоставлены роли «Просмотр объектов хранилища» и «Создание создателя объектов хранилища» для корзины, виртуальной машины и корзины, принадлежащих одному и тому же проекту.

Когда я пытаюсь отправить задание на этого урока , выполняется следующее:

time_stamp=`date +"%Y%m%d_%H%M"`
job_name='ObjectDetection_'${time_stamp}

gsutil cp object_detection/samples/configs/faster_rcnn_resnet50.config 
gs://[bucket-name]/training_configs/faster-rcnn-resnet50.${job_name}.config

gcloud ml-engine jobs submit training ${job_name} \
    --project [project-name] \
    --runtime-version 1.12 \
    --job-dir=gs://[bucket-name]/jobs/${job_name} \
    --packages dist/object_detection-0.1.tar.gz,slim/dist/slim-0.1.tar.gz,/tmp/pycocotools/pycocotools-2.0.tar.gz \
    --module-name object_detection.model_main \
    --region us-central1 \
    --config object_detection/training-config.yml \
    -- \
    --model_dir=gs://[bucket-name]/output/${job_name}} \
    --pipeline_config_path=gs://[bucket-name]/training_configs/faster-rcnn-resnet50.${job_name}.config

где [имя-корзины] и [имя-проекта] - это заполнители для созданного выше сегмента, а проект, в котором он и виртуальная машина содержатся.

Файл конфигурации успешно загружен в корзину, я могу подтвердить, что он существует в облачной консоли.Тем не менее задание не может быть отправлено со следующей ошибкой:

ERROR: (gcloud.ml-engine.jobs.submit.training) User [ai-platform-developer@....iam.gserviceaccount.com] does not have permission to access project [project-name] (or it may not exist): Field: job_dir Error: You don't have the permission to access the provided directory 'gs://[bucket-name]/jobs/ObjectDetection_20190709_2001'
- '@type': type.googleapis.com/google.rpc.BadRequest
  fieldViolations:
  - description: You don't have the permission to access the provided directory 'gs://[bucket-name]/jobs/ObjectDetection_20190709_2001'
    field: job_dir

Если я посмотрю в облачной консоли, файлы, указанные в --packages, будут находиться в этом месте, и я обеспечил учетную запись службы ai-platform-developer@....iam.gserviceaccount.com были назначены роли «Просмотр объектов хранилища» и «Создатель объекта хранилища» для группы, для которой установлены разрешения уровня корзины.Убедившись, что учетная запись службы активирована и используется по умолчанию, я также могу запустить

gsutil ls gs://[bucket-name]/jobs/ObjectDetection_20190709_2001

, которая успешно возвращает содержимое папки без ошибки разрешения.В проекте существует управляемая учетная запись службы service-[project-number]@cloud-ml.google.com.iam.gserviceaccount.com, и я также предоставил этой учетной записи роли «Просмотр объектов хранилища» и «Создатель объекта хранилища» в корзине.

Чтобы подтвердить, что эта виртуальная машина может отправлять задание, яЯ могу переключить пользователя gcloud в свою личную учетную запись, и скрипт запускается и отправляет задание без каких-либо ошибок.Однако, поскольку это существует в общей виртуальной машине, я хотел бы полагаться на авторизацию учетной записи службы вместо моей собственной учетной записи пользователя.

1 Ответ

0 голосов
/ 23 июля 2019

Вы пытались заглянуть в область Compute Engine?Выключите экземпляр, отредактируйте и измените Cloud API access scopes на: Allow full access to all Cloud APIs

...