Compartir a través de


Implementación de código Python con el servicio de modelos

En este artículo se describe cómo implementar código de Python con Mosaic AI Model Serving.

La función MLflow de Python, pyfunc, proporciona flexibilidad para implementar cualquier fragmento de código o modelo de Python. A continuación se muestran escenarios de ejemplo en los que es posible que quiera usar la guía.

  • El modelo requiere preprocesamiento antes de que se puedan pasar las entradas a la función predict del modelo.
  • El marco de trabajo del modelo no es compatible de forma nativa con MLflow.
  • La aplicación requiere que las salidas sin procesar del modelo se procesen después del procesamiento para su consumo.
  • El propio modelo tiene lógica de bifurcación por solicitud.
  • Está buscando implementar código totalmente personalizado como modelo.

Construcción de un modelo de función de MLflow de Python personalizado

MLflow ofrece la posibilidad de registrar código de Python con el formato de modelos personalizados de Python.

Hay dos funciones necesarias al empaquetar código arbitrario de Python con MLflow:

  • load_context : todo lo que tenga que cargarse solo una vez para que el modelo funcione debe definirse en esta función. Esto es fundamental para que el sistema minimice el número de artefactos cargados durante la función predict, lo que acelera la inferencia.
  • predict : esta función aloja toda la lógica que se ejecuta cada vez que se realiza una solicitud de entrada.

Registro del modelo de funciones de Python

Aunque está escribiendo el modelo con código personalizado, es posible usar módulos compartidos de código de su organización. Con el parámetro code_path, los autores de modelos pueden registrar referencias de código completas que se cargan en la ruta de acceso y se pueden usar desde otros modelos personalizados pyfunc.

Por ejemplo, si se registra un modelo con:

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

El código de preprocessing_utils está disponible en el contexto cargado del modelo. A continuación se muestra un modelo de ejemplo que usa este código.

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)

Servir el modelo

Después de registrar el modelo personalizado pyfunc , puede registrarlo en el catálogo de Unity o en el Registro del área de trabajo y servir el modelo a un punto de conexión de servicio de modelos.

Ejemplo de cuaderno

En el siguiente ejemplo de cuaderno se muestra cómo personalizar la salida del modelo cuando la salida sin procesar del modelo consultado debe procesarse después del procesamiento para su consumo.

Personalización de la salida de servicio del modelo con el cuaderno PyFunc de MLflow

Obtener el cuaderno