/
Serviciado de Modelos de MLFlow como microservicios Python

Serviciado de Modelos de MLFlow como microservicios Python

Disponible desde la versión 7.0.0

Introducción

El objetivo es generar un nuevo tipo de microservicio para evaluar modelos de MLFlow. Para ello, se comenzará ejecutando un código que, en base a ciertos datos de entrenamiento de un dataset referente a calidades de vino, genera un modelo predictivo.

Además, con el uso de la herramienta del Models Manager (encargada del MLOps en Onesait Platform) se va a poder controlar los diferentes experimentos que se hacen previamente, evaluar resultados, compararlos, etc., creando finalmente un modelo óptimo de predicción de vino que va a permitir determinar la calidad del vino a partir de ciertos datos que se proporcionen. 

Este modelo de predicción se registrará en la herramienta de Models Manager, lo cual va a permitir su gobierno, así como acceder al mismo en fases posteriores para poder desplegarlo.

El siguiente paso va a consistir en desarrollar el microservicio desde la Plataforma, que abarca desde la descarga del código hasta su compilación y la generación de la imagen Docker mediante Jenkins, su subida a un registro de imágenes, para luego desplegarla en la plataforma CaaS correspondiente.

Finalmente, a través de la Plataforma en el gestor de APIs, se va generar el API, lo que va a permitir definirla y gestionarla. Se va a poder acceder a la interfaz de Swagger y comprobar el funcionamiento del modelo predictivo directamente desde la Plataforma. Al hacerlo de esta manera, se aprovecha la seguridad que ofrece la Plataforma.

Modelo predictivo en Models Manager

Para llevar a cabo este ejemplo se va a utilizar el MLFlow de «sklearn_elasticnet_wine», el cual se puede obtener desde este repositorio de GitHub:

Se generará el modelo predictivo. En este ejemplo, se aprovechará la herramienta que posee la Plataforma para utilizar el Models Manager desde el entorno local. Para ello, se instalarán los siguientes paquetes de Python necesarios para conectar con el Models Manager:

  • MLFlow → pip install mlflow

  • mlflow onesaitplatform plugin (uso de la herramienta de subida de ficheros para trabajar con proyectos de ML) → pip install mlflow-onesaitplatform-plugin

Utilizando el ejemplo de mlflow de «sklearn_elasticnet_wine», los archivos MLproject y conda.yaml hay que modificarlos para que se conecte correctamente a la Plataforma.

  • MLproject: hay que modificar la línea 3 a «conda_env: conda.yaml»:

image-20250317-170544.png
  • conda.yaml: hay que modificar el Python a 3.11 y hay que añadir el paquete de mlflow de la Plataforma (mlflow-onesaitplatform-plugin):

image-20250317-170627.png

Si utilizamos un modelo predictivo propio, es importante utilizar el ‘signature’ (función: infer_signature), para que, una vez generemos el swagger, podamos tener los valores que se esperan y pueda generar el ejemplo, tal como se utiliza en el modelo de «sklearn_elasticnet_wine».

image-20250326-173308.png

El segundo y último paso será definir el entorno con el que se quiere trabajar de la Plataforma. Esta es la forma de conectar el código local con el servidor de onesaitplatform:

  • Usando una variable de entorno llamada MLFLOW_TRACKING_URI, la cual tendrá que ser definida a {environment}/controlpanel/modelsmanager:

C:\Users\smartinroldang\Desktop\MLFlow\examples>set MLFLOW_TRACKING_URI=https://lab.onesaitplatform.com/controlpanel/modelsmanager
image-20250318-110607.png

Teniendo un proyecto de MLFlow, se lanzará el entrenamiento con el siguiente comando:

  • mlflow run {folder project} -P {mlflowparams}

  • mlflow run sklearn_elasticnet_wine -P alpha=0.5

image-20250318-110527.png

Después, se observará el experimento en el Control Panel y se podrá explorar sus detalles.

image-20250318-104320.png
image-20250318-103938.png
image-20250318-103812.png

También se podrá ver el artefacto del proyecto y el modelo en sí mismo (archivo .pkl).

image-20250318-103633.png

 

Creación del microservicio desde la Plataforma

En primer lugar, se accederá al módulo de microservicios desde el menú Lógica > Mis Microservicios.

image-20250320-095353.png

Se mostrará entonces el listado de microservicios disponibles al usuario. Para crear un nuevo microservicio, se pulsará en el botón de «+» situado en la parte superior derecho.

image-20250320-095723.png

Se abrirá entonces el asistente de creación de microservicios. Se escogerá en «Microservice Template» la opción de «Models Manager». De esta forma, la Plataforma realiza un clonado de un repositorio base (microservice-modelsmanager), con el que se crea una predicción genérica.

image-20250318-075038.png

Se terminará de rellenar los datos de la configuración general.

image-20250318-102324.png

Una vez se selecciona en «Microservice Template» la opción de «Models Manager», aparece una opción de «Experiments», donde aparece los experimentos, y cuando se selecciona el que se desea aparece una tabla con los modelos, donde se va a poder seleccionar el modelo con el que se desea trabajar. En este caso, se seleccionará el que se ha creado anteriormente.

image-20250318-102456.png

Lo siguiente es seleccionar la configuración del Git que se desea.

image-20250318-102711.png

A continuación, se rellenará la configuración de Jenkins.

image-20250318-102900.png

Por último, se completerá la configuración del CaaS:

image-20250318-103028.png

Una vez que se ha introducido toda la información, se pulsará en el botón «Crear» para generar el microservicio. Se mostrará entonces un mensaje indicando que se ha creado correctamente, y la pantalla volverá al listado de microservicios, donde aparecerá el que se acaba de crear.

image-20250318-100858.png

Al generar el microservicio, se crean dos elementos:

  • Repositorio de Git: se genera un repositorio de Git con la plantilla base que se ha seleccionado. Al pulsar en el enlace de «Git URL» desde el listado de microservicios, se redirige y se puede ver el repositorio creado con el nombre que se ha puesto.

image-20250318-101231.png
  • Pipeline en Jenkins: se genera un pipeline en Jenkins llamado name-pipeline (donde «name» es el nombre indicado). Se podrá acceder al pipeline rápidamente al pulsar en el enlace de «Jenkins URL» desde el listado de los microservicios, lo que redirige y permite ver el pipeline creado con el nombre mencionado.

image-20250318-080102.png

El siguiente paso es realizar el «Build Service», que crea la imagen. Para ello, se pulsará en el icono del martillo que se encuentra en la sección de CI/CD del listado de microservicios, verificando que los parámetros están correctos y seguidamente se pulsa en «Generate».

image-20250318-095425.png

Aparece entonces un modal que indica que la petición se ha enviado a la cola de Jenkins.

image-20250318-080353.png

Al dirigirse a Jenkins y al pipeline correspondiente, se puede comprobar que ha sido exitoso.

image-20250318-100410.png

Navegando hasta el registry, se observa la imagen que se ha generado.

image-20250318-100314.png

Una vez hecho esto, se pasa al CaaS donde se quiere realizar el despliegue/servicio. Para ello, se debe ir al Control Panel y, en la sección de CI/CD de nuestro microservicio, se pulsa en el icono del cohete. Esto mostrará una pantalla donde se va a poder ingresar los parámetros que se desea para el despliegue/servicio. Una vez rellenados, se pulsa en el botón de «Deploy».

image-20250318-100059.png

Si todo va correctamente, saldrá otro modal informando que el microservicio ha sido desplegado.

image-20250318-080917.png

Navegando al Rancher, se podrá observar que el contenedor esta activo y corriendo correctamente.

image-20250318-093647.png

En el Control Panel se verá que el «status» ya esta con el tick verde, lo que indica que está activo.

image-20250319-154349.png

Si se quiere, es posible añadir o modificar los parámetros del microservicio. Al hacer clic en el CI/CD, en «Upgrade» (la flecha hacia arriba), se abre una pantalla en la que se puede añadir nuevos parámetros con el «+» o eliminar parámetros con el «-». Habrá que añadir obligatoriamente el HOST, TOKEN, EXPERIMENTID, RUNID, MODEL_NAME, estos no hacen falta obligatoriamente: API_HOST y API_SCHEME. Después de realizar los cambios en los parámetros, simplemente se pulsa en el botón de «Upgrade» y el microservicio se actualiza.

image-20250326-175314.png

 

Generación de la API

Una vez realizados todos los pasos anteriores, se podrá crear la API desde el Control Panel. Para ello, hay dos formas de realizarlo:

  • Primera forma: podremos insertar ciertas variables a nuestro microservicio, y de esta forma se realizará un «autoregister», creando la API de forma automática. Las variables necesarias para ello son:

    • APIMANAGER_AUTOREGISTER: Debe igualarse a ‘True’ para que se realice el autoregister.

    • API_NAME: El nombre que queremos ponerle a nuestra API. Se verificará que no exista ninguna API con ese nombre y versión 1. Si no existe ninguna, se creará la API; si ya existe una API con ese nombre y versión 1, se generará un error.

    • API_HOST: El host al que queremos que el swagger realice las consultas.

image-20250326-175250.png

Una vez realizado esto y actualizado el contenedor con las nuevas variables, podremos ir a Lógica > Mis APIs y buscar nuestra API.

image-20250318-082020.png
  • Segunda forma: se accederá al menú de Lógica > Mis APIs.

image-20250320-102832.png

Se mostrará entonces el listado de APIs disponibles al usuario. Para crear un nuevo servicio API, se pulsará en el botón de «+» situado en la parte superior derecho.

image-20250320-095723.png

En la opción de «API Type», se selecciona la opción «Publish External REST API from Swagger» En la parte derecha, aparece un apartado llamado «Operations», donde se introduce la ruta del archivo swagger.json en «Swagger JSON URL» y se hace clic en «Load». El archivo JSON se carga en el recuadro negro. Después, se completan los campos requeridos y se hace clic en «Create».

image-20250318-090810.png

Si todo ha ido correctamente, se mostrará un mensaje avisando de ella, y la pantalla se redirigirá al listado de APIs, donde se podrá encontrar la API recién creada.

image-20250318-082020.png

 

Una vez ya tenemos nuestra API, se hace clic en los tres puntos de las opciones de la API y se selecciona la opción de «Swagger», lo que va a permite utilizar el Swagger que se ha creado y el endpoint para nuestra predicción de vino.

image-20250318-082137.png

Lo primero que se debe hacer es introducir el token de usuario ya que, al haberlo realizado en la Plataforma, se cuenta con la seguridad que ofrece. Para ello, en el candado, se introduce el token del usuario y, de esta manera, se podrá hacer uso del endpoint de /prediction.

image-20250318-082824.png

En este ejemplo, se sigue el caso del ejemplo proporcionado, ya que está diseñado específicamente para la predicción del vino.

image-20250318-083559.png
image-20250318-083521.png

Related content