将模型上传到 S3

数据挖掘 Python scikit-学习 aws 贤者
2022-03-05 16:41:47

我正在使用 AWS Sage Maker 构建我的模型。我想将模型存储在 S3 中以备后用。如何使用 Amazon Sage Maker 将模型保存在 S3 中?我知道这似乎微不足道,但我不明白我读过的资料/文档。

2个回答

您可以使用 pickle(或任何其他格式来序列化您的模型)和 boto3 库将您的模型保存到 s3。

要将模型保存为 pickle 文件,您可以使用

import pickle
import numpy as np

from sklearn.linear_model import LinearRegression

X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.dot(X, np.array([1, 2])) + 3

model = LinearRegression().fit(X, y)

# save the model to disk
pkl_filename = 'pickle_model.pkl'
with open(pkl_filename, 'wb') as file:
    pickle.dump(model, file)

并将您的模型作为泡菜文件保存到 s3,而不是 sagemaker 的本地:

# to save the model to s3
import boto3

# For aws credentials, if ~/.aws/credentials is missing
# access_key_id =  '...'
# secret_access_key = '...'

# session = boto3.Session(
#     aws_access_key_id=access_key_id ,
#     aws_secret_access_key=secret_access_key,)

# s3_resource = session.resource('s3')

s3_resource = boto3.resource('s3')

bucket='your_bucket'
key= 'pickle_model.pkl'

pickle_byte_obj = pickle.dumps(model)

s3_resource.Object(bucket,key).put(Body=pickle_byte_obj)

扩展另一个答案:这是我自己多次遇到的问题,因此我构建了一个开源模型存储库,可以自动执行此步骤 - 以及执行其他操作,例如对模型进行版本控制和存储它在 s3 中具有结构化路径。

使用它的代码如下所示(这里有一个完整的示例):

from modelstore import ModelStore

# Train your model, as usual
model = LinearRegression()
model.fit(X, y)

# Create a model store that points to your s3 bucket
bucket_name = "your-bucket-name"
modelstore = ModelStore.from_aws_s3(bucket_name)

# Upload your model
model_domain = "your-model-domain"
modelstore.sklearn.upload(model_domain, model=model)

这会将您的模型转储到一个文件中,tar从中创建一个存档,然后为您将其上传到 s3。该函数将一些元数据作为字典返回;这包括您的模型的版本 ID。