Загрузите набор данных из amazon S3 в ноутбук Jupyter на EC2 - PullRequest
0 голосов
/ 13 сентября 2018

Я хочу попробовать сегментацию изображений с углубленным изучением с использованием AWS. Мои данные хранятся в Amazon S3, и я хотел бы получить к ним доступ с ноутбука Jupyter, который работает на экземпляре Amazon EC2.

Я планирую использовать Tensorflow для сегментации, поэтому мне показалось целесообразным использовать параметры, предоставляемые самим Tensorflow (https://www.tensorflow.org/deploy/s3), поскольку мне кажется, что в конце я хочу, чтобы мои данные были представлены в формате tf.Dataset. Однако, это не совсем сработало для меня. Я попробовал следующее:

filenames = ["s3://path_to_first_image.png", "s3://path_to_second_image.png"]
dataset = tf.data.TFRecordDataset(filenames)

iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()

with tf.Session() as sess:
for i in range(2):
    print(sess.run(next_element))

Я получаю следующую ошибку:

OutOfRangeError: End of sequence
 [[Node: IteratorGetNext_6 = IteratorGetNext[output_shapes=[[]], output_types=[DT_STRING], _device="/job:localhost/replica:0/task:0/device:CPU:0"](OneShotIterator_6)]]

Я довольно новичок в tenorflow и только недавно начал опробовать некоторые вещи с AWS, поэтому я надеюсь, что моя ошибка станет очевидной для кого-то с большим опытом. Буду очень признателен за любую помощь или совет! Может быть, это даже неправильный путь, и мне лучше с чем-то вроде boto3 (тоже наткнулся на это, но подумал, что tf будет более подходящим в моем случае) или что-то еще?

P.S. Tensorflow также рекомендует протестировать установку следующим образом:

from tensorflow.python.lib.io import file_io
print (file_io.stat('s3://path_to_image.png'))

Для меня это приводит к ошибке Object doesn't exist, хотя объект, безусловно, существует, и он перечисляется среди других, если я использую

for obj in s3.Bucket(name=MY_BUCKET_NAME).objects.all():
print(os.path.join(obj.bucket_name, obj.key))

У меня также заполнены мои учетные данные /.aws/credentials. В чем может быть проблема здесь?

1 Ответ

0 голосов
/ 25 октября 2018

Прямой доступ к данным S3 из экземпляра Ubuntu Deep Learning с помощью

cd ~/.aws
aws configure

Затем обновите ключ aws и секретный ключ для экземпляра, просто чтобы убедиться. Проверьте версию awscli с помощью команды:

aws --version

Подробнее о конфигурации

https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

Вы можете ввести в Jupyter

import pandas as pd
from smart_open import smart_open
import os

aws_key = 'aws_key'
aws_secret = 'aws_secret'

bucket_name = 'my_bucket'
object_key = 'data.csv'

path = 's3://{}:{}@{}/{}'.format(aws_key, aws_secret, bucket_name, object_key)

df = pd.read_csv(smart_open(path))

Кроме того, объекты, хранящиеся в контейнерах, имеют уникальное значение ключа и извлекаются с использованием URL-адреса HTTP. Например, если объект со значением ключа

/photos/mygarden.jpg 

хранится в

myawsbucket 

ведро, затем оно адресуется с помощью URL

http://myawsbucket.s3.amazonaws.com/photos/mygarden.jpg.

Если ваши данные не являются конфиденциальными, вы можете использовать опцию http. Подробнее:

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonS3.html

Вы можете изменить настройку корзины на общедоступную. Надеюсь, это поможет.

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