Flujos de trabajo CI/CD sin interrupciones con GitHub Actions en GCP sus herramientas para una eficaz MLOps.

GitHub Actions en GCP ofrecen flujos de trabajo CI/CD sin interrupciones para una eficaz MLOps.

EL MARCO DE TRABAJO MLOPS DE 7 PASOS DE LA PILA COMPLETA

Lección 7: Implementa todos los componentes de ML en GCP. Construye un pipeline CI/CD usando Github Actions.

Foto de Hassan Pasha en Unsplash

Este tutorial representa la lección 7 de un curso de 7 lecciones que te guiará paso a paso en cómo diseñar, implementar e implementar un sistema de ML utilizando las mejores prácticas de MLOps. Durante el curso, construirás un modelo listo para producción para pronosticar los niveles de consumo de energía para las próximas 24 horas en múltiples tipos de consumidores de Dinamarca.

Al final de este curso, entenderás todos los fundamentos de cómo diseñar, codificar e implementar un sistema de ML utilizando una arquitectura de procesamiento por lotes.

Este curso está dirigido a ingenieros de aprendizaje automático intermedios/avanzados que desean mejorar sus habilidades construyendo sus propios proyectos de extremo a extremo.

Hoy en día, los certificados están en todas partes. Construir proyectos avanzados de extremo a extremo que puedas mostrar más adelante es la mejor manera de obtener reconocimiento como ingeniero profesional.

Tabla de contenidos:

  • Introducción al curso
  • Lecciones del curso
  • Fuente de datos
  • Lección 7: Implementa todos los componentes de ML en GCP. Construye un pipeline CI/CD usando Github Actions.
  • Lección 7: Código
  • Conclusión
  • Referencias

Introducción al curso

Al final de este curso de 7 lecciones, sabrás cómo:

  • diseñar una arquitectura de procesamiento por lotes
  • usar Hopsworks como un almacenamiento de características
  • diseñar un pipeline de ingeniería de características que lee datos de una API
  • construir un pipeline de entrenamiento con ajuste de hiperparámetros
  • usar W&B como una plataforma de ML para rastrear tus experimentos, modelos y metadatos
  • implementar un pipeline de predicción por lotes
  • usar Poetry para construir tus propios paquetes de Python
  • implementar tu propio servidor privado de PyPi
  • orquestar todo con Airflow
  • usar las predicciones para codificar una aplicación web usando FastAPI y Streamlit
  • usar Docker para contenerizar tu código
  • usar Great Expectations para garantizar la validación y integridad de los datos
  • monitorear el rendimiento de las predicciones con el tiempo
  • implementar todo en GCP
  • construir un pipeline CI/CD usando GitHub Actions

Si eso suena como mucho, no te preocupes. Después de cubrir este curso, entenderás todo lo que dije antes. Lo más importante es que sabrás POR QUÉ utilicé todas estas herramientas y cómo funcionan juntas como un sistema.

Si deseas obtener el máximo provecho de este curso, te sugiero acceder al repositorio de GitHub que contiene todo el código de las lecciones. Este curso está diseñado para leer rápidamente y replicar el código junto con los artículos.

Al final del curso, sabrás cómo implementar el diagrama a continuación. No te preocupes si algo no tiene sentido para ti. Lo explicaré todo en detalle.

Diagrama de la arquitectura que construirás durante el curso [Imagen del autor].

Al final de la Lección 7, sabrás cómo implementar manualmente los 3 pipelines de ML y la aplicación web en GCP. Además, construirás un pipeline CI/CD que automatizará el proceso de implementación utilizando GitHub Actions.

Lecciones del curso:

  1. Procesamiento por lotes. Almacenamiento de características. Pipelines de ingeniería de características.
  2. Pipelines de entrenamiento. Plataformas de ML. Ajuste de hiperparámetros.
  3. Pipeline de predicción por lotes. Empaqueta los módulos de Python con Poetry.
  4. Servidor de PyPi privado. Orquesta todo con Airflow.
  5. Validación de datos para la calidad e integridad usando GE. Monitoreo continuo del rendimiento del modelo.
  6. Consumir y visualizar las predicciones de tu modelo usando FastAPI y Streamlit. Conteneriza todo con Docker.
  7. Implementa todos los componentes de ML en GCP. Construye un pipeline CI/CD usando Github Actions.

Como la Lección 7 se centra en enseñarte cómo implementar todos los componentes en GCP y construir un pipeline CI/CD en torno a él, para obtener la experiencia completa, te recomendamos que veas las demás lecciones del curso.

Echa un vistazo a la Lección 4 para aprender cómo orquestar los 3 pipelines de ML usando Airflow y la Lección 6 para ver cómo consumir las predicciones del modelo usando FastAPI y Streamlit.

Fuente de datos

Utilizamos una API gratuita y abierta que proporciona valores de consumo de energía por hora para todos los tipos de consumidores de energía en Dinamarca [1].

Proporcionan una interfaz intuitiva donde puedes consultar y visualizar los datos fácilmente. Puedes acceder a los datos aquí [1].

Los datos tienen 4 atributos principales:

  • Hora UTC: la fecha y hora UTC en que se observó el punto de datos.
  • Área de precio: Dinamarca se divide en dos áreas de precio: DK1 y DK2, divididas por el Gran Belt. DK1 está al oeste del Gran Belt y DK2 está al este del Gran Belt.
  • Tipo de consumidor: El tipo de consumidor es el código DE35 de la industria, propiedad y mantenida por la empresa Danish Energy.
  • Consumo total: Consumo total de electricidad en kWh

Nota: ¡Las observaciones tienen un retraso de 15 días! Pero para nuestro caso de uso de demostración, eso no es un problema, ya que podemos simular los mismos pasos como si fuera en tiempo real.

Una captura de pantalla de nuestra aplicación web que muestra cómo pronosticamos el consumo de energía para el área = 1 y el tipo de consumidor = 212 [Imagen del autor].

Los puntos de datos tienen una resolución horaria. Por ejemplo: “2023–04–15 21:00Z”, “2023–04–15 20:00Z”, “2023–04–15 19:00Z”, etc.

Modelaremos los datos como múltiples series temporales. Cada tupla única de área de precio y tipo de consumidor representa su serie temporal única.

Por lo tanto, construiremos un modelo que pronostique de forma independiente el consumo de energía para las próximas 24 horas para cada serie temporal.

Echa un vistazo al video a continuación para entender mejor cómo se ve la información 👇

Descripción general del curso y de la fuente de datos [Video del autor].

Lección 7: Implementar todos los componentes de ML en GCP. Construir un pipeline CI/CD usando GitHub Actions.

El objetivo de la Lección 7

Dentro de la Lección 7, te enseñaré 2 cosas:

  1. Cómo implementar manualmente los 3 pipelines de ML y la aplicación web en GCP.
  2. Cómo automatizar el proceso de implementación con un pipeline CI/CD usando GitHub Actions.
Diagrama de la arquitectura final con los componentes de la Lección 7 resaltados en azul [Imagen del autor].

En otras palabras, tomarás todo lo que has hecho hasta ahora y lo mostrarás al mundo.

Mientras tu trabajo se encuentre en tu computadora, puede ser la mejor solución de ML en el mundo, pero desafortunadamente, no agregará ningún valor.

Saber cómo implementar tu código es crítico para cualquier proyecto.

Así que recuerda…

Utilizaremos GCP como proveedor de la nube y GitHub Actions como herramienta de CI/CD.

Conceptos teóricos y herramientas

CI/CD: CI/CD significa integración y entrega continua.

El paso de CI consiste principalmente en construir y probar su código cada vez que haga un push al repositorio de git.

El paso de CD despliega automáticamente su código en múltiples entornos: dev, staging y producción.

Dependiendo de los requisitos específicos de su software, puede necesitar o no todas las especificaciones de una tubería estándar de CI/CD.

Por ejemplo, puede trabajar en una prueba de concepto. Entonces, un entorno de staging puede ser excesivo. Pero tener una tubería de CD de desarrollo y producción mejorará drásticamente su productividad.

GitHub Actions: GitHub Actions es una de las herramientas de CI/CD más populares que existen. Está directamente integrado en su repositorio de GitHub. La parte interesante es que no necesita ninguna máquina virtual para ejecutar su tubería de CI/CD. Todo se ejecuta en las computadoras de GitHub.

Necesita especificar un conjunto de reglas dentro de un archivo YAML, y GitHub Actions se encargará del resto. Le mostraré cómo funciona en este artículo.

GitHub Actions es completamente gratuito para repositorios públicos. ¿No es genial?

Como nota al margen, utilizando GitHub Actions, puede desencadenar cualquier trabajo basado en varios eventos del repositorio, pero utilizarlo como herramienta de CI/CD es el caso de uso más común.

Lección 7: Código

Puede acceder al repositorio de GitHub aquí.

Nota: Todas las instrucciones de instalación se encuentran en los README del repositorio. Aquí saltará directamente al código.

El código e instrucciones para la Lección 7 están en los siguientes:

  • deploy/ — Archivos de despliegue de Docker y shell
  • .github/workflows — Flujos de trabajo de CI/CD de GitHub Actions
  • README_DEPLOY — README dedicado a desplegar el código en GCP
  • README_CICD — README dedicado a configurar la tubería de CI/CD

Preparar credenciales

Almacenar credenciales directamente en su repositorio de git es un gran riesgo de seguridad. Es por eso que inyectará información confidencial utilizando un archivo .env.

El archivo .env.default es un ejemplo de todas las variables que debe configurar. También es útil para almacenar valores predeterminados para atributos que no son confidenciales (por ejemplo, el nombre del proyecto).

Una captura de pantalla del archivo .env.default [Imagen del autor].

Para replicar este artículo, debe configurar toda la infraestructura y los servicios utilizados durante el curso.

Se pueden desplegar dos componentes principales por separado.

#1. Los 3 tuberías de ML:

  • Tubería de características
  • Tubería de entrenamiento
  • Tubería de predicción por lotes

Para #1., debe configurar lo siguiente:

  • Hopsworks (gratuito) — Feature Store: Lección 1
  • W&B (gratuito) — Plataforma de ML: Lección 2
  • Cubos de GCS (gratuitos) — Almacenamiento en GCP: Lección 3
  • Airflow (gratuito) — Herramienta de orquestación de código abierto: Lección 4

#2. Aplicación web:

  • Backend de FastAPI (gratuito): Lección 6
  • Tablero de predicciones de Streamlit (gratuito): Lección 6
  • Tablero de monitoreo de Streamlit (gratuito): Lección 6

Afortunadamente, para #2., solo tiene que configurar los cubos de GCP GCS utilizados como almacenamiento.

Pero tenga en cuenta que si solo hace la sección #2., no tendrá ningún dato para consumir dentro de su aplicación web.

No queremos abrumar este artículo con cosas aburridas, como configurar credenciales. Aún así, afortunadamente, si va a implementar y replicar todo el curso, tiene instrucciones paso a paso en artículos anteriores y el README de GitHub.

Si desea ver (y no replicar) cómo desplegamos nuestro código en GCP y construimos los flujos de trabajo de GitHub Actions, no tiene que preocuparse por ninguna de las credenciales. Solo proceda a las siguientes secciones ✌️

NOTA: El único servicio que no tiene un plan freemium está dentro de esta lección. Cuando escribí este curso, desplegar y probar la infraestructura en GCP me costó aproximadamente 20$. Pero tenía una cuenta nueva de GCP que me ofreció 300$ en créditos de GCP, lo que indirectamente lo hizo gratuito. Solo recuerde eliminar todos los recursos de GCP cuando haya terminado, y todo estará bien.

Despliegue manual en GCP

Entonces, manualmente desplegaremos los 2 componentes principales en GCP:

  • Pipeline de ML
  • Aplicación web

Pero, como primer paso, configuremos todos los recursos de GCP que necesitamos para el despliegue. Luego, SSH a sus máquinas y despliegue su código.

Para obtener más información, acceda al README de implementación de GitHub.

Configurar recursos

Vayamos a su proyecto de consumo de energía GCP y creemos los siguientes recursos:

  1. Cuenta de servicio de VM de administrador con acceso a IAP
  2. Regla de firewall para exponer puertos
  3. IAP para la regla de firewall de túnel TCP
  4. VM para el pipeline
  5. VM para la aplicación web
  6. IP estática externa

No se desanime por los nombres elegantes. Tendrá acceso a guías paso a paso utilizando este artículo + la documentación de GCP que proporcionaré.

Nota: Si no planea replicar la infraestructura en su infraestructura de GCP, omita la sección “Configurar recursos” y vaya directamente a “Desplegar el pipeline de ML”.

#1. Cuenta de servicio de VM de administrador con acceso a IAP

Necesitamos una nueva cuenta de servicio de GCP con derechos de administrador y acceso IAP a las VM de GCP.

Debe crear una nueva cuenta de servicio y asignarle los siguientes roles:

  • Administrador de instancia de cálculo (v1)
  • Usuario de túnel seguro IAP
  • Creador de tokens de cuenta de servicio
  • Usuario de cuenta de servicio

IAP significa Proxy con Conocimiento de Identidad. Es una forma de crear túneles que enrutan el tráfico TCP dentro de su red privada. Para su conocimiento, puede leer más sobre este tema utilizando los siguientes documentos (no es necesario que lo comprenda para continuar con los próximos pasos):

  • Uso de IAP para el reenvío de TCP [2]
  • Descripción general del reenvío de TCP [3]

#2. Regla de firewall para exponer puertos

Cree una regla de firewall que exponga los siguientes puertos TCP: 8501, 8502 y 8001.

También agregue una etiqueta de destino llamada energy-forecasting-expose-ports.

Aquí hay 2 documentos que nos ayudaron a crear y configurar los puertos para la regla de firewall:

  • Cómo abrir un puerto específico como 9090 en Google Compute Engine [4]
  • Cómo abrir puertos de firewall en una instancia de GCP Compute Engine [5]

Esto es lo que parece nuestra regla de firewall 👇

Captura de pantalla de la regla de firewall "exponer puertos" de GCP [Imagen del autor].

#3. IAP para la regla de firewall de túnel TCP

Ahora crearemos una regla de firewall que permita IAP para el túnel TCP en todas las VM conectadas a la red predeterminada.

Guía paso a paso sobre cómo crear la regla de firewall IAP para el túnel TCP [6].

Esto es lo que parece nuestra regla de firewall 👇

Captura de pantalla de la regla de firewall "reenvío TCP IAP" de GCP [Imagen del autor].

#4. VM para el Pipeline

Ve a tu proyecto GCP energy_consumption -> Instancias de VM -> Crear instancia.

Elige e2-standard-2: 2 núcleos de CPU — 8 GB de RAM como tipo de instancia de VM.

Llámalo: ml-pipeline

Cambia el disco a 20 GB de almacenamiento .

Selecciona la región europe-west3 (Frankfurt) y la zona europe-west3-c. Aquí puedes elegir cualquier otra región y zona, pero si es la primera vez que lo haces, te sugerimos que lo hagas como nosotros.

Red: default

También, marca las casillas de HTTP y HTTPS y añade la regla de firewall personalizada energy-forecasting-expose-ports que hicimos en unos pasos anteriores.

Aquí hay 2 documentos que me ayudaron a crear y configurar los puertos para la regla de firewall:

  • Cómo abrir un puerto específico como el 9090 en Google Compute Engine [4]
  • Cómo abrir puertos de firewall en una instancia de GCP Compute Engine [5]

#5. VM para la Aplicación Web

Ahora repitamos un proceso similar para la VM de la Aplicación Web, pero con configuraciones ligeramente diferentes.

Esta vez elige e2-micro: 0.25 2 vCPU — 1 GB de memoria como tipo de instancia de VM.

Llámalo: app

Cambia el disco a 15 GB de disco persistente estándar

Selecciona la región europe-west3 (Frankfurt) y la zona europe-west3-c.

Red: default

También, marca las casillas de HTTP y HTTPS y añade la regla de firewall personalizada energy-forecasting-expose-ports que creamos hace unos pasos.

#6. IP Externa Estática

Esta es la última pieza del rompecabezas.

Si queremos que la IP externa de nuestra aplicación web sea estática (es decir, que no cambie), tenemos que adjuntar una dirección estática a nuestra VM de la aplicación web.

Sugerimos añadirla sólo a la VM de la aplicación que creamos unos pasos atrás.

También, añadir una dirección IP externa estática a la VM de ml-pipeline está perfectamente bien.

Documentos sobre la reserva de una dirección IP externa estática [7].

Ahora que la parte aburrida ha terminado, vamos a empezar a desplegar el código 👇

Desplegar el Pipeline de ML

Como primer paso, debemos instalar la herramienta CLI de gcloud GCP para hablar entre nuestro ordenador y las VM de GCP.

Para autenticarnos, usaremos la cuenta de servicio configurada con derechos de administrador para las VM y acceso de IAP a SSH.

Ahora, debemos decirle a la herramienta CLI de gcloud GCP que use esa cuenta de servicio .

Para ello, debes crear una clave para tu cuenta de servicio y descargarla como un archivo JSON. Igual que hiciste para las cuentas de servicio de los buckets, aquí hay algunos documentos para refrescarte la memoria [8].

Después de descargar el archivo, debes ejecutar el siguiente comando de gcloud en tu terminal:

gcloud auth activate-service-account [email protected] - key-file=/path/key.json - project=PROJECT_ID

Consulta este documento para obtener más detalles sobre el comando de autenticación de gcloud .

Ahora, cada vez que ejecutes comandos con gcloud , usará esta cuenta de servicio para autenticarse.

Ahora conectémonos a través de SSH a la VM de ml-pipeline de GCP que creamos unos pasos antes:

gcloud compute ssh ml-pipeline - zone europe-west3-c - quiet - tunnel-through-iap - project <your-project-id>
  • NOTA 1: Cambia la zona si no has creado una VM dentro de la misma zona que nosotros.
  • NOTA 2: Tu ID de proyecto NO es el nombre de tu proyecto . Ve a tu lista de proyectos de GCP y encuentra el ID del proyecto.

A partir de este punto, si configuraste los firewalls y la cuenta de servicio correctamente, como todo está Dockerizado, todos los pasos serán 99% similares a los del resto de los artículos.

Consulta el README de Github – Secciones de configuración de herramientas adicionales y uso para obtener instrucciones paso a paso.

Puedes seguir los mismos pasos mientras estás conectado con SSH a la máquina de ml-pipeline de GCP.

Ten en cuenta que la máquina de GCP está utilizando Linux como sistema operativo. Por lo tanto, puedes copiar y pegar directamente los comandos del README independientemente del sistema operativo que uses en tu dispositivo local.

Captura de pantalla de la conexión a la VM "app" utilizando gcloud [Captura de pantalla por el autor].

Puedes repetir todos los pasos que has realizado al configurar The Pipeline localmente utilizando esta conexión SSH, pero debes tener en cuenta los siguientes 3 casos especiales:

#1. Clonar el código en el directorio home de la VM

Solo tienes que conectarte por SSH a la VM y ejecutar:

git clone https://github.com/iusztinpaul/energy-forecasting.gitcd energy-forecasting

#2. Instalar Docker utilizando los siguientes comandos:

Instalar Docker:

sudo apt updatesudo apt install --yes apt-transport-https ca-certificates curl gnupg2 software-properties-commoncurl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"sudo apt updatesudo apt install --yes docker-ce

Agregar acceso sudo a Docker:

sudo usermod -aG docker $USERlogout

Inicia sesión nuevamente en tu máquina:

gcloud compute ssh ml-pipeline --zone europe-west3-c --quiet --tunnel-through-iap --project <tu-id-de-proyecto>

Revisa esta documentación para obtener las instrucciones completas [9].

#3. Reemplazar todos los comandos cp con gcloud compute scp:

Este comando te ayudará a copiar archivos de tu máquina local a la VM.

Por ejemplo, en lugar de ejecutar:

cp -r /ruta/a/admin/gcs/credentials/admin-buckets.json credentials/gcp/energy_consumption

Ejecuta en una terminal diferente (no la conectada a SSH a tu VM):

gcloud compute scp --recurse --zone europe-west3-c --quiet --tunnel-through-iap --project <tu-id-de-proyecto> /ruta/local/a/admin-buckets.json ml-pipeline:~/energy-forecasting/airflow/dags/credentials/gcp/energy_consumption/

Este comando copiará tu archivo local admin-buckets.json a la VM ml-pipeline.

Después de configurar tu código en la VM GCP ml-pipeline, ve a la vista de la VM desde GCP y a la sección de etiquetas de red. Allí encontrarás la columna de dirección IP externa, como se muestra en la imagen a continuación. Copia esa IP y agrega el puerto 8080 a ella.

Por ejemplo, basándonos en la dirección IP externa de la imagen a continuación, accedí a Airflow usando esta dirección: 35.207.134.188:8080 .

¡Felicidades! Te has conectado a tu propia aplicación Airflow autohospedada.

Nota: Si no se conecta, dale unos segundos para que se cargue correctamente.

Captura de pantalla de las configuraciones de la VM GCP "app" [Imagen por el autor].

Implementar la aplicación web

Conéctate por SSH a la VM GCP “app” que creaste unos pasos antes:

gcloud compute ssh app --zone europe-west3-c --quiet --tunnel-through-iap --project <tu-id-de-proyecto>
  • NOTA 1: Cambia la zona si no has creado una VM en la misma zona que nosotros.
  • NOTA 2: Tu ID de proyecto NO es el nombre de tu proyecto. Ve a tu lista de proyectos de GCP y encuentra el ID del proyecto.

Aquí el proceso es similar al descrito en la sección “Implementar The ML Pipeline”.

Puede desplegar la aplicación web siguiendo los pasos descritos en la Lección 6 o en las secciones de Configuración de herramientas adicionales y Uso del repositorio de GitHub.

Pero no olvide tener en cuenta los 3 casos límite descritos en la sección “Despliegue del pipeline de ML”.

Por favor, discúlpeme por referirlo a tanta documentación externa sobre cómo configurar estas cosas. El artículo es demasiado largo y no quería replicar la documentación de Google GCP aquí.

Pipeline de CI/CD usando GitHub Actions (gratuito)

Los archivos YAML de GitHub Actions se encuentran en el directorio .github/workflows.

En primer lugar, permítame explicar los principales componentes que debe conocer acerca de un archivo de GitHub Actions 👇

Usando la sección ” on -> push -> branches:“, especifica en qué rama escuchar eventos. En este caso, la Acción de GitHub se activa cuando se realiza una nueva confirmación de código en la rama “main”.

En la sección ” env:“, puede declarar las variables de entorno que necesita dentro del script.

En la sección “jobs -> ci_cd -> steps:”, declarará los pasos del pipeline de CI/CD, que se ejecutarán de forma secuencial.

En la sección “jobs -> ci_cd -> runs-on:”, especifica la imagen de la VM en la que desea que se ejecuten los pasos.

Ahora, echemos un vistazo a algunos archivos de GitHub Actions reales 🔥

Archivo YAML de GitHub Actions del pipeline de ML

La acción se activará cuando se realice una nueva confirmación de código en la rama “main”, excepto para los directorios de la aplicación web y los archivos YAML y Markdown.

Agregamos variables de entorno que contienen información sobre el proyecto GCP y la VM.

En cuanto a los pasos de CI/CD, principalmente hacemos 2 cosas:

  1. configurar las credenciales y autenticarnos en GCP,
  2. conectar con SSH en la VM de GCP proporcionada y ejecutar un comando que: va al directorio de código, obtiene los últimos cambios, crea los paquetes de Python y los despliega en el registro de PyPi. Ahora Airflow utilizará los nuevos paquetes de Python la próxima vez que se ejecute.

Básicamente, hace lo que habría hecho manualmente, pero ahora todo está automatizado de manera agradable usando GitHub Actions.

Tenga en cuenta que no tiene que recordar o saber cómo escribir un archivo de GitHub Actions desde cero, ya que puede encontrar plantillas ya escritas para la mayoría de los casos de uso. Por ejemplo, aquí está el repositorio google-github-actions/ssh-compute [11] que usamos para escribir el archivo YAML a continuación.

Encontrará plantillas similares para casi cualquier caso de uso que tenga en mente.

Archivo YAML de GitHub Actions de la aplicación web

El archivo de acciones de la aplicación web es un 90% igual que el utilizado para el pipeline de ML, excepto por lo siguiente:

  • ignoramos los archivos del pipeline de ML;
  • ejectuamos un comando de docker que crea y ejecuta la aplicación web.

Pero, ¿de dónde viene la extraña sintaxis ” ${{ vars… }}”? Lo explicaré en un segundo, pero lo que debe saber ahora es lo siguiente:

  • ${{ vars.<name> }}“: variables establecidas dentro de GitHub;

  • ${{ secrets.<name> }}”: secretos establecidos dentro de GitHub. Una vez que se establece un secreto, ya no se puede ver (las variables sí);

  • ${{ env.<name> }}”: variables de entorno establecidas en la sección “env:”.

Observación importante

El archivo YAML anterior no contiene la sección CI, solo la sección CD.

Para seguir buenas prácticas en una tubería de integración continua robusta, deberías ejecutar una acción que construya las imágenes de Docker y las suba a un registro de Docker.

Luego, deberías conectarte por SSH a un entorno de pruebas y ejecutar tu conjunto de pruebas. Como paso final, deberías conectarte por SSH a la VM de producción, descargar las imágenes y ejecutarlas.

La serie se volvió demasiado larga y queríamos mantenerla simple, pero la buena noticia es que aprendiste todas las herramientas y principios necesarios para hacer lo que describimos anteriormente.

Configurar secretos y variables

En este punto, debes bifurcar el repositorio de consumo de energía para configurar las credenciales de GitHub Actions con las tuyas propias.

Revisa este documento para ver cómo bifurcar un repositorio en GitHub [10].

Configurar variables de acción

Ve a tu repositorio bifurcado. Luego haz clic en: “Configuración -> Secretos y variables -> Acciones.”

Ahora, haz clic en “Variables”. Puedes crear una nueva variable haciendo clic en “Nueva variable de repositorio”. Ver la imagen a continuación 👇

Captura de pantalla de cómo crear una nueva variable de repositorio [Imagen del autor].

Debes crear 5 variables que los scripts de GitHub Actions utilizarán:

  • NOMBRE_INSTANCIA_APP: el nombre de la VM de la aplicación web. En nuestro caso, se llama “app”. El valor predeterminado debería estar bien si usas nuestras convenciones de nomenclatura recomendadas.
  • GCLOUD_PROJECT: la ID de tu proyecto de GCP. Aquí, debes cambiarlo por tu ID de proyecto.
  • NOMBRE_INSTANCIA_ML_PIPELINE: el nombre de la VM de la tubería de ML. En nuestro caso, es “ml-pipeline”. El valor predeterminado debería estar bien si usas nuestras convenciones de nomenclatura recomendadas.
  • USUARIO: el usuario que usaste para conectarte a las VM mientras configurabas la máquina usando la conexión SSH. El mío era “pauliusztin”, pero debes cambiarlo por el tuyo. Ve a la VM y ejecuta echo $USER.
  • ZONA: la zona donde implementaste las VM. El valor predeterminado debería estar bien si usas nuestras convenciones de nomenclatura recomendadas.

Configurar secretos de acción

En la misma sección “Secretos y variables / Acciones”, haz clic en la pestaña “Secretos”.

Puedes crear un nuevo secreto presionando el botón “Nuevo secreto de repositorio”.

Estos son similares a las variables que acabamos de completar, pero después de llenar sus valores, ya no puedes verlos. Es por eso que se llaman secretos.

Aquí es donde agregas toda tu información confidencial. En nuestro caso, las credenciales de GCP y las claves privadas. Ver la imagen a continuación 👇

Captura de pantalla de cómo crear un nuevo secreto de repositorio [Imagen del autor].

El secreto GCP_CREDENTIALS contiene el contenido de la clave JSON de tu cuenta de servicio de administración de VM. Al configurar esto, la tubería de CI/CD utilizará esa cuenta de servicio para autenticarse en las VM.

Como el contenido del archivo está en formato JSON, para formatearlo correctamente, debes seguir los siguientes pasos:

Instala la herramienta CLI jq:

sudo apt updatesudo apt install -y jqjq - version

Formatea tu archivo de clave JSON:

jq -c . /ruta/a/tu/admin-vm.json

Toma la salida de este comando y crea tu secreto GCP_CREDENTIALS con ella.

La clave privada de GCP_SSH_PRIVATE_KEY es tu clave SSH privada de GCP (no la personal, GCP crea automáticamente una adicional), que se creó en tu computadora local cuando usaste SSH para conectarte a las VM de GCP.

Para copiarlo, ejecute lo siguiente:

cd ~/.sshcat google_compute_engine

Copie la salida de la terminal y cree la variable GCP_SSH_PRIVATE_KEY.

Ejecutar el pipeline CI/CD

Ahora haga cualquier cambio en el código, empújelo a la rama principal y los archivos de GitHub Actions se activarán automáticamente.

Revise la pestaña de “Acciones” de su repositorio de GitHub para ver sus resultados.

Captura de pantalla de los registros de ejecución de GitHub Actions en GitHub [Imagen del autor].

Se activarán dos acciones. Una construirá e implementará los módulos ml-pipeline en su VM de ml-pipeline GCP, y la otra construirá e implementará la aplicación web en su VM de app GCP.

Conclusión

¡Felicitaciones! Ha terminado la última lección del curso Full Stack 7-Steps MLOps Framework. Esto significa que ahora es un ingeniero de ML de pila completa 🔥

Pido disculpas de nuevo por el artículo altamente técnico. No es una lectura muy entretenida pero es un paso crucial para finalizar esta serie.

En la lección 7, aprendió cómo:

  • implementar manualmente los 3 pipelines de ML en GCP;
  • implementar manualmente la aplicación web en GCP;
  • construir un pipeline CI/CD para automatizar el proceso de implementación utilizando GitHub Actions.

Ahora que comprende cómo agregar valor empresarial real implementando su sistema de ML y poniéndolo a trabajar, es hora de construir su impresionante proyecto de ML.

Ningún proyecto está construido perfectamente, y este no es una excepción.

Revise nuestra lección de bonificación de Full Stack 7-Steps MLOps Framework, donde discutiremos abiertamente qué otras opciones de diseño podríamos haber tomado para mejorar aún más el sistema de ML construido durante este curso.

Agradezco sinceramente que haya elegido mi curso para aprender MLE & MLOps, y espero que le haya ayudado en su viaje de aprendizaje ✌️

Conéctese conmigo en LinkedIn y hágamelo saber si tiene alguna pregunta y comparta qué grandes proyectos ha construido después de completar el curso Full Stack 7-Steps MLOps Framework.

Acceda al repositorio de GitHub aquí.

💡 Mi objetivo es ayudar a los ingenieros de aprendizaje automático a mejorar en el diseño y producción de sistemas de ML. ¡Sígame en LinkedIn o suscríbase a mi boletín semanal para obtener más información!

🔥 Si disfruta leyendo artículos como este y desea apoyar mi escritura, considere convertirse en miembro de Zepes. Usando mi enlace de referencia, puede apoyarme sin costo adicional mientras disfruta de acceso ilimitado a la rica colección de historias de Zepes.

🤖 Únase para obtener contenido exclusivo sobre el diseño y la construcción de sistemas de ML listos para producción 🚀 Desbloquee el acceso completo a…

pauliusztin.medium.com

¡Gracias ✌🏼!

Referencias

[1] Consumo de energía por código de industria DE35 de la API de Dinamarca, Denmark Energy Data Service

[2] Usar IAP para reenvío TCP, GCP Docs

[3] Descripción general del reenvío TCP, GCP Docs

[4] Google Cloud Collective, Cómo abrir un puerto específico como el 9090 en Google Compute Engine (2017), Stackoverflow

[5] ANTHONY HEDDINGS, Cómo abrir puertos de firewall en una instancia de GCP Compute Engine (2020), How-To Geek

[6] Preparar su proyecto para el reenvío TCP de IAP, GCP Docs

[7] Reservar una dirección IP externa estática, GCP Docs

[8] Crear y eliminar claves de cuenta de servicio, GCP Docs

[9] Tom Roth, Instalar Docker en una máquina virtual de Google Cloud (2018), Blog de Tom Roth

[10] Hacer un fork de un repositorio, Documentación de GitHub

[11] Repositorio de acciones de GitHub de GCP, GitHub

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Cómo los LLM basados en Transformer extraen conocimiento de sus parámetros

En los últimos años, los modelos de lenguaje basados en transformadores (LLMs, por sus siglas en inglés) se han vuelt...

Inteligencia Artificial

Investigadores de Stanford proponen 'EquivAct' Un avance en el aprendizaje de robots para generalizar tareas en diferentes escalas y orientaciones

Los seres humanos pueden extrapolar y aprender a resolver variaciones de una tarea de manipulación si los objetos inv...

Inteligencia Artificial

Cómo gané en el fútbol de fantasía italiano ⚽ utilizando el aprendizaje automático

Como ingeniero mecánico con un gran interés en la programación y la informática, me fasciné por el mundo del aprendiz...

Inteligencia Artificial

Google AI presenta WeatherBench 2 un marco de aprendizaje automático para evaluar y comparar diversos modelos de pronóstico del tiempo

El aprendizaje automático (ML) se ha utilizado cada vez más en la predicción del tiempo en los últimos años. Ahora qu...