class _DataInterface(BaseDataInterface): input_name = os.getenv( 'INPUT_NAME', _ModelConfigurations().options['input_name']) output_name = os.getenv( 'OUTPUT_NAME', _ModelConfigurations().options['output_name'])
def __init__(self, model_runners): self.model_runners = model_runners self.classifiers = OrderedDict() self.input_name = None self.channel = None self.stub = None self.model_spec_name = os.getenv("MODEL_SPEC_NAME", _ModelConfigurations().options["model_spec_name"]) self.model_spec_signature_name = os.getenv("MODEL_SPEC_SIGNATURE_NAME", _ModelConfigurations().options["model_spec_signature_name"]) self.load_model()
def test_ModelConfigurations(): prediction_types = [e.value for e in PREDICTION_TYPE] assert os.path.exists(_ModelConfigurations().interface_filepath) assert isinstance(_ModelConfigurations().interface_dict, Dict) assert isinstance(_ModelConfigurations().model_name, str) assert isinstance(_ModelConfigurations().io, Dict) assert isinstance(_ModelConfigurations().model_runners, List) assert isinstance(_ModelConfigurations().runner, str) assert _ModelConfigurations().prediction_type in prediction_types
def predict(self, input_data: Image) -> np.ndarray: logger.info(f'run predict proba in {self.__class__.__name__}') _prediction = input_data for k, v in self.classifiers.items(): if v['runner'] == MODEL_RUNTIME.SKLEARN.value: _prediction = np.array(v['predictor'].transform(_prediction)) else: request = predict_pb2.PredictRequest() request.model_spec.name = self.model_spec_name request.model_spec.signature_name = self.model_spec_signature_name request.inputs[_DataInterface().input_name].CopyFrom(tf.make_tensor_proto( _prediction, shape=_ModelConfigurations().io['input_shape'])) result = self.stub.Predict(request, TIMEOUT_SECOND) _prediction = np.array( result.outputs[_DataInterface().output_name].float_val) output = _prediction return output
from typing import List, Sequence import numpy as np import onnxruntime as rt from src.app.configurations import _ModelConfigurations from src.app.constants import MODEL_RUNTIME from src.app.ml.base_predictor import BaseData, BaseDataInterface, BaseDataConverter, BasePredictor from src.app.ml.save_helper import load_labels import logging logger = logging.getLogger(__name__) LABELS = load_labels(_ModelConfigurations().options["label_filepath"]) class _Data(BaseData): test_data: List[List[int]] = [[5.1, 3.5, 1.4, 0.2]] labels: List[str] = LABELS class _DataInterface(BaseDataInterface): pass class _DataConverter(BaseDataConverter): pass class _Classifier(BasePredictor): def __init__(self, model_runners): self.model_runners = model_runners
class _DataInterface(BaseDataInterface): input_name = os.getenv("INPUT_NAME", _ModelConfigurations().options["input_name"]) output_name = os.getenv("OUTPUT_NAME", _ModelConfigurations().options["output_name"])