Condividi tramite


Distribuire il codice Python con la gestione dei modelli

Questo articolo descrive come distribuire il codice Python personalizzato con Mosaic AI Model Serving. L'esempio in questo articolo si concentra sul fornire indicazioni per aggiungere la logica di pre-elaborazione e post-elaborazione al modello e sulla sua distribuzione.

La funzione Python di MLflow, pyfunc, offre flessibilità per distribuire qualsiasi parte di codice Python o qualsiasi modello Python. Di seguito sono riportati alcuni scenari di esempio where è consigliabile usare la guida.

  • Il modello richiede la pre-elaborazione prima che gli input possano essere passati alla funzione di stima del modello.
  • Il framework del modello non è supportato in modo nativo da MLflow.
  • L'applicazione richiede che gli output non elaborati del modello vengano post-elaborati per essere utilizzati.
  • Il modello stesso ha una logica di diramazione per richiesta.
  • Stai cercando di distribuire codice completamente personalizzato come modello.

Costruire un modello di funzione Python MLflow personalizzato

MLflow offre la possibilità di registrare il codice Python con il formato di modelli Python personalizzati .

Quando si crea un pacchetto di codice Python arbitrario con MLflow, sono necessarie due funzioni:

  • load_context: qualsiasi elemento che deve essere caricato una sola volta per il funzionamento del modello deve essere definito in questa funzione. Ciò è fondamentale in modo che il sistema riduca al minimo il numero di artefatti caricati durante la funzione di predict, che accelera l'inferenza.
  • predict: questa funzione ospita tutta la logica eseguita ogni volta che viene effettuata una richiesta di input.

Registra il modello della funzione Python

Anche se si scrive il modello con codice personalizzato, è possibile usare moduli condivisi di codice dell'organizzazione. Con il parametro code_path, gli autori di modelli possono registrare riferimenti di codice completi che vengono caricati nel percorso e siano utilizzabili da altri modelli personalizzati pyfunc.

Ad esempio, se un modello viene registrato con:

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

Il codice del preprocessing_utils è disponibile nel contesto caricato del modello. Di seguito è riportato un modello di esempio che usa questo codice.

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)

Servire il modello

Dopo aver registrato il tuo modello personalizzato pyfunc, è possibile registrarlo in Unity Catalog o nel Registro dell'Area di Lavoro e servire il modello a un endpoint Model Serving.

Esempio di notebook

L'esempio di notebook seguente illustra come personalizzare l'output del modello quando l'output grezzo del modello interrogato deve essere post-elaborato per essere utilizzato.

Personalizzare l'output per la gestione del modello con il notebook PyFunc di MLflow

Get portatile