无法从笔记本实例读取S3中的tfrecords

时间:2018-07-14 16:31:34

标签: amazon-web-services tensorflow amazon-s3 amazon-sagemaker

我尝试按照以下说明从Sage Maker笔记本实例中读取S3中的tfrecords:https://www.tensorflow.org/versions/master/deploy/s3

import tensorflow as tf
import os
os.environ['AWS_ACCESS_KEY_ID'] = '<my-key>'
os.environ['AWS_SECRET_ACCESS_KEY'] = '<my-secret>'

from tensorflow.python.lib.io import file_io
print(file_io.stat('s3://<my-bucket>/data/DEMO-mnist/train.tfrecords'))

以上代码失败,并显示以下错误:

---------------------------------------------------------------------------
NotFoundError                             Traceback (most recent call last)
<ipython-input-7-770c0aef6d7b> in <module>()
      1 from tensorflow.python.lib.io import file_io
----> 2 print(file_io.stat('s3://<my-bucket>/data/DEMO-mnist/train.tfrecords'))

~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/tensorflow/python/lib/io/file_io.py in stat(filename)
    551   with errors.raise_exception_on_not_ok_status() as status:
    552     pywrap_tensorflow.Stat(compat.as_bytes(filename), file_statistics, status)
--> 553     return file_statistics

~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py in __exit__(self, type_arg, value_arg, traceback_arg)
    517             None, None,
    518             compat.as_text(c_api.TF_Message(self.status.status)),
--> 519             c_api.TF_GetCode(self.status.status))
    520     # Delete the underlying status object from memory otherwise it stays alive
    521     # as there is a reference to status from this from the traceback due to

NotFoundError: Object s3://<my-bucket>/data/DEMO-mnist/train.tfrecords does not exist

但是,如果我在不使用SageMaker的情况下从常规EC2实例运行,则相同的代码可以正常工作。

用于笔记本实例的IAM角色具有完全的S3访问权限。

1 个答案:

答案 0 :(得分:1)

我在us-west-2中重现了这个问题。

但是在我手动导出环境变量AWS_REGION ='us-west-2'之后,它起作用了。

我也尝试不导出AWS_REGION并在us-east-1存储桶上进行了测试。它也起作用。

因此由于某些原因,不会检索和使用aws配置文件中的区域信息。如果未使用环境变量AWS_REGION,它将始终是默认的us-east-1。