如何从AWS S3存储桶中更快地读取数据(图像)?

时间:2018-06-11 06:18:01

标签: python amazon-web-services numpy amazon-s3 cloud

我编写了以下代码来从我的S3存储桶加载图像,进行一些初步的预处理,然后将它们读成一个numpy数组:

from scipy.misc import imresize
from scipy.misc import imread
import numpy as np
import boto3
import tempfile
import matplotlib.image as mpimg
import matplotlib.pyplot as plt

temp = []
s3 = boto3.resource('s3', region_name='ap-northeast-2')  # This is the nearest AWS region to my location

role = get_execution_role()
bucket = s3.Bucket('my-bucket')

for img_name in X:
    obj = bucket.Object('ImageFolder/'+img_name)
    obj.download_file(img_name)
    img = mpimg.imread(img_name)
    img = imresize(img, (32, 32))
    img = img.astype('float32')
    temp.append(img)

X = np.stack(temp)

但是要做到这一点需要永远。大约有20000张图片,大约需要3个小时才能将它们加载到temp中!在发布此问题时,它正在将temp放入numpy数组X,我怀疑这可能需要1-2个小时。这意味着整个过程大约需要5个小时才能完成,而在我的本地系统中只需 不到一分钟 (普通的双核2.2) GHz CPU,没有GPU)!那么,我该如何让它更快?是否可以像在我的本地系统中一样快地完成此操作?

1 个答案:

答案 0 :(得分:0)

我认为您可以将https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html VPC端点用于S3。

然后,您的VPC与其他服务之间的流量不会离开Amazon网络,就像通过内部网络访问S3存储桶一样。

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html