我尝试按照以下说明从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访问权限。
答案 0 :(得分:1)
我在us-west-2中重现了这个问题。
但是在我手动导出环境变量AWS_REGION ='us-west-2'之后,它起作用了。
我也尝试不导出AWS_REGION并在us-east-1存储桶上进行了测试。它也起作用。
因此由于某些原因,不会检索和使用aws配置文件中的区域信息。如果未使用环境变量AWS_REGION,它将始终是默认的us-east-1。