Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过joblib向S3 bucket写入/加载机器学习模型?_Python_Amazon Web Services_Amazon S3_Joblib - Fatal编程技术网

Python 如何通过joblib向S3 bucket写入/加载机器学习模型?

Python 如何通过joblib向S3 bucket写入/加载机器学习模型?,python,amazon-web-services,amazon-s3,joblib,Python,Amazon Web Services,Amazon S3,Joblib,我有一个ml模型,我想保存在S3存储桶上 from lightgbm.sklearn import LGBMClassifier # Initialize model mdl_lightgbm = LGBMClassifier(boosting_type='rf', objective='binary') # Fit data mdl_lightgbm.fit(X,Y) # Save model to dictionary mdl_dict = {'mdl_fitted':mdl_

我有一个ml模型,我想保存在S3存储桶上

from lightgbm.sklearn import LGBMClassifier

# Initialize model
mdl_lightgbm = LGBMClassifier(boosting_type='rf', objective='binary')

# Fit data
mdl_lightgbm.fit(X,Y)
    
# Save model to dictionary
mdl_dict = {'mdl_fitted':mdl_lightgbm}    
出于某些原因,我将安装的模型存储在字典中。其思想是通过joblib将模型转储/加载到S3存储桶中,或从S3存储桶中转储/加载模型。

将模型保存到S3
from lightgbm.sklearn import LGBMClassifier

# Initialize model
mdl_lightgbm = LGBMClassifier(boosting_type='rf', objective='binary')

# Fit data
mdl_lightgbm.fit(X,Y)
    
# Save model to dictionary
mdl_dict = {'mdl_fitted':mdl_lightgbm}    
基于此思想,以下函数允许您将模型保存到s3存储桶中或通过joblib本地保存:

import boto3 
from io import BytesIO 

def write_joblib(file, path):
    ''' 
       Function to write a joblib file to an s3 bucket or local directory.
       Arguments:
       * file: The file that you want to save 
       * path: an s3 bucket or local directory path. 
    '''

    # Path is an s3 bucket
    if path[:5] == 's3://':
        s3_bucket, s3_key = path.split('/')[2], path.split('/')[3:]
        s3_key = '/'.join(s3_key)
        with BytesIO() as f:
            joblib.dump(file, f)
            f.seek(0)
            boto3.client("s3").upload_fileobj(Bucket=s3_bucket, Key=s3_key, Fileobj=f)
    
    # Path is a local directory 
    else:
        with open(path, 'wb') as f:
            joblib.dump(file, f)
在您的示例中,如果要将模型保存到s3存储桶,只需键入

write_joblib(mdl_dict,'s3://bucket\u name/mdl_dict.joblib')

来自s3的负载模型 另外,根据这个想法,下面的函数让您从s3 bucket或本地文件加载模型

def read_joblib(path):
    ''' 
       Function to load a joblib file from an s3 bucket or local directory.
       Arguments:
       * path: an s3 bucket or local directory path where the file is stored
       Outputs:
       * file: Joblib file loaded
    '''

    # Path is an s3 bucket
    if path[:5] == 's3://':
        s3_bucket, s3_key = path.split('/')[2], path.split('/')[3:]
        s3_key = '/'.join(s3_key)
        with BytesIO() as f:
            boto3.client("s3").download_fileobj(Bucket=s3_bucket, Key=s3_key, Fileobj=f)
            f.seek(0)
            file = joblib.load(f)
    
    # Path is a local directory 
    else:
        with open(path, 'rb') as f:
            file = joblib.load(f)
    
    return file
在您的情况下,要从相同的s3存储桶加载文件,请使用以下代码行

mdl_lightgbm = read_joblib('s3://bucket_name/mdl_dict.joblib')
mdl_lightgbm = mdl_lightgbm['mdl_fitted']
将模型保存到S3 基于此思想,以下函数允许您将模型保存到s3存储桶中或通过joblib本地保存:

import boto3 
from io import BytesIO 

def write_joblib(file, path):
    ''' 
       Function to write a joblib file to an s3 bucket or local directory.
       Arguments:
       * file: The file that you want to save 
       * path: an s3 bucket or local directory path. 
    '''

    # Path is an s3 bucket
    if path[:5] == 's3://':
        s3_bucket, s3_key = path.split('/')[2], path.split('/')[3:]
        s3_key = '/'.join(s3_key)
        with BytesIO() as f:
            joblib.dump(file, f)
            f.seek(0)
            boto3.client("s3").upload_fileobj(Bucket=s3_bucket, Key=s3_key, Fileobj=f)
    
    # Path is a local directory 
    else:
        with open(path, 'wb') as f:
            joblib.dump(file, f)
在您的示例中,如果要将模型保存到s3存储桶,只需键入

write_joblib(mdl_dict,'s3://bucket\u name/mdl_dict.joblib')

来自s3的负载模型 另外,根据这个想法,下面的函数让您从s3 bucket或本地文件加载模型

def read_joblib(path):
    ''' 
       Function to load a joblib file from an s3 bucket or local directory.
       Arguments:
       * path: an s3 bucket or local directory path where the file is stored
       Outputs:
       * file: Joblib file loaded
    '''

    # Path is an s3 bucket
    if path[:5] == 's3://':
        s3_bucket, s3_key = path.split('/')[2], path.split('/')[3:]
        s3_key = '/'.join(s3_key)
        with BytesIO() as f:
            boto3.client("s3").download_fileobj(Bucket=s3_bucket, Key=s3_key, Fileobj=f)
            f.seek(0)
            file = joblib.load(f)
    
    # Path is a local directory 
    else:
        with open(path, 'rb') as f:
            file = joblib.load(f)
    
    return file
在您的情况下,要从相同的s3存储桶加载文件,请使用以下代码行

mdl_lightgbm = read_joblib('s3://bucket_name/mdl_dict.joblib')
mdl_lightgbm = mdl_lightgbm['mdl_fitted']

您将如何推断此joblib模型?@spacedustpi由于模型工件存储在
mdl_fitted
键中,您可以调用
mdl_lightgbm['mdl_fitted'],预测(X_测试)
您将如何推断此joblib模型?@spacedustpi由于模型工件存储在
mdl_fitted
键中,您可以调用
mdl\u lightgbm['mdl\u fitted'],预测(X\u测试)