чтение файлов в облачном машинном обучении Google

Я попытался запустить tensorflow-wavenet в облачном движке Google Cloud с помощью gcloud ml-engine jobs submit training, но облачное задание завершилось сбоем. когда он пытался прочитать файл конфигурации json:

with open(args.wavenet_params, 'r') as f:
   wavenet_params = json.load(f)

arg.wavenet_params — это просто путь к файлу json, который я загрузил в корзину облачного хранилища Google. Путь к файлу выглядит так: gs://BUCKET_NAME/FILE_PATH.json.

Я перепроверил правильность пути к файлу и уверен, что эта часть ответственна за сбой, так как все остальное я закомментировал.

Файл журнала сбоев не дает много информации о том, что произошло:

Module raised an exception for failing to call a subprocess Command '['python', '-m', u'gcwavenet.train', u'--data_dir', u'gs://wavenet-test-data/VCTK-Corpus-Small/', u'--logdir_root', u'gs://wavenet-test-data//gcwavenet10/logs']' returned non-zero exit status 1.

Я заменил wavenet_params = json.load(f) на f.close() и все равно получаю тот же результат.

Все работает, когда я запускаю его локально с помощью gcloud ml-engine local train.

Я думаю, что проблема связана с чтением файлов с gcloud ml-engine в целом или с тем, что я не могу получить доступ к облачной корзине Google из файла python с gs://BUCKET_NAME/FILE_PATH.


person joaeba    schedule 13.03.2017    source источник
comment
Связано: stackoverflow.com/q/41633748/1399222, stackoverflow.com/q/40396552/1399222   -  person rhaertel80    schedule 13.03.2017


Ответы (1)


Функция Python open не может читать файлы из GCS. Вам нужно будет использовать библиотеку, способную это сделать. TensorFlow включает одну такую ​​библиотеку:

import tensorflow as tf
from tensorflow.python.lib.io import file_io

with file_io.FileIO(args.wavenet_params, 'r') as f:
  wavenet_params = json.load(f)
person rhaertel80    schedule 13.03.2017
comment
Как я могу прикрепить свой json с учетными данными разрешения к функции, чтобы получить доступ к частной корзине? - person Dominique Paul; 12.01.2019
comment
Вы можете установить переменную env GOOGLE_APPLICATION_CREDENTIALS. Однако сделать это в CMLE может быть сложно. Вы можете попробовать установить os.env['GOOGLE_APPLICATION_CREDENTIALS'] перед импортом тензорного потока, но я не уверен, что это сработает. Вы также можете написать сценарий-оболочку, который устанавливает переменную среды, а затем запускает ваш реальный сценарий как подпроцесс. - person rhaertel80; 15.01.2019