1

私はセルドン展開を行っています。sklearn を使用してカスタム パイプラインを作成しました。これはディレクトリMyPipelines/CustomPipelines.pyにあります。メインコードすなわち。my_prediction.pyは、seldon がデフォルトで実行するファイルです (私の設定に基づく)。このファイルでは、カスタム パイプラインをインポートしています。ローカル (PyCharm) で my_prediction.py を実行すると、正常に実行されます。しかし、Seldon を使用してデプロイすると、次のエラーが表示されます。Attribute Error: Can't get Attribute 'MyEncoder'

CustomPipelines.py でモジュールをロードできません。Unable to load files using pickle and multiple modulesのすべてのソリューションを試しましたが、どれも機能しませんでした。

MyPipelines/CustomPipelines.py

from sklearn.preprocessing import LabelEncoder
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.pipeline import Pipeline

class MyEncoder(BaseEstimator, TransformerMixin):
    def __init__(self):
        super().__init__()

    def fit(self, X, y=None):
        return self

    def transform(self, X, y=None):
        df = X
        vars_cat = [var for var in df.columns if df[var].dtypes == 'O']
        cat_with_na = [var for var in vars_cat if df[var].isnull().sum() > 0]
        df[cat_with_na] = df[cat_with_na].fillna('Missing')

        return df

my_prediction.py

import pickle
import pandas as pd
import dill
from MyPipelines.CustomPipelines import MyEncoder
from MyPipelines.CustomPipelines import *
import MyPipelines.CustomPipelines

class my_prediction:
   
    def __init__(self):

        file_name = 'model.sav'
        with open(file_name, 'rb') as model_file:
                self.model = pickle.load(model_file)

    def predict(self, request):
        data = request.get('ndarray')
        columns = request.get('names')
        X = pd.DataFrame(data, columns = columns)
        predictions = self.model.predict(X)
        return predictions

エラー:

File microservice/my_prediction.py in __init__                       
self.model = pickle.load(model_file)                 
Attribute Error: Can't get Attribute 'MyEncoder' on <module '__main__' from 'opt/conda/bin/seldon-core-microservice'
4

1 に答える 1