Как записывать события tensorflow в облачное хранилище Google из контейнера Docker внутри экземпляра виртуальной машины

#python #authentication #google-cloud-platform #google-cloud-storage #tensorflow2.0

#python #аутентификация #google-cloud-platform #google-облачное хранилище #tensorflow2.0

Вопрос:

Я создал экземпляр виртуальной машины в Google Compute Engine. После загрузки моего проекта и создания моего образа я запустил свой контейнер и авторизовал доступ к облачной платформе Google с помощью своей учетной записи службы:

 gcloud auth activate-service-account test@xxx.iam.gserviceaccount.com --key-file=mykey.json
  

чтобы я мог получить доступ к своему облачному хранилищу Google (я провел тест с gsutil cp помощью своего корзины, и он работает). Теперь я пытаюсь выполнить скрипт tensorflow python следующим образом:

 python object_detection/model_main_tf2.py 
  --pipeline_config_path=/raccoon/config.config 
  --model_dir=gs://my-bucket/ 
  --num_train_steps=10
  

указывая в качестве model_dir мое ведро, чтобы там хранились контрольные точки и события (чтобы отслеживать ход обучения с помощью tensorboard с моего ноутбука).

Проблема в том, что я получаю следующую ошибку разрешения от tensorflow:

 tensorflow.python.framework.errors_impl.PermissionDeniedError: 
Error executing an HTTP request: HTTP response code 
403 with body '{
  "error": {
    "code": 403,
    "message": "Insufficient Permission",
    "errors": [
      {
        "message": "Insufficient Permission",
        "domain": "global",
        "reason": "insufficientPermissions"
      }
    ]
  }
}
'
when initiating an upload to gs://my-bucket/train/events.out.tfevents.1601998426.266
1f74c3966.450.2928.v2
        Failed to flush 1 events to gs://my-bucket/train/events.out.tfevents.1601998426.2661f
74c3966.450.2928.v2
        Flushing first event.
        Could not initialize events writer. [Op:CreateSummaryFileWriter]
  

train Каталог существует в моей корзине, и, как я уже говорил, работает следующая команда:

 gsutil cp test.txt gs://my-bucket/train/.
  

Я что-то упускаю?

Ответ №1:

Аутентификация gcloud просто гарантирует, что будущие gcloud команды будут аутентифицированы. Ваш скрипт (вероятно) не используется gcloud и, следовательно, не проходит проверку подлинности.

Вместо этого, если у вас есть учетные данные учетной записи службы в файле JSON, вы можете указать его через переменную GOOGLE_APPLICATION_CREDENTIALS среды, чтобы TensorFlow мог читать / записывать в GCS через gs:// URL-адреса.

Комментарии:

1. Спасибо Дастину за объяснения. После экспорта переменной (в моем контейнере) она работает.