Я пытаюсь отправить задание на обучение в 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 в свою личную учетную запись, и скрипт запускается и отправляет задание без каких-либо ошибок.Однако, поскольку это существует в общей виртуальной машине, я хотел бы полагаться на авторизацию учетной записи службы вместо моей собственной учетной записи пользователя.