繁体   English   中英

将 Python Pickle 文件从 S3 存储桶加载到 Sagemaker Notebook

[英]Load Python Pickle File from S3 Bucket to Sagemaker Notebook

我已经在许多关于如何从 S3 存储桶加载泡菜文件 (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)

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

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

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

在较早的解决问题的尝试中,我们增加了卷大小,但这是为了存储数据,对内存没有帮助(请参阅使用 Amazon SageMaker 自定义您的笔记本卷大小,最多 16 TB,了解有关存储的更多详细信息体积); 所以我们能够将卷大小从 50 GB EBS 减少到 10 GB EBS -

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

为了加载选择的数据框,我简单地使用了这篇文章中来自@kindjacket 的解决方案: 如何从 S3 加载pickle 文件以在 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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM