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:

https://github.com/mlflow/mlflow/tree/master/examples/sklearn_elasticnet_wine

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:

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.

image-20250317-170544.pngimage-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:

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:

image-20250318-110527.png

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

image-20250318-104320.pngimage-20250318-103938.pngimage-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:

image-20250318-101231.pngimage-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:

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.pngimage-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.pngimage-20250318-083521.png