Integración con herramientas de automatización de procesos de CI/CD para despliegue continuo de cambios en producción.
El Deploy de modelos de ML con FastApi se refiere a la integración de los modelos de Machine Learning con la infraestructura de un sistema de producción, de manera que los cambios pueden ser desplegados de forma continua. Esto implica la integración con herramientas de automatización de procesos de CI/CD (Continuous Integration/Continuous Deployment), que permiten el monitoreo y actualización constante de los modelos de ML en producción.
El uso de FastApi, un framework de desarrollo web para construir APIs de alta velocidad, permite una integración más sencilla y rápida de los modelos de ML con herramientas de despliegue continuo, como Jenkins, Github Actions, CircleCI, entre otras. De esta manera, se pueden automatizar procesos de preparación de datos, entrenamiento de modelos, evaluación y despliegue de cambios.
El despliegue continuo de cambios en producción mejora la eficacia y eficiencia de los modelos de ML, permitiendo una adaptación constante a las necesidades del negocio y una respuesta más rápida a posibles problemas o cambios en la información que manejan los modelos.
Cuando hablamos de CI/CD nos referimos al proceso de integración continua y entrega continua en el desarrollo de software. Para el despliegue continuo de cambios en producción, es fundamental integrar herramientas de automatización de procesos de CI/CD. Al trabajar con modelos de Machine Learning, es importante llevar un seguimiento riguroso de los cambios que se realizan, desde la modificación del modelo hasta el despliegue de los cambios en producción. Para lograrlo, podemos implementar el siguiente proceso:
- Integración continua: Cada vez que se realice un cambio en el modelo, se debe disparar un proceso de integración continua. Esto nos permite verificar que todos los cambios son compatibles con el modelo y que no afectan su funcionamiento.
- Pruebas automatizadas: Una vez que se comprueba que los cambios son compatibles, se deben realizar pruebas automatizadas para asegurarnos de que el modelo sigue siendo preciso y confiable.
- Entrega continua: Si las pruebas automatizadas son exitosas, se debe realizar la entrega continua de los cambios al ambiente de producción. Esto implica la creación de un paquete que contenga todo lo necesario para el despliegue, como el modelo actualizado y las dependencias relevantes.
- Despliegue continuo: Finalmente, se debe realizar el despliegue continuo de los cambios en producción. Idealmente, esto se realiza de manera automatizada. En caso de que algo salga mal durante el despliegue, es importante tener un proceso de rollback bien definido para retroceder a una versión anterior del modelo.
En resumen, la integración con herramientas de automatización de procesos de CI/CD nos permite desplegar cambios en producción de manera segura, eficiente y escalable.
Un ejemplo práctico de integración con una herramienta de automatización de procesos de CI/CD para despliegue continuo de cambios en producción:
- Crear un repositorio en GitHub: Almacena el código de la aplicación, incluyendo el modelo entrenado.
- Configurar una herramienta de CI/CD: Como Jenkins o CircleCI, vinculada al repositorio para ejecutar pruebas automatizadas cada vez que se realiza una revisión de código en la rama principal.
- Configurar el proceso de despliegue: En la herramienta de CI/CD para que compile automáticamente el código y realice la instalación de la aplicación en el servidor de producción.
- Utilizar un servicio de monitoreo: Para supervisar el rendimiento de la aplicación y los cambios en la aceptación del usuario.
Con esta configuración, cada vez que se realice una actualización en la rama principal del repositorio, la herramienta de CI/CD ejecutará todas las pruebas automatizadas, compilará el código actualizado y desplegará la nueva versión de la aplicación en el servidor de producción. Así, el modelo de redes neuronales se actualizará de forma continua en producción y se mejorará el rendimiento y la eficiencia de la aplicación.
Ejemplo FastAPI y CircleCI
Un ejemplo en python para integrar tu proyecto de FastAPI con una herramienta de CI/CD como CircleCI para desplegar continuamente los cambios en producción:
1. Primero, asegúrate de tener una cuenta en CircleCI y haber configurado la integración con GitHub o Bitbucket.
2. Crea un archivo .circleci/config.yml en tu repositorio de FastAPI, y agrega lo siguiente:
version: 2
jobs:
build:
docker:
- image: circleci/python:3.8
steps:
- checkout
- run:
name: install dependencies
command: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- run:
name: run tests
command: |
pytest tests/
deploy:
docker:
- image: docker:latest
steps:
- checkout
- setup_remote_docker
- run:
name: build image
command: |
docker build -t your-docker-image-tag .
- run:
name: push image
command: |
echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin
docker tag your-docker-image-tag "${DOCKERHUB_USERNAME}/your-docker-image-tag:${CIRCLE_SHA1}"
docker push "${DOCKERHUB_USERNAME}/your-docker-image-tag:${CIRCLE_SHA1}"
workflows:
version: 2
build-and-deploy:
jobs:
- build
- deploy:
requires:
- build
filters:
branches:
only: master
ignore: /.*/
3. En el archivo config.yml, estamos definiendo tres tareas principales:
- La tarea build, que instala las dependencias y ejecuta los tests en un contenedor de python 3.8.
- La tarea deploy, que construye una imagen docker del proyecto, etiqueta y sube la imagen a Dockerhub.
- La tarea workflows, que define la secuencia de tareas, y especifica que la tarea deploy sólo se ejecutará cuando se haga push en la rama master.
4. Asegúrate de haber configurado las variables de entorno en CircleCI para DOCKERHUB_USERNAME y DOCKERHUB_PASSWORD. Esto permitirá que CircleCI pueda publicar la imagen de Docker en tu cuenta de DockerHub.
5. Ahora, cada vez que hagas push a la rama master en tu repositorio de FastAPI, CircleCI ejecutará los tests y después construirá, etiquetará y subirá una nueva imagen de Docker que puedes utilizar para desplegar tus cambios en producción. Espero que este ejemplo te haya sido útil. Si tienes alguna duda o pregunta, estaré feliz de ayudarte.
-
Introducción a FastApi y Deploy de modelos de Machine Learning.
-
Preparación de datos y entrenamiento de modelos de Machine Learning.
-
Selección de modelos y validación de resultados.
-
Selección de métricas para evaluar modelos.
-
Creación de una API RESTful para la exposición de modelos.
-
Configuración de ambiente de desarrollo y producción.
-
Creación y configuración de base de datos para almacenamiento de datos.
-
Pruebas de integración para validar la API.
-
Gestión de paquetes y dependencias con herramientas como Pipenv.
-
Integración con herramientas de automatización de procesos de CI/CD para despliegue continuo de cambios en producción.