Distribuera Python-kod med modellservering

Den här artikeln beskriver hur du distribuerar din anpassade Python-kod med Mosaic AI Model Serving. Exemplet i den här artikeln fokuserar på att ge vägledning för att lägga till förbearbetnings- och efterbearbetningslogik i din modell och distribuera den.

MLflows Python-funktion, pyfunc, ger flexibilitet att distribuera valfri Python-kod eller någon Python-modell. Följande är exempelscenarier där du kanske vill använda guiden.

  • Din modell kräver förbearbetning innan indata kan skickas till modellens förutsägelsefunktion.
  • Ditt modellramverk stöds inte internt av MLflow.
  • Ditt program kräver att modellens råutdata efterbearbetas för förbrukning.
  • Själva modellen har förgreningslogik per begäran.
  • Du vill distribuera helt anpassad kod som modell.

Skapa en anpassad MLflow Python-funktionsmodell

MLflow erbjuder möjligheten att logga Python-kod med det anpassade Python-modellformatet.

Det finns två nödvändiga funktioner när du paketerar godtycklig python-kod med MLflow:

  • load_context – allt som behöver läsas in bara en gång för att modellen ska fungera ska definieras i den här funktionen. Detta är viktigt så att systemet minimerar antalet artefakter som läses in under funktionen predict, vilket påskyndar slutsatsdragningen.
  • predict – den här funktionen innehåller all logik som körs varje gång en indatabegäran görs.

Not

Innan du distribuerar din anpassade kod som en modell är det fördelaktigt att kontrollera att modellen kan hanteras. Se MLflow-dokumentationen för hur du kan använda mlflow.models.predict för att verifiera modeller innan du distribuerar.

Logga din Python-funktionsmodell

Även om du skriver din modell med anpassad kod kan du använda delade kodmoduler från din organisation. Med parametern code_path kan modellers författare logga fullständiga kodreferenser som läses in i sökvägen och som kan användas från andra anpassade pyfunc modeller.

Om en modell till exempel loggas med:

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

Kod från preprocessing_utils är tillgänglig i modellens inlästa kontext. Följande är en exempelmodell som använder den här koden.

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)

Hantera din modell

När du har loggat din anpassade pyfunc-modell kan du registrera den i Unity Catalog eller Workspace Registry och tillhandahålla din modell till en serveringstjänst för -modeller vid slutpunkt.

Notebook-exempel

Följande notebook-exempel visar hur du anpassar modellens utdata när råutdata från den efterfrågade modellen måste bearbetas för användning.

Anpassa modell som betjänar utdata med MLflow PyFunc Notebook

Hämta anteckningsbok