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 funktionenpredict
, 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.