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 kodu w języku Python przy użyciu usługi Model Serving.

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

  • Model wymaga wstępnego przetwarzania przed przekazaniem danych wejściowych do funkcji predict modelu.
  • Struktura modelu nie jest natywnie obsługiwana przez platformę MLflow.
  • Aplikacja wymaga, aby nieprzetworzone dane wyjściowe modelu były przetwarzane po użyciu.
  • Sam model ma logikę rozgałęziania poszczególnych żądań.
  • Chcesz wdrożyć w pełni 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 modeli niestandardowych pyfunc .

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

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

Kod z elementu 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)

Obsługa modelu

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

Przykład notesu

W poniższym przykładzie notesu pokazano, jak dostosować dane wyjściowe modelu, gdy nieprzetworzone dane wyjściowe zapytania modelu muszą zostać przetworzone po użyciu.

Dostosowywanie danych wyjściowych obsługujących model za pomocą notesu MLflow PyFunc

Pobierz notes