【问题标题】:reading files in google cloud machine learning在谷歌云机器学习中读取文件
【发布时间】:2017-08-03 07:38:10
【问题描述】:

我尝试使用gcloud ml-engine jobs submit training 在google cloud ml-engine 上运行tensorflow-wavenet,但云作业在尝试读取json 配置文件时崩溃:

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

arg.wavenet_params 只是我上传到谷歌云存储桶的 json 文件的文件路径。文件路径如下所示: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 读取文件,或者我无法从带有gs://BUCKET_NAME/FILE_PATH 的python 文件中访问谷歌云存储桶。

【问题讨论】:

标签: google-cloud-ml google-cloud-ml-engine


【解决方案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)

【讨论】:

  • 如何将带有权限凭证的 json 附加到函数以访问私有存储桶?
  • 您可以设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量。但是,在 CMLE 中这样做可能会很棘手。您可以在导入 tensorflow 之前尝试设置 os.env['GOOGLE_APPLICATION_CREDENTIALS'],但我不确定这是否可行。您还可以编写一个包装脚本来设置环境变量,然后将您的真实脚本作为子进程运行。
  • 我还找到了tf.contrib.cloud.configure_gcstensorflow.org/api_docs/python/tf/contrib/cloud/configure_gcs
猜你喜欢
  • 2018-09-23
  • 2016-01-11
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 2018-01-31
  • 2017-02-20
相关资源
最近更新 更多