如何使用 joblib.dump 在 s3 上保存 sklearn 模型?

the*_*mmy 10 python amazon-s3 amazon-web-services scikit-learn joblib

我有一个 sklearn 模型,我想使用 joblib.dump 将泡菜文件保存在我的 s3 存储桶中

joblib.dump(model, 'model.pkl')以前在本地保存模型,但不知道如何将其保存到s3存储桶。

s3_resource = boto3.resource('s3')
s3_resource.Bucket('my-bucket').Object("model.pkl").put(Body=joblib.dump(model, 'model.pkl'))
Run Code Online (Sandbox Code Playgroud)

我希望腌制文件在我的 s3 存储桶上。

nbe*_*hat 6

您还可以使用s3fs库。

import joblib
import s3fs
import os

# Write
fs = s3fs.S3FileSystem()
output_file = os.path.join("s3://...", "model.joblib")

with fs.open(output_file, 'wb') as f:
    joblib.dump(clf, f) 

# Read
with fs.open(output_file, 'rb') as f:
    clf = joblib.load(f)
Run Code Online (Sandbox Code Playgroud)


Ale*_*eev 5

这是一种对我有用的方法。非常简单直接。我正在使用joblib(最好用于存储大型 sklearn 模型),但您也可以使用pickle
此外,我正在使用临时文件与 S3 进行传输。但如果需要,您可以将文件存储在更永久的位置。

import tempfile
import boto3
import joblib

s3_resource = boto3.resource('s3')
bucket_name = "my-bucket"
key = "model.pkl"

# WRITE
with tempfile.TemporaryFile() as fp:
    joblib.dump(model, fp)
    fp.seek(0)
    s3_resource.put_object(Body=fp.read(), Bucket=bucket_name, Key=key)

# READ
with tempfile.TemporaryFile() as fp:
    s3_resource.download_fileobj(Fileobj=fp, Bucket=bucket_name, Key=key)
    fp.seek(0)
    model = joblib.load(fp)

# DELETE
s3_resource.delete_object(Bucket=bucket_name, Key=key)
Run Code Online (Sandbox Code Playgroud)

  • 与 **s3 = boto3.client('s3')** 一起使用让我使用 put_object (2认同)