1. Introducción
Kubeflow es un kit de herramientas de aprendizaje automático para Kubernetes. El objetivo del 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 ofrecer una forma directa de implementar sistemas de código abierto de primer nivel para el AA en infraestructuras diversas. |
¿Cómo es 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 proveedores.
- Escalable: Puede usar recursos que fluctúan y solo se ve limitada por la cantidad de recursos asignados al clúster de Kubernetes.
- Composable: Te permite configurar pasos independientes en un flujo de trabajo de AA completo, eligiendo entre un conjunto seleccionado de frameworks y bibliotecas de AA.
Kubeflow te brinda la capacidad de organizar microservicios con acoplamiento bajo como una sola unidad y de implementarlos en una variedad de ubicaciones, incluidas en una laptop, de forma local o en la nube.
En este codelab, se explica cómo crear tu propia implementación de Kubeflow con MiniKF y, luego, cómo ejecutar un flujo de trabajo de Kubeflow Pipelines con ajuste de hiperparámetros para entrenar y entregar un modelo. Todo esto se hace desde un notebook de Jupyter.
Qué compilarás
En este codelab, compilarás una canalización compleja de ciencia de datos con ajuste de hiperparámetros en Kubeflow Pipelines, sin necesidad de usar SDK ni comandos de la CLI. No es necesario tener conocimientos sobre Kubernetes o Docker. Cuando termine, su infraestructura contendrá lo siguiente:
- Una VM MiniKF (Mini Kubeflow) que instala automáticamente lo siguiente:
- 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 en Kubeflow Pipelines sin usar ningún comando de CLI ni SDK
- Cómo ejecutar Kubeflow Pipelines con el ajuste de hiperparámetros desde un notebook con solo un clic en un botón
- Cómo crear versiones automáticas de tus datos en un notebook y en cada paso de la canalización
Requisitos
- Un proyecto de GCP activo para el que tengas permisos de propietario
Este es un codelab avanzado enfocado en Kubeflow. Para obtener más información general y una introducción a la plataforma, consulta la documentación Introducción a Kubeflow. Los conceptos y los bloques de código que no son relevantes se pasan por alto y se proporcionan para que simplemente los copies y pegues.
2. Configura el entorno
Configura el proyecto de GCP
Sigue los pasos que se indican a continuación para crear un proyecto de GCP o configurar tu proyecto de GCP existente. Si planeas usar un proyecto de GCP existente, asegúrate de que cumpla con los requisitos mínimos que se describen a continuación. El primer paso es abrir el administrador de recursos en la consola de GCP.
Crea un proyecto nuevo o selecciona uno existente:
Verifica los siguientes requisitos mínimos:
- Asegúrate de tener el rol de propietario para el proyecto.
- Asegúrate de que la facturación esté habilitada para tu proyecto.
- Si usas el nivel gratuito de GCP o el período de prueba de 12 meses con $300 de crédito, ten en cuenta que no puedes ejecutar la instalación predeterminada de GCP de MiniKF porque el nivel gratuito no ofrece suficientes recursos. Debes actualizar tu cuenta a una pagada.
Para obtener más ayuda con la configuración de un proyecto de GCP, consulta la documentación de GCP.
Después de configurar el proyecto de GCP, ve directamente a las instrucciones para instalar MiniKF.
Abre tu proyecto de GCP preasignado
Si deseas abrir tu proyecto de GCP preasignado, haz clic en el siguiente botón para visitar GCP Console y abrir el panel principal, que se encuentra en el menú de opciones en la parte superior izquierda. Si la pantalla está vacía, haz clic en Sí cuando se te solicite para crear un panel.
Si el proyecto aún no está seleccionado, haz clic en Selecciona un proyecto:
Elige tu proyecto. Solo deberías tener una:
3. Instala MiniKF
Crea una instancia de procesamiento que incluya MiniKF
En GCP Marketplace, busca “MiniKF”.
Selecciona la máquina virtual MiniKF de Arrikto:
Haz clic en el botón LANZAR y selecciona tu proyecto:
En la sección Configurar y Deploy, elige un nombre y una zona para tu instancia de MiniKF y deja las opciones predeterminadas. Luego, haz clic en el botón Implementar:
Espera a que se inicie la instancia de Compute de MiniKF:
Cómo acceder a MiniKF
Cuando la VM de MiniKF esté activa, haz clic en el botón SSH para conectarte y acceder a la cuenta. 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.
Acceder a Kubeflow
Cuando 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:
Los usuarios de Chrome verán esta pantalla:
Los usuarios de Firefox verán esta pantalla:
Los usuarios de Safari verán esta pantalla:
Acceder a Rok
Después de acceder a Kubeflow, haz clic en el ícono de tres líneas para abrir el menú de la izquierda. Haz clic en Snapshots y accede a Rok con el nombre de usuario y la contraseña de MiniKF.
¡Felicitaciones! Implementaste MiniKF en GCP correctamente. Ahora puedes crear notebooks, escribir tu código de AA, ejecutar Kubeflow Pipelines y usar Rok para el control de versiones y la reproducibilidad de los datos.
4. Ejecuta una canalización desde tu notebook
Durante esta sección, ejecutarás el ejemplo de identificación de razas de perro, un proyecto del programa Udacity AI Nanodegree. Dada la imagen de un perro, el modelo final proporcionará una estimación de la raza del perro.
Crea un servidor de notebook en tu clúster de Kubeflow
Navega al vínculo Notebooks en el panel central de Kubeflow.
Haz clic en New Server.
Especifica un nombre para el servidor del notebook.
Asegúrate de haber seleccionado la siguiente imagen de Docker (ten en cuenta que la etiqueta de imagen puede variar):
gcr.io/arrikto/jupyter-kale:f20978e
Agrega un volumen de datos nuevo y vacío de 5 GB, y asígnale el nombre data.
Haz clic en Iniciar para crear el servidor de notebook.
Cuando el servidor del notebook esté disponible, haz clic en Conectar para conectarte a él.
Descarga los datos y el notebook
Se abrirá una nueva pestaña con la página de destino de JupyterLab. Crea una terminal nueva en JupyterLab.
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 https://github.com/kubeflow-kale/kale
El repositorio clonado contiene una serie de ejemplos seleccionados con datos y notebooks anotados.
En la barra lateral, navega a la carpeta data/kale/examples/dog-breed-classification/
y abre el notebook dog-breed.ipynb
.
Explora el código de AA del ejemplo de identificación de razas de perro
Por el momento, no ejecutes las celdas que descargan los conjuntos de datos, ya que usarás conjuntos de datos más pequeños que se incluyen en el repositorio que acabas de clonar. Si estás ejecutando este ejemplo a tu propio ritmo desde casa, no dudes en descargar los conjuntos de datos.
Ejecuta la celda imports
para importar todas las bibliotecas necesarias. Ten en cuenta que el código falla porque falta una biblioteca:
Por lo general, debes crear una nueva imagen de Docker para poder ejecutar este notebook como una canalización de Kubeflow y incluir las bibliotecas recién instaladas. Afortunadamente, Rok y Kale se aseguran de que cualquier biblioteca que instales durante el desarrollo llegue a tu canalización, gracias a la tecnología de captura de instantáneas de Rok y a Kale de activar esos volúmenes de instantáneas en los pasos de la canalización.
Ejecuta la siguiente celda para instalar la biblioteca faltante:
Haz clic en el ícono Reiniciar para reiniciar el kernel del notebook:
Vuelve a ejecutar la celda imports
con las bibliotecas correctas instaladas y observa cómo funciona.
Convierte tu notebook en una canalización en Kubeflow Pipelines
Para habilitar Kale, haz clic en el ícono de Kubeflow en el panel izquierdo del notebook:
Para habilitar Kale, haz clic en el control deslizante del Panel de implementación de Kale:
Explora las dependencias por celda dentro del notebook. Observa cómo varias celdas del notebook pueden formar parte de un solo paso de canalización, como lo indican las barras de color a la izquierda de las celdas, y cómo un paso de canalización puede depender de los pasos anteriores, como lo indica depende de las etiquetas arriba de las celdas. Por ejemplo, la siguiente imagen muestra varias celdas que forman parte del mismo paso de canalización. Tienen el mismo color rojo y dependen de un paso anterior de la canalización.
Haz clic en el botón Compile and Run:
Ahora Kale se hará cargo y compilará tu notebook convirtiéndolo en una canalización de Kubeflow Pipelines. Además, debido a que Kale se integra con Rok para tomar instantáneas del volumen de datos del notebook actual, puedes ver el progreso de la instantánea. Rok se encarga del control de versiones de los datos y de la reproducción de todo el entorno como estaba cuando hiciste clic en el botón Compile and Run. De esta manera, tendrás una máquina del tiempo para tus datos y código, y tu canalización se ejecutará en el mismo entorno en el que desarrollaste tu código, sin necesidad de compilar nuevas imágenes de Docker.
La canalización se compiló y se subió a Kubeflow Pipelines. Ahora, haz clic en el vínculo para ir a la IU de Kubeflow Pipelines y ver la ejecución.
Se abrirá la IU de Kubeflow Pipelines en una pestaña nueva. Espera a que finalice la ejecución.
¡Felicitaciones! Acabas de ejecutar una canalización de extremo a extremo en Kubeflow Pipelines, comenzando por tu notebook.
5. Aprendizaje por transferencia con ajuste de hiperparámetros
Examine los resultados
Consulta los registros del paso cnn-from-scratch. (haz clic en el paso del gráfico en la IU de Kubeflow Pipelines y, luego, en la pestaña Registros). Este es el paso en el que entrenaste una red neuronal convolucional (CNN) desde cero. Ten en cuenta que el modelo entrenado tiene una exactitud muy baja y, además de eso, este paso tardó mucho tiempo en completarse.
Consulta los registros del paso cnn-vgg16. En este paso, usaste el aprendizaje por transferencia en el modelo VGG-16 previamente entrenado, una red neuronal entrenada por Visual Geometry Group (VGG). La exactitud es mucho mayor que la del modelo anterior, pero se puede mejorar aún más.
Ahora, observa los registros del paso cnn-resnet50. En este paso, usaste aprendizaje por transferencia en el modelo ResNet-50 previamente entrenado. La precisión es mucho mayor. Por lo tanto, este es el modelo que usarás para el resto de este codelab.
Ajuste de hiperparámetros
Regresa al servidor del notebook en la IU de Kubeflow y abre el notebook llamado dog-breed-katib.ipynb
(en la ruta de acceso data/kale/examples/dog-breed-classification/
). En este notebook, ejecutarás algunos experimentos de ajuste de hiperparámetros en el modelo ResNet-50 con Katib. Observa que tienes una celda al comienzo del notebook para declarar los parámetros:
En el panel izquierdo del notebook, habilita HP Tuning with Katib (Ajuste de HP con Katib) para ejecutar el ajuste de hiperparámetros:
Luego, haz clic en Set up Katib Job (Configurar trabajo de Katib):
Define el espacio de búsqueda para cada parámetro y un objetivo:
Haz clic en el botón Compile and Run Katib Job:
Mira el progreso del experimento Katib:
Haz clic en Ver para ver el experimento Katib:
Haz clic en Listo para ver las ejecuciones en Kubeflow Pipelines (KFP):
En la página del experimento de Katib, verás las pruebas nuevas:
Y en la IU de KFP, verás las nuevas ejecuciones:
Veamos lo que acaba de suceder. Anteriormente, Kale producía una ejecución de canalización a partir de un notebook y, ahora, está creando varias ejecuciones de canalizaciones, en las que cada una recibe una combinación diferente de argumentos.
Katib es un componente de Kubeflow que se usa para ejecutar trabajos de ajuste de hiperparámetros de uso general. Katib no sabe nada acerca de los trabajos que realmente ejecuta (pruebas en la jerga Katib). Lo único que le interesa a Kale es el espacio de búsqueda, el algoritmo de optimización y el objetivo. Katib admite la ejecución de objetos Job simples (es decir, Pods) como pruebas, pero Kale implementa una corrección de compatibilidad para que las pruebas ejecuten canalizaciones en Kubeflow Pipelines y, luego, recopilen las métricas de las ejecuciones de las canalizaciones.
A medida que el experimento de Katib produzca pruebas, verás más pruebas en la IU de Katib:
Y más ejecuciones en la IU de KFP:
Cuando completes el experimento de Katib, podrás ver todas las pruebas en la IU de Katib:
Y todas las ejecuciones en la IU de KFP:
Si regresas al notebook, verás un botón de información junto al experimento Katib dentro del panel Kale:
Haz clic en él para ver el mejor resultado y los parámetros que lo produjeron:
6. Limpia
Destruye la VM de MiniKF
Navega a Deployment Manager en la consola de GCP y borra la implementación de minikf-on-gcp
.
7. Felicitaciones
Felicitaciones, ejecutaste con éxito 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:
- github.com/kubeflow
- Kubeflow en Slack
- kubeflow-discuss@googlegroups.com
- Llamada semanal a la comunidad, Slack y otros detalles de la comunidad