Maratón Behind the Code Latinoamérica: Sé parte del Desafío. Inscríbete antes del 7 de Agosto.

Desplegar modelos de deep learning en Red Hat OpenShift

Objetivo del aprendizaje

Si completa este tutorial introductorio, aprenderá cómo desplegar un microservicio de deep learning desde Model Asset Exchange en Red Hat OpenShift.

Al concluir el tutorial, sabrá cómo utilizar la consola web de OpenShift o la interfaz de la línea de comando (CLI) de OpenShift Container Platform para:

  • Crear un proyecto nuevo
  • Desplegar un microservicio de modelos desde una imagen de contenedor público en Docker Hub
  • Crear una ruta que expone el microservicio al público

Prerequisitos

Para seguir este tutorial, usted debe tener:

El tutorial se creó utilizando Red Hat OpenShift v3.11 en IBM Cloud. Si completa el tutorial utilizando Red Hat OpenShift Online, que al momento de escribir esto estaba en la versión 3, notará algunas diferencias con la GUI.

Tiempo estimado

Para completar este tutorial tardará aproximadamente 30 minutos. Los módulos del tutorial son:

Configuración del tutorial

Para completar este tutorial debe tener acceso a un clúster pequeño de un nodo de OpenShift.

Suministrar un clúster de Red Hat OpenShift

Si no tiene acceso a un clúster existente, suministre uno en la nube de IBM o en openshift.com.

Este tutorial se puede completar usando el nivel gratuito de iniciante de openshift.com. Sin embargo, observe que la RAM está limitada a 2 GB, lo que no siempre puede ser suficiente para modelos con un uso intensivo de recursos.

En este tutorial, las instrucciones y capturas de pantalla se refieren a un clúster llamado os-max-test-cluster. Cuando sea necesario, sustituya este nombre por el nombre de su clúster.

Usted está listo para iniciar el tutorial.

Desplegar un microservicio de deep learning que sirve modelos en Red Hat OpenShift

En este tutorial, desplegará un microservicio para modelos desde Model Asset Exchange en Red Hat OpenShift con la consola web de OpenShift o con la CLI de OpenShift Container Platform. Puede completar ambas partes o sólo una.

Desplegar usando la consola web de OpenShift

En la primera parte del tutorial, desplegará el microservicio de modelos MAX-Object-Detector, que se puede utilizar para identificar objetos de imágenes.

  1. Abra la consola web de OpenShift.

    1. En un navegador web, abra la página de clústeres de Kubernetes en IBM Cloud.
    2. Ubique su entrada de clústeres de OpenShift os-max-test-cluster.
    3. En el menú desplegable, seleccione consola web de OpenShift. Menú de Navegación

      Se muestra el navegador del catálogo.

  2. En el menú desplegable, seleccione la Consola de aplicaciones. Se mostrará una lista de sus proyectos. Se utiliza un proyecto en OpenShift para organizar los recursos relacionados.

    La imagen de la plataforma OpenShift con la opción del menú abriendo el catálogo de servicios

  3. Cree un proyecto nuevo y asígnele un nombre (como max-deployments), un nombre de muestra y una descripción opcional.

  4. Abra el proyecto.

Despliegue el microservicio de imagen de Docker

Es posible desplegar imágenes de Docker hospedadas en registros públicos y privados. La imagen de Docker MAX-Object-Detector codait/max-object-detector está hospedada en Docker Hub.

  1. En la página de visión general del proyecto, elija Desplegar Imagen.

Pantalla de iniciar su proyecto, con el botón de navegar por el catálogo

Si su página de visión general tiene un aspecto diferente (por ejemplo, porque está usando un proyecto existente que ya contiene una aplicación), use el menú desplegable Añadir Proyecto de la barra del menú y seleccione Desplegar Imagen.

  1. Seleccione la imagen de Docker de modelos que desea desplegar.
    1. Elija el botón de selección Nombre de Imagen para seleccionar como origen un repositorio público o privado.
    2. Ingrese codait/max-object-detector como Nombre de la imagen o extraiga especificaciones (o ingrese el nombre de otra imagen de Docker que sirve modelos desde nuestro repositorio de Docker Hub).

Línea uniendo el punto 1 de imagen con el punto 2 resultados

  1. Haga clic en la lupa que está junto al nombre de la imagen (o pulse Enter) para cargar los metadatos de la imagen de Docker.

  2. Revise la configuración del despliegue para la imagen de Docker seleccionada.

    Menú configuración del despliegue de imagen, mostrando el campo de nombre de imágen completo*

    El campo Nombre se rellena automáticamente utilizando el nombre de la imagen de Docker. OpenShift utiliza este nombre para identificar los nombres que se crean cuando se despliega la aplicación.

    Si usted agrega, modifica o borra algunos caracteres, notará cómo el cambio afecta al nombre generado del flujo de imágenes, al nombre de la configuración del despliegue, al nombre del servicio y al nombre del anfitrión. (Sin embargo, ¡en este tutorial deje el nombre tal como está!)

    Campos nombre y valor en blanco en la sección de variables del entorno

    Se puede personalizar el comportamiento de la mayoría de los microservicios de modelos estableciendo variables de entorno. Por ejemplo, puede activar el soporte de Intercambio de Recursos Multiorigen estableciendo la variable CORS_ENABLE de la configuración del despliegue como verdadera. Consulte la documentación de modelos para las variables de entorno específicas del modelo.

  3. Despliegue la imagen de Docker.

  4. Cierre la ventana y abra la pestaña Visión general en caso de que no esté seleccionada de forma predeterminada. Se muestra la configuración del despliegue para el microservicio que sirve modelos de Object Detector.

Imagen general con los detalles e información de un objeto detectado

De forma predeterminada, solo una instancia del microservicio se inicia. El despliegue se puede escalar de forma horizontal manualmente (“ejecutar más instancias de un microservicio para manejar simultáneamente más solicitudes”) incrementando el número objetivo de contenedores en ejecución. También puede habilitar el escalado automático (“ejecutar hasta X instancias en caso de que sea necesario”) haciendo clic en el nombre de la configuración del despliegue y seleccionando Configuración y Añadir escalador automático.

Después que el microservicio es desplegado, sólo será visible internamente (en el puerto 5000) para el clúster. Para exhibirlo al público, hay que crear una ruta.

Crear una ruta

Cuando se crear una ruta en OpenShift, se tiene la opción de exhibir una ruta desprotegida o una segura. Debido a que el microservicio que sirve modelos se comunica a través de HTTP, el router se puede configurar para que exponga una conexión HTTP desprotegida (que es lo que usted hará en este tutorial) o exhibir una conexión HTTP segura, que es la que el router de OpenShift termina automáticamente.

  1. Seleccione Crear Ruta bajo la sección REDES.
  2. Revise los valores de la configuración. Si se deja el nombre de anfitrión vacío, los valores predeterminados exponen una conexión HTTP desprotegida en una URL generada.

Menú crear ruta con los campos de nombre, sitio web, ruta, servicio,  puerta y ruta de seguridad

Para configurar un HTTP seguro, hay que seleccionar Ruta segura, establecer que Determinación TLS sea Edge, y establecer que Tráfico Desprotegido sea Ninguno. Puede establecer su propio certificado TLS o usar el predeterminado por el router.

  1. Crear la ruta. Cuando se completa la operación, se muestra la URL público para el microservicio que sirve modelos desplegado.

Pantalla del detector de objeto mostrando la URL pública

Si se muestra un error que indica que el router rechazó la solicitud, reduzca el nombre de la ruta. Es posible que la longitud máxima de la URL generada (derivada por la concatenación del nombre de la ruta, el nombre del proyecto, el nombre del clúster y el dominio del router) supere el límite máximo de 63 caracteres.

  1. Abra el URL desplegado para verificar que puede acceder al punto final de la especificación OpenAPI del microservicio.

Pantalla donde se muestra la verificación del punto final de la especificación OpenAPI del microservicio.

  1. Si siguió este tutorial usando Object Detector, abra la aplicación de la muestra incorporada agregando /app a la URL que muestra su navegador, y pruebe el servicio desplegado enviando una imagen.

Foto de un niño y un oso de peluche y las especificaciones de las imágenes

Vaya al resumen del tutorial o revise las instrucciones de la próxima sección para descubrir cómo desplegar un microservicio de modelos con la interfaz de la línea de comando.

Desplegar usando la CLI

Es posible desplegar y gestionar aplicaciones usando la CLI de OpenShift Container Platform(oc). Debe iniciar sesión antes de usar la CLI para desplegar el microservicio en sus clústeres.

  1. Abra la consola web de OpenShift y copie el comando de inicio de sesión.
    1. En un navegador web, abra la página de clústeres de Kubernetes en IBM Cloud.
    2. Ubique su entrada de clústeres de OpenShift os-max-test-cluster.
    3. En el menú desplegable, seleccione drop-down menu, seleccione consola web de OpenShift.

Menú clusters desplegado y la opción consola web de OpenShift

  Se muestra el navegador del catálogo.
  1. En el menú desplegable de avatar, seleccione Copiar Comando de Inicio de Sesión.

Menú desplegado con la opción copiar comando de inicio de sesión

No comparta el comando de inicio de sesión. Contiene un token que otorga acceso a los recursos de su cuenta.

  1. Inicie sesión en su clúster por medio de la CLI de OpenShift.

    1. Abra una ventana de terminal.
    2. Pegue el comando de inicio de sesión que copió.

      oc login https://... --token=...
      

    Consejo: Para aprender más acerca de un comando, ejecute oc <command> --help, por ejemplo, oc login --help.

  2. Cree un proyecto nuevo y póngale un nombre como max-deployments-cli. OpenShift utiliza un proyecto para organizar los recursos relacionados.

    oc new-project max-deployments-cli
    

    Es posible hacer una lista de proyectos existentes con oc projects o cambiar entre proyectos con oc project <project-name>.

Desplegar la imagen de Docker

Es posible desplegar imágenes de Docker que están hospedadas en registros públicos y privados. En esta parte del tutorial, desplegará el microservicio que sirve modelos MAX-Image-Caption-Generator que se puede utilizar para describir el contenido de una imagen con una frase, como se ve en esta demostración.

  1. Verifique que pueda acceder a la imagen de Docker codait/max-image-caption-generator en Docker Hub.

       oc new-app --search codait/max-image-caption-generator
    

    El resultado se debería parecerse al siguiente:

     Docker images (oc new-app --docker-image=<docker-image> [--code=<source>])
     -----
     codait/max-image-caption-generator
     Registry: Docker Hub
     Tags:     latest
    
    1. Desplegar la imagen de Docker.
    oc new-app codait/max-image-caption-generator
    

Revisar la salida y observar que el nombre de la imagen max-image-caption-generator se utiliza de forma predeterminada para poner un nombre a los recursos generados, como el flujo de imágenes, la configuración del despliegue, el servicio y el anfitrión.

–> Imagen de Docker encontrada … (… días de antigüedad) desde Docker Hub para «codait/max-image-caption-generator»

* Se creará una etiqueta de flujos de imágenes como "max-image-caption-generator:latest" que realizará el seguimiento de esta imagen
* Esta imagen se desplegará en la configuración de despliegue "max-image-caption-generator"
* El puerto 5000/tcp tendrá su carga balanceada por el servicio "max-image-caption-generator"
* Otros contenedores pueden acceder a este servicio por medio del nombre de anfitrión "max-image-caption-generator"
* AVISO: La imagen "codait/max-image-caption-generator" se ejecuta como usuario administrador, lo cual es posible que no sea permitido por el administrador de su clúster

–> Creando recursos … imagestream.image.openshift.io «max-image-caption-generator» creado deploymentconfig.apps.openshift.io «max-image-caption-generator» creado service «max-image-caption-generator» creado –> Correcto … Ejecute ‘oc status’ para ver su aplicación. Mostrar más

La predeterminación se puede cambiar suministrando el parámetro --name <mi-nombre-personalizado> cuando se despliega la imagen.

  1. Se puede personalizar el comportamiento de la mayoría de los microservicios de modelos estableciendo variables de entorno. Por ejemplo, puede activar el soporte de Intercambio de Recursos Multiorigen estableciendo la variable CORS_ENABLE de la configuración del despliegue como verdadera:

    oc set env deploymentconfig max-image-caption-generator CORS_ENABLE=true
    

    Consulte la documentación de modelos para las variables de entorno específicas al modelo.

  2. Consultar el estado de implementación.

    oc status
    

Observe que después del despliegue, se ejecutará una instancia del microservicio que solo es visible internamente (en el puerto 5000) para el clúster.

   En el proyecto max-deployments-cli, en el servidor https://...

    svc/max-image-caption-generator - ...:5000
    dc/max-image-caption-generator despliega istag/max-image-caption-generator:latest
    Despliegue n.º 1, desplegado hace 15 minutos - 1 contenedor

Es posible escalar horizontalmente de forma manual incrementando el número objetivo de contenedores en ejecución (oc scale --replicas=2 deploymentconfig max-image-caption-generator) o configurando el escalado automático.

Para exhibir el servicio al público, hay que crear una ruta.

Crear una ruta

Cuando se crea una ruta en OpenShift, se tiene la opción de exhibir una ruta desprotegida o una segura. Debido a que el microservicio de modelos se comunica a través de HTTP, el router se puede configurar para que exhiba una conexión HTTP desprotegida (que es lo que usted hará en este tutorial) o exhibir una conexión HTTP segura, que es la que el router de OpenShift termina automáticamente.

  1. Crear una ruta para el servicio.

    oc expose service max-image-caption-generator
    
  2. Recuperar la URL público del microservicio.

    oc get route max-image-caption-generator
    

    El nombre del anfitrión generado se muestra bajo la columna ANFITRIÓN/PUERTO.

    NOMBRE                          ANFITRIÓN/PUERTO                                                        ...
    max-image-caption-generator   max-image-caption-generator-max-deployments-cli...appdomain.cloud  ...
    

    Si en el displayed ANFITRIÓN/PUERTO aparece InvalidHost, el nombre de anfitrión generado no es válido. Esto normalmente ocurre cuando la longitud supera el máximo de 63 caracteres. Para resolver el problema, reduzca el nombre de la ruta. Por ejemplo, para reducir el nombre de la ruta del servicio max-image-caption-generator ejecute oc expose service max-image-caption-generator --name <nombre-reducido-de-la-ruta> seguido por oc get route <nombre-reducido-de-la-ruta> para recuperar la URL pública.

  3. En su un navegador web, abra la URL que se muestra para verificar que se puede acceder al microservicio.

Menú de captador de imagen con la URL verificada

  1. Valide que el punto final de /model/predict devuelva el resultado esperado para una imagen de su elección. Observación: Para algunos modelos con uso intensivo en computación, las llamadas al punto final /model/predict pueden provocar un Error HTTP 504 (se ha excedido el tiempo de espera del gateway) si se utiliza la configuración predeterminada del router. Para resolver el problema, aumente el valor del tiempo de espera del router ejecutando oc annotate route <nombre-del-router> --overwrite haproxy.router.openshift.io/timeout=<número-de-segundos>s..

Resumen

En este tutorial, usted aprendió cómo utilizar la consola web de OpenShift o la CLI de OpenShift Container Platform para:

  • Crear un proyecto nuevo
  • Desplegar un microservicio de modelos desde una imagen de contenedores públicos en Docker Hub
  • Crear una ruta que exhibe el microservicio al público

Para aprender más acerca de Model Asset Exchange o sobre cómo consumir en Node-RED o JavaScript el microservicio de modelos que desplegó, eche un vistazo a Ruta de Aprendizaje: Una introducción a Model Asset Exchange y a estos bolígrafos.

Si quiere aprender más acerca de Red Hat OpenShift, los siguientes recursos podrán serle útiles: