【问题标题】:Load Python Pickle File from S3 Bucket to Sagemaker Notebook将 Python Pickle 文件从 S3 存储桶加载到 Sagemaker Notebook
【发布时间】:2020-10-01 15:50:32
【问题描述】:

我尝试了许多关于如何从 S3 存储桶加载 pickle 文件 (1.9GB) 的帖子中的代码,但似乎没有一个适用于我们在 AWS Sagemaker 上的笔记本实例。笔记本大小为 50GB。

尝试的一些方法:

方法一

import io
import boto3

client = boto3.client('s3')
bytes_buffer = io.BytesIO()
client.download_fileobj(Bucket=my_bucket, Key=my_key_path, Fileobj=bytes_buffer)

bytes_io.seek(0) 
byte_value = pickle.load(bytes_io)

这给出了:

方法2:这实际上让我得到了一些没有错误的东西:

client = boto3.client('s3')
bytes_buffer = io.BytesIO()
client.download_fileobj(Bucket=my_bucket, Key=my_key_path, Fileobj=bytes_buffer)
byte_value = bytes_buffer.getvalue()
import sys
sys.getsizeof(byte_value)/(1024**3)

返回:1.93

但是如何将 byte_value 转换为腌制对象? 我试过这个:

pickled_data = pickle.loads(byte_value)

但是内核“崩溃”了——闲置了,我丢失了所有变量。

【问题讨论】:

    标签: python amazon-web-services amazon-s3 boto3 amazon-sagemaker


    【解决方案1】:

    (事后看来,解决方案很明显,但在我进入 AWS Sagemaker 世界的第一天对我来说不是)...内存错误意味着您需要增加笔记本实例的大小。

    在这种情况下,将按需笔记本实例从 ml.tx.xlarge (2vCPU, 8Gib) 调整为 ml.tx.2xlarge (4vCPU, 16Gib) 是可行的。有关笔记本实例 CPU/内存规格,请参阅 Amazon SageMaker Pricing

    在早期解决问题的尝试中,我们增加了卷大小,但这是为了存储数据而对内存没有帮助(有关存储卷的更多详细信息,请参阅Customize your notebook volume size, up to 16 TB, with Amazon SageMaker);所以我们能够将卷大小从 50 GB EBS 减少到 10 GB EBS -

    可以通过使用Jupyter界面打开终端并输入linux命令free来监控内存

    为了加载选择的数据框,我只是使用了@kindjacket 在这篇文章中的解决方案:How to load a pickle file from S3 to use in AWS Lambda?,如下:

    import pickle
    import boto3
    
    s3 = boto3.resource('s3')
    my_pickle = pickle.loads(s3.Bucket("bucket_name").Object("key_to_pickle.pickle").get()['Body'].read())
    

    【讨论】:

      猜你喜欢
      • 2021-05-20
      • 2019-04-28
      • 2018-07-25
      • 2018-06-24
      • 2019-08-06
      • 1970-01-01
      • 2017-11-23
      • 2022-11-17
      • 2013-10-15
      相关资源
      最近更新 更多