Udostępnij za pośrednictwem


Wdrażanie kodu w języku Python przy użyciu usługi Model Serving

W tym artykule opisano sposób wdrażania dostosowanego kodu w języku Python za pomocą usługi Mosaic AI Model Serving. W przykładzie w tym artykule skupiono się na zapewnieniu wskazówek dotyczących dodawania logiki przetwarzania wstępnego i przetwarzania postprocesowego do modelu i wdrażania go.

Funkcja języka Python platformy MLflow, pyfunc, zapewnia elastyczność wdrażania dowolnego fragmentu kodu w języku Python lub dowolnego modelu języka Python. Poniżej przedstawiono przykładowe scenariusze, where w których możesz chcieć użyć przewodnika.

  • Modelu wymaga przetworzenia wstępnego przed przekazaniem danych wejściowych do funkcji przewidywania modelu.
  • Struktura modelu nie jest natywnie obsługiwana przez platformę MLflow.
  • Aplikacja wymaga, aby nieprzetworzone dane wyjściowe modelu były przetwarzane w celu ich wykorzystania.
  • Sam model ma logikę rozgałęziania poszczególnych żądań.
  • Chcesz wdrożyć całkowicie niestandardowy kod jako model.

Konstruowanie niestandardowego modelu funkcji języka Python MLflow

Platforma MLflow oferuje możliwość rejestrowania kodu w języku Python przy użyciu niestandardowego formatu modeli języka Python .

Istnieją dwie wymagane funkcje podczas pakowania dowolnego kodu python za pomocą biblioteki MLflow:

  • load_context — wszystkie elementy, które należy załadować tylko raz, aby model działał, powinny być zdefiniowane w tej funkcji. Ma to kluczowe znaczenie, aby system zminimalizował liczbę artefaktów załadowanych podczas predict funkcji, co przyspiesza wnioskowanie.
  • predict — ta funkcja zawiera całą logikę, która jest uruchamiana za każdym razem, gdy jest wykonywane żądanie wejściowe.

Rejestrowanie modelu funkcji języka Python

Mimo że tworzysz model przy użyciu kodu niestandardowego, można użyć udostępnionych modułów kodu z organizacji. Za pomocą parametru code_path autorzy modeli mogą rejestrować pełne odwołania kodu, które ładują się do ścieżki i mogą być używane z innych niestandardowych modeli pyfunc.

Jeśli na przykład model jest rejestrowany przy użyciu:

mlflow.pyfunc.log_model(CustomModel(), "model", code_path = ["preprocessing_utils/"])

Kod z preprocessing_utils jest dostępny w załadowanym kontekście modelu. Poniżej przedstawiono przykładowy model, który używa tego kodu.

class CustomModel(mlflow.pyfunc.PythonModel):
    def load_context(self, context):
        self.model = torch.load(context.artifacts["model-weights"])
        from preprocessing_utils.my_custom_tokenizer import CustomTokenizer
        self.tokenizer = CustomTokenizer(context.artifacts["tokenizer_cache"])

    def format_inputs(self, model_input):
        # insert some code that formats your inputs
        pass

    def format_outputs(self, outputs):
        predictions = (torch.sigmoid(outputs)).data.numpy()
        return predictions

    def predict(self, context, model_input):
        model_input = self.format_inputs(model_input)
        outputs = self.model.predict(model_input)
        return self.format_outputs(outputs)

Udostępnij swój model

Po zarejestrowaniu niestandardowego modelu pyfunc można zarejestrować go w rejestrze Catalog aparatu Unity lub obszarze roboczym i służyć modelowi do punktu końcowego obsługującego model .

Przykład notatnika

W poniższym przykładzie notesu pokazano, jak dostosować dane wyjściowe modelu, gdy nieprzetworzone dane wyjściowe zapytanego modelu muszą zostać przetworzone pod kątem użycia.

Dostosowywanie wyników serwowania modelu za pomocą notatnika MLflow PyFunc

Get notesu