Запись простых логов в облачное хранилище с запросом Google ai-платформы - PullRequest
0 голосов
/ 07 марта 2020

В ai-платформе GCP я пытаюсь записывать простые журналы в файл в дополнение к сохранению модели tf.keras. Однако сохранение модели с помощью tf.saved_model.save работает, в то время как запись в .txt с использованием with open(file) as out: не дает и вызывает это:

FileNotFoundError: [Errno 2] No such file or directory: 'gs://my-test-bucket-001/keras-job-dir/mnist_model_export/results.txt'

Может кто-нибудь объяснить, в чем разница в том, как ai-платформа обнаруживает файл paths?

Мой запрос по сути выглядит следующим образом (см. https://cloud.google.com/ai-platform/docs/getting-started-keras)

...
JOB_DIR = gs://my-test-bucket-001/keras-job-dir
gcloud ai-platform jobs submit training $JOB_NAME \ 
 --package-path trainer/  \
 --module-name trainer.task  \
 --region $REGION  \
 --python-version 3.7  \
 --runtime-version 2.1  \
 --job-dir $JOB_DIR  \
 --stream-logs

Соответствующая часть сценария trainer / task.py такова:

   # use this path to save outputs
   export_path = os.path.join(args.job_dir, 'mnist_model_export')
   # this works
   tf.saved_model.save(mnist_model, export_path)

   # this fails when included
   with open(os.path.join(export_path, 'results.txt'), 'a+') as out:
      log_str = "Job finished! {}\n".format(time.strftime('%Y-%m-%d %H:%M:%S'))
      out.write(log_str)

1 Ответ

0 голосов
/ 09 марта 2020

Когда вы используете with open(os.path.join(export_path, 'results.txt'), 'a+') as out:, вы используете локальную файловую систему и, поскольку вы передаете export_path a gs:// путь, он возвращает файл не существует, так как путь gs:// не доступно локально. Вам необходимо использовать обработчик файлов, который поддерживает чтение / запись в сегменты GCS. Например FileIO

Заменить:

 with open(os.path.join(export_path, 'results.txt'), 'a+') as out:
      log_str = "Job finished! {}\n".format(time.strftime('%Y-%m-%d %H:%M:%S'))
      out.write(log_str)

На:

from tensorflow.python.lib.io import file_io
with file_io.FileIO(os.path.join(export_path, 'results.txt'), mode='a+') as out:
      log_str = "Job finished! {}\n".format(time.strftime('%Y-%m-%d %H:%M:%S'))
      out.write(log_str)

Возможно, вы захотите проверить другие параметры ведения журнала доступные .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...