<div align="center" id="top"> 
  <img src="./.github/app.gif" alt="Mlops_aws" />

  &#xa0;

  <!-- <a href="https://mlops_aws.netlify.app">Demo</a> -->
</div>

<h1 align="center">Mlops_aws</h1>



<!-- Status -->

<!-- <h4 align="center"> 
	🚧  Mlops_aws 🚀 Under construction...  🚧
</h4> 

<hr> -->


<br>

## AWS MLOPS ##

Repositorio con los scripts necesarios para implementar una arquitectura de MLOPS.
Esta implementación permite agregar a tu código de ML la capacidad de entrenar y desplegar. Permite realizar cambios en el código y en los datos mientras se realizan pruebas para validarlos.

## Pre-Requisitos

### Services

Se necesita una experiencia básica en :
  - Train/test un ML model
  - Python ([scikit-learn](https://scikit-learn.org/stable/#))
  - [Jupyter Notebook](https://jupyter.org/)
  - [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
  - [AWS CodeCommit](https://aws.amazon.com/codecommit/)
  - [AWS CodeBuild](https://aws.amazon.com/codebuild/)
  - [Amazon ECR](https://aws.amazon.com/ecr/)
  - [Amazon SageMaker](https://aws.amazon.com/sagemaker/)
  - [AWS CloudFormation](https://aws.amazon.com/cloudformation/)
  - [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)


### Cuenta AWS 

Se requiere una cuenta AWS, revisar si los serivicios estan disponibles en la capa gratuita.


## Parte 1 : Creación de Imagen Docker

### Arquitectura
![Build Docker Image](resources/imgs/MLOps_BuildImage.jpg)

* Un ML Developer crea assets(Modelo RandomForest) para la imagen Docker y realiza un push a CodeCommit
* CodePipeline escucha el evento push de CodeCommit, obtiene el código fuente  y lanza CodeBuild
* CodeBuild se autentica en ECR, crea la imagen de Docker y la inserta en el repositorio de ECR.


## Parte 2 : Entrenamiento y Despliegue

### Arquitectura
![Build Docker Image](resources/imgs/MLOps_Train_Deploy_TestModel.png)

* Inicia al subir un zip con los assets(configuración de despliegue) + datasets 
* CodePipeline escucha este evento y ejecuta Lambda Request para verificar el archivo en el bucket e iniciar el entrenamiento
* Lambda envia trabajos de entrenamiento a Sagemaker
* Cuando finaliza el entrenamiento , CodePipeline verifica el estado
* CodePipeline llama a CloudFormation para desplegar en un entorno DEV
* Luego espera una aprobación manual
* CodePipeline llama a CloudFormation para desplegar en un entorno PROD



## Instrucciones

Opción 1: Ejecutar CloudFormation utilizando la plantilla que se encuentra en code/yml/m.yml

Opción 2: Ejecutar CloudFormation utilizando la plantilla que se alojada en un bucket público de s3

Region| Launch
------|-----
US East (N. Virginia) | [![Launch MLOps solution in us-east-1](resources/imgs/cloudformation-launch-stack.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=AIWorkshop&templateURL=https://s3.amazonaws.com/aws-ai-ml-aod-latam/mlops-workshop/m.yml)

### Contenido - Code
En la carpeta code/lambdas se encuentra los archivos python que se indican en el gráfico.
- mlops-env-setup: Obtiene variables de entorno de codecommit para establecer el entorno con las credenciales.
- mlops-op-deployment: Se ecnuentra el código que permite realizar el despliegue automático de un modelo entrenado por Sagemaker.
- mlops-op-process-request: Verifica que el archivo trainingjob.zip alojado en el bucket contenga los archivos necesarios para el entrenamiento y el despliegue.
- mlops-op-training: Extrae la data del archivo de entrenamiento y los manda a Sagemaker para ejecutar trabajos de entrenamiento.

### Contenido - Notebooks
1- Crear Imagen Docker/
01_crear_imagen_docker : creación de imagen , empleando modelos personalizados
02_Probar_local_mode : En el notebook anterior hay una celda que permite desplegar un servicio local, y con este notebook lo podemos probar.
03_Probando_sagemaker_estimator: Permite probar la imagen docker creada y utilizarla para ejecutar trabajos de entrenamiento y realizar predicciones.

2-Entrenamiento y Despliegue/
01_Training: Aca se muestra toda la configuración para realizar el despliegue y como se adjunta al dataset en un archivo zip para iniciar el flujo de la parte 2.
02_Check_Progress: Opcional, muestra una vista con más detalle a la que se muestra en la interfas de CodePipeline


