从S3或EC2将数据导入Amazon AWS SageMaker



对于一个AI项目,我想在大约300 GB的数据集上训练一个模型。我想使用AWS SageMaker框架。

在SageMaker文档中,他们写道SageMaker可以从AWS S3 bucket导入数据。由于数据集很大,我将其压缩(压缩到几个zip文件(并上传到S3存储桶中。花了几个小时。然而,为了使用它,我需要解压缩数据集。有几个选项:

  1. 在S3中直接解压缩。这可能是不可能的。参考文献如下
  2. 直接上传未压缩的数据,我尝试过,但花费了太多时间,中途停止,只上传了9%的数据
  3. 将数据上传到AWS EC2机器并在那里解压缩。但是我可以从EC2将数据导入SageMaker吗
  4. 许多解决方案提供了一个Python脚本,可以从S3下载数据,在本地(桌面上(解压缩数据,然后将其流式传输回S3存储桶(请参阅下面的参考资料(。由于我有原始文件,我可以简单地将它们上传到S3,但这需要很长时间(见2(

在编辑中添加:我现在正尝试使用AWS CLI V2上传未压缩的数据。

参考文献:

  • 如何使用boto3在S3中动态提取文件
  • https://community.talend.com/s/question/0D53p00007vCjNSCA0/unzip-aws-s3?language=en_US
  • https://www.linkedin.com/pulse/extract-files-from-zip-archives-in-situ-aws-s3-using-python-tom-reid
  • https://repost.aws/questions/QUI8fTOgURT-ipoJmN7qI_mw/unzipping-files-from-s-3-bucket
  • https://dev.to/felipeleao18/how-to-unzip-zip-files-from-s3-bucket-back-to-s3-29o9

最常用也是最便宜的主要策略(因为空间有自己的成本*GB(不是使用用于训练作业的EC2实例的空间,而是利用从存储桶到实例内存的高传输率

这是基于bucket与EC2实例位于同一区域。否则,你必须提高传输性能,当然要付费

您可以在脚本中实现并行读取文件或按块读取文件的所有策略,但我的建议是使用自动化框架,如dask/pyspark/pyarrow(以防您需要读取数据帧(,或者如果可以将这些zipper转换为更方便的形式(例如,将csv转换为parquet.gzip(,请查看其存储的性质。如果数据的性质不同(例如,图像或其他(,则必须确定适当的惰性数据加载策略。

例如,对于您的zipper问题,您可以轻松地从S3文件夹中获取文件列表,并按顺序读取它们。

您已经压缩了S3中的数据。剩下的是:

  1. 为SageMaker笔记本实例或EC2实例提供足够的EBS存储空间(比如800GB(
  2. 登录到笔记本实例,打开一个shell,将S3中的数据复制到本地磁盘
  3. 解压缩数据
  4. 将解压缩后的数据复制回S3
  5. 终止实例和EBS以避免额外成本

这应该很快(不低于250MB/秒(,因为两个实例在同一AWS区域内都具有到S3的高带宽。

假设您参考了培训,当谈到在SageMaker中使用数据集时,请阅读本指南,了解大型数据集的不同存储选项。

最新更新