簡體   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