De notebooks a canalizaciones de Kubeflow con MiniKF y Kale

1. Introducción

Kubeflow es un kit de herramientas de aprendizaje automático para Kubernetes. El objetivo de este proyecto es que las implementaciones de flujos de trabajo de aprendizaje automático (AA) en Kubernetes sean simples, portátiles y escalables. El objetivo es proporcionar una forma directa de implementar sistemas de código abierto de primer nivel para AA en diversas infraestructuras.

¿Cómo se ve una implementación de Kubeflow?

Una implementación de Kubeflow tiene las siguientes características:

  • Portátil: Funciona en cualquier clúster de Kubernetes, ya sea que resida en Google Cloud Platform (GCP), de manera local o entre distintos proveedores.
  • Escalable: Puede utilizar recursos que fluctúan y se ve limitada solo por la cantidad de recursos asignados al clúster de Kubernetes.
  • Acoplable: Mejorada con service workers para funcionar sin conexión o en redes de baja calidad.

Es una forma de organizar microservicios vinculados de manera flexible como una sola unidad y, además, implementarlos en distintas ubicaciones, ya sea en una laptop o en la nube.

En este codelab, aprenderás a crear tu propia implementación de Kubeflow con MiniKF y a ejecutar un flujo de trabajo de Kubeflow Pipelines desde un notebook de Jupyter.

Qué compilarás

En este codelab, compilarás una canalización de ciencia de datos compleja con Kubeflow Pipelines, sin usar ningún comando de CLI ni SDK. No necesitas tener conocimientos sobre Kubernetes ni Docker. Cuando termine, su infraestructura contendrá lo siguiente:

  • Una VM de MiniKF (Mini Kubeflow) que se instala automáticamente:
  • Kubernetes (con Minikube)
  • Kubeflow
  • Kale, una herramienta para convertir notebooks de Jupyter de uso general en flujos de trabajo de Kubeflow Pipelines ( GitHub)
  • Arrikto Rok para el control de versiones y la reproducibilidad de los datos

Qué aprenderás

  • Cómo instalar Kubeflow con MiniKF
  • Cómo convertir tus notebooks de Jupyter a Kubeflow Pipelines sin usar comandos de la CLI ni SDKs
  • Cómo ejecutar Kubeflow Pipelines desde un notebook con un solo clic
  • Cómo versionar automáticamente tus datos en un notebook y en cada paso de la canalización

Requisitos

Este es un codelab avanzado que se enfoca en Kubeflow. Para obtener más información y una introducción a la plataforma, consulta la documentación de Introducción a Kubeflow. Los conceptos y los bloques de código no relevantes se pasan por alto y se proporcionan para que simplemente los copies y pegues.

2. Configura el entorno

Configura el ID del proyecto de GCP y el nombre del clúster

Para encontrar el ID de tu proyecto, visita el panel principal de GCP Console, que se encuentra en el menú de hamburguesa en la parte superior izquierda. Si la pantalla está vacía, haz clic en Sí en el mensaje para crear un panel.

Abre GCP Console.

3fdc4329995406a0.png

Si el proyecto aún no está seleccionado, haz clic en Seleccionar un proyecto:

e8952c0b96067dea.png

Selecciona tu proyecto. Solo debes tener uno:

fe25c1925487142.png

3. Instala MiniKF

Crea una instancia de Compute

En GCP Marketplace, busca "MiniKF".

Selecciona la máquina virtual MiniKF de Arrikto.

d6b423c1911ea85a.png

Haz clic en el botón Iniciar en Compute Engine y selecciona tu proyecto.

b5eeba43053db4bd.png

En la ventana Configure & Deploy, elige un nombre para tu instancia de MiniKF y deja las opciones predeterminadas. Luego, haz clic en el botón Implementar.

dc401e2bb5a884d9.png

Espera a que se inicie la instancia de procesamiento de MiniKF.

5228086caadc44c6.png

Accede a MiniKF

Cuando la VM de MiniKF esté en funcionamiento, haz clic en el botón SSH para conectarte y acceder. Sigue las instrucciones en pantalla para ejecutar el comando minikf, que iniciará la implementación de Minikube, Kubeflow y Rok. Este proceso tardará unos minutos en completarse.

774e83c3e96cf7b3.png

Accede a Kubeflow

Una vez que se complete la instalación y todos los Pods estén listos, visita el panel de MiniKF. Accede a Kubeflow con el nombre de usuario y la contraseña de MiniKF.

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Los usuarios de Chrome verán esta pantalla:

6258e0f09e46a6c2.png

Los usuarios de Firefox verán esta pantalla:

8cff90ce2f0670bd.png

Los usuarios de Safari verán esta pantalla:

1c6fd768d71c0a92.png

Accede a Rok

Después de acceder a Kubeflow, haz clic en el ícono de hamburguesa para abrir el menú de la izquierda. Navega a Snapshot Store y accede a Rok con el nombre de usuario y la contraseña de MiniKF.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

¡Felicitaciones! Implementaste correctamente MiniKF en GCP. Ahora puedes crear notebooks, escribir tu código de AA y ejecutar Kubeflow Pipelines. Usa Rok para el control de versiones y la reproducibilidad de los datos.

4. Ejecuta una canalización desde tu notebook

En esta sección, ejecutarás el ejemplo del Titanic, una competencia de Kaggle que predice qué pasajeros sobrevivieron al naufragio del Titanic.

Crea un servidor de Notebook

Navega al vínculo Notebook Servers en el panel central de Kubeflow.

4115cac8d8474d73.png

Haz clic en New Server.

f9303c0a182e47f5.png

Especifica un nombre para tu servidor de Notebook.

a2343f30bc9522ab.png

Asegúrate de haber seleccionado esta imagen:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

Agrega un volumen de datos nuevo y vacío de 5 GB y asígnale el nombre data.

8544d9b05826b316.png

Haz clic en Launch para crear el servidor de notebooks.

28c024bcc55cc70a.png

Cuando el servidor de notebook esté disponible, haz clic en Conectar para conectarte a él.

2f06041475f45d3.png

Descarga los datos y el notebook

Se abrirá una nueva pestaña con la página de destino de JupyterLab. Crea una nueva terminal en JupyterLab.

2482011174f7bc75.png

En la ventana de la terminal, ejecuta estos comandos para navegar a la carpeta data y descargar el notebook y los datos que usarás durante el resto del lab.

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

Este repositorio contiene una serie de ejemplos seleccionados con datos y notebooks anotados. Navega a la carpeta data/examples/titanic-ml-dataset/ en la barra lateral y abre el notebook titanic_dataset_ml.ipynb.

c85baf68b36c63b2.png

Explora el código de AA del desafío del Titanic

Ejecuta el notebook paso a paso. Ten en cuenta que el código falla porque falta una biblioteca.

bf2451fd7407e334.png

Regresa a la terminal y, luego, instala la biblioteca faltante.

pip3 install --user seaborn

d90593b21425dd12.png

Haz clic en el ícono de Actualizar para reiniciar el kernel del notebook.

a21f5f563b36ce4d.png

Vuelve a ejecutar la celda con las bibliotecas correctas instaladas y observa cómo se ejecuta correctamente.

Cómo convertir tu notebook en una canalización de Kubeflow

Para habilitar Kale, haz clic en el ícono de Kubeflow en el panel izquierdo.

3f4f9c93b187b105.png

Explora las dependencias por celda. Observa cómo varias celdas pueden formar parte de un solo paso de la canalización y cómo un paso de la canalización puede depender de pasos anteriores.

15cca32444c1f12e.png

Haz clic en el botón Compile and Run.

bde5cef34f00e258.png

Observa el progreso de la instantánea.

9408f46abb2493f5.png

Observa el progreso de la ejecución de la canalización.

9edbde68032f5e4b.png

Haz clic en el vínculo para ir a la IU de Kubeflow Pipelines y ver la ejecución.

a81646a22584e1b9.png

Espera a que se complete.

44bee7dc0d24ec21.png

d377b6d574a4970.png

¡Felicitaciones! Acabas de ejecutar una canalización de Kubeflow de extremo a extremo desde tu notebook.

5. Reproducibilidad con instantáneas de volumen

Examina los resultados

Consulta los registros del penúltimo paso de la canalización Results. Observa que todos los predictores muestran una puntuación del 100%. Un científico de datos experimentado sospecharía de inmediato. Esto es un buen indicador de que nuestros modelos no se generalizan y, en cambio, se sobreajustan al conjunto de datos de entrenamiento. Es probable que esto se deba a un problema con los datos que consumen los modelos.

2a594032c2dd6ff6.png

Cómo reproducir el estado anterior

Afortunadamente, Rok se encarga del control de versiones de los datos y de reproducir todo el entorno tal como estaba en el momento en que hiciste clic en el botón Compile and Run. De esta manera, tendrás una máquina del tiempo para tus datos y tu código. Por lo tanto, reanudemos el estado de la canalización antes de entrenar uno de los modelos y veamos qué sucede. Echa un vistazo al paso randomforest y, luego, haz clic en Artifacts.

4f25ca4560711b23.png

Sigue los pasos en Markdown, es decir, haz clic en el vínculo correspondiente para ver la instantánea en la IU de Rok.

e533bc781da9355a.png

Copia la URL de Rok.

d155d19731b5cedd.png

Navega al vínculo Notebook Servers.

aafeab01f3ef0863.png

Haz clic en New Server.

f2265a64e8f9d094.png

Pega la URL de Rok que copiaste anteriormente y haz clic en el botón Autocompletar.

9ba4d4128a3bdeea.png

Especifica un nombre para tu notebook.

7685c3bf35fc74b2.png

Asegúrate de haber seleccionado esta imagen:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

Haz clic en Launch para crear el servidor de notebooks.

28c024bcc55cc70a.png

Cuando el servidor de notebook esté disponible, haz clic en Conectar para conectarte a él.

34955a64ae316de1.png

Ten en cuenta que el notebook se abre en la celda exacta del paso de la canalización que generaste.

a1f7c81f349e0364.png

En segundo plano, Kale reanudó el estado del notebook importando todas las bibliotecas y cargando las variables de los pasos anteriores.

Depura el estado anterior

Agrega un comando de impresión a esta celda:

print(acc_random_forest)

Presiona Mayúsculas + Intro para ejecutar la celda activa, volver a entrenar el bosque aleatorio y, luego, imprimir la puntuación. Es 100.

e2a8a3b5465fcb5d.png

Ahora es momento de ver si hay algo extraño en los datos de entrenamiento. Para explorar y solucionar este problema, agrega una celda sobre el lenguaje de Markdown de Random Forest. Para ello, selecciona la celda anterior y haz clic en el ícono de signo más (+).

d1077f32dff9620f.png

Agrega el siguiente texto y ejecuta la celda para imprimir el conjunto de entrenamiento.

train_df

2854798ff01aed4e.png

¡Uy! La columna con etiquetas de entrenamiento ("Sobrevivió") se incluyó por error como atributos de entrada. El modelo aprendió a enfocarse en el atributo "Sobrevivió" y a ignorar el resto, lo que contamina la entrada. Esta columna coincide exactamente con el objetivo del modelo y no está presente durante la predicción, por lo que debe quitarse del conjunto de datos de entrenamiento para que el modelo pueda aprender de los otros atributos.

Cómo agregar una corrección de errores

Para quitar esta columna, edita la celda para agregar este comando:

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

Habilita Kale y asegúrate de que la celda que quita las etiquetas Survived forme parte del paso de la canalización featureengineering (debe tener el mismo color de contorno).

Vuelve a ejecutar la canalización haciendo clic en el botón Compile and Run.

Haz clic en el vínculo para ir a la IU de Kubeflow Pipelines y ver la ejecución.

Espera a que se complete el paso de resultados y consulta los registros para ver los resultados finales. Ahora tienes puntuaciones de predicción realistas.

8c6a9676b49e5be8.png

6. Limpia

Destruye la VM de MiniKF

Navega a Deployment Manager en GCP Console y borra la implementación de minikf-1.

7. Felicitaciones

¡Felicitaciones! Ejecutaste correctamente un flujo de trabajo de ciencia de datos de extremo a extremo con Kubeflow (MiniKF), Kale y Rok.

¿Qué sigue?

Únete a la comunidad de Kubeflow:

Lecturas adicionales