Implementación de código de Python con servicio de modelos
En este artículo se describe cómo implementar el código de Python personalizado con mosaic AI Model Serving. El ejemplo de este artículo se centra en proporcionar instrucciones para agregar lógica de preprocesamiento y postprocesamiento al modelo e implementarla.
La función de Python de MLflow, pyfunc
, proporciona flexibilidad para implementar cualquier fragmento de código de Python o cualquier 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 las entradas se puedan pasar a la función de predicción del modelo.
- El marco de trabajo del modelo no es compatible de forma nativa con MLflow.
- Tu aplicación requiere que las salidas sin procesar del modelo se postprocesen 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 Python de MLflow personalizado
MLflow ofrece la capacidad de registrar código 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 necesite 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ónpredict
, 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.
Nota
Antes de implementar el código personalizado como modelo, es beneficioso comprobar que el modelo puede ser servido. Consulte la documentación de MLflow para conocer cómo puede usar mlflow.models.predict
hasta para validar modelos antes de su implementación.
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 la 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 pyfunc
personalizado, puede registrarlo en Unity Catalog o Workspace Registry 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.