Distribuera Python-kod med modellservering
Den här artikeln beskriver hur du distribuerar Python-kod med Mosaic AI Model Serving.
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 underpredict
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 Catalog eller Workspace Registry 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.