Dela via


Distribuera Python-kod med modellservering

I den här artikeln beskrivs hur du distribuerar Python-kod med modellservering.

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 predict funktionen, vilket påskyndar slutsatsdragningen.
  • predict – den här funktionen innehåller all logik som körs varje gång en indatabegäran görs.

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 modellerfö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-katalogen eller arbetsyteregistret och hantera din modell till en modellserverslutpunkt.

Notebook-exempel

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

Anpassa modell som betjänar utdata med MLflow PyFunc Notebook

Hämta notebook-fil