Puntuación por lotes para modelos de aprendizaje profundo con canalizaciones de Azure Machine Learning

Azure Logic Apps
Azure Machine Learning
Control de acceso basado en rol de Azure
Azure Storage

Esta arquitectura de referencia muestra cómo aplicar una transferencia de estilo neuronal a un vídeo con Azure Machine Learning. La transferencia de estilo es una técnica de aprendizaje profundo que se compone de una imagen existente con el estilo de otra imagen. Puede generalizar esta arquitectura para cualquier escenario que usa la puntuación de Batch con el aprendizaje profundo.

Architecture

Diagrama de arquitectura para modelos de aprendizaje profundo con Azure Machine Learning.

Descargue un archivo Visio de esta arquitectura.

Flujo de trabajo

Esta arquitectura consta de los siguientes componentes.

Proceso

Azure Machine Learning usa canalizaciones para crear secuencias de cálculo reproducibles y fáciles de administrar. También ofrece un destino de proceso administrado (en el cual se puede ejecutar un cálculo de la canalización) llamado Azure Machine Learning Compute para el entrenamiento, la implementación y la puntuación de modelos de aprendizaje automático.

Storage

Azure Blob Storage almacena todas las imágenes (imágenes de entrada, de estilo y de salida). Azure Machine Learning se integra con Blob Storage de forma que los usuarios no tienen que mover manualmente los datos entre las plataformas de proceso y Blob Storage. Blob Storage también resulta rentable por el rendimiento que requiere esta carga de trabajo.

Desencadenador

Azure Logic Apps desencadena el flujo de trabajo. Si la aplicación lógica detecta que se ha agregado un blob al contenedor, desencadena la canalización de Azure Machine Learning. Logic Apps es una buena elección para esta arquitectura de referencia, ya que detecta fácilmente los cambios en Blob Storage y proporciona un proceso sencillo para cambiar el desencadenador.

Preprocesamiento y posprocesamiento de los datos

Esta arquitectura de referencia usa secuencias de vídeo de un orangután en un árbol.

  1. Use FFmpeg para extraer el archivo de audio de la secuencia de vídeo para poder unirlo de nuevo en el vídeo de salida más adelante.
  2. Use FFmpeg para dividir el vídeo en fotogramas individuales. Los fotogramas se procesan de forma independiente y en paralelo.
  3. En este momento, puede aplicar la transferencia de estilo neuronal a cada fotograma individual en paralelo.
  4. Una vez procesados todos los fotogramas, use FFmpeg para volver a unirlos de nuevo.
  5. Por último, adjunte de nuevo el archivo de audio a la secuencia que se acaba de volver a unir.

Componentes

Detalles de la solución

Esta arquitectura de referencia está diseñada para cargas de trabajo que se desencadenan por la presencia de nuevo contenido multimedia en Azure Storage.

El procesamiento implica los siguientes pasos:

  1. Cargue el archivo de vídeo en Azure Blob Storage.
  2. El archivo de vídeo desencadena una instancia de Azure Logic Apps que envía una solicitud al punto de conexión publicado de la canalización de Azure Machine Learning.
  3. La canalización procesa el vídeo, aplica la transferencia de estilo con MPI y procesa posteriormente el vídeo.
  4. La salida se guarda de nuevo en Blob Storage cuando se completa la canalización.

Posibles casos de uso

Una empresa mediática tiene un vídeo cuyo estilo quiere cambiar para que se parezca a una pintura específica. La organización quiere aplicar este estilo a todos los fotogramas del vídeo automáticamente cuando proceda. Para más información sobre los algoritmos de transferencia de estilo neuronal, vea Image Style Transfer Using Convolutional Neural Networks (Transferencia de estilo de imagen con redes neuronales convolucionales) (PDF).

Consideraciones

Estas consideraciones implementan los pilares del marco de buena arquitectura de Azure, que es un conjunto de principios guía que se pueden usar para mejorar la calidad de una carga de trabajo. Para más información, consulte Marco de buena arquitectura de Microsoft Azure.

Eficiencia del rendimiento

La eficiencia del rendimiento es la capacidad de la carga de trabajo para escalar con el fin de satisfacer de manera eficiente las demandas que los usuarios hayan ejercido sobre ella. Para obtener más información, vea Resumen del pilar de eficiencia del rendimiento.

GPU frente a CPU

Para cargas de trabajo de aprendizaje profundo, las GPU normalmente tienen un rendimiento bastante más alto que las CPU, tanto es así que se suele necesitar un clúster de CPU que cambie de tamaño para un rendimiento comparable. Aunque puede usar solo CPU en esta arquitectura, las GPU ofrecen un perfil bastante mejorado de costo o rendimiento. Se recomienda utilizar la última instancia de NCv3 series de máquinas virtuales optimizadas para GPU.

Las GPU no están habilitadas de forma predeterminada en todas las regiones. Asegúrese de seleccionar una región que tenga GPU habilitadas. Además, las suscripciones tienen una cuota predeterminada de cero núcleos para máquinas virtuales optimizadas para GPU. Puede aumentar esta cuota si abre una solicitud de soporte técnico. Asegúrese de que la suscripción tiene una cuota suficiente para ejecutar la carga de trabajo.

Ejecución en paralelo en máquinas virtuales frente a núcleos

Al ejecutar un proceso de transferencia de estilo como un trabajo por lotes, los trabajos que se ejecutan principalmente en GPU tienen que ejecutarse en paralelo en todas las máquinas virtuales. Se admiten dos enfoques: puede crear un clúster más grande con máquinas virtuales que tienen una sola GPU o crear un clúster más pequeño mediante máquinas virtuales con muchas GPU.

Para esta carga de trabajo, estas dos opciones presentan un rendimiento comparable. El uso de menos máquinas virtuales con más GPU por máquina virtual puede ayudar a reducir el movimiento de datos. Sin embargo, el volumen de datos por trabajo para esta carga de trabajo no es muy grande, por lo que no observará demasiadas limitaciones de Blob Storage.

Paso MPI

Al crear la canalización en Azure Machine Learning, uno de los pasos utilizados para realizar el cálculo en paralelo es el paso MPI (interfaz de procesamiento de mensajes). El paso MPI le ayuda a dividir los datos uniformemente entre los nodos disponibles. El paso MPI no se ejecutará hasta que todos los nodos solicitados estén preparados. Si se produce un error en uno de los nodos o se produce un adelanto del proceso (en caso de que se trate de una máquina virtual de baja prioridad), se tendrá que ejecutar de nuevo el paso MPI.

Seguridad

La seguridad proporciona garantías contra ataques deliberados y el abuso de datos y sistemas valiosos. Para más información, consulte Introducción al pilar de seguridad. Esta sección contiene puntos a tener en cuenta para crear soluciones seguras.

Restricción de acceso a Azure Blob Storage

En esta arquitectura de referencia, Azure Blob Storage es el componente de almacenamiento principal que debe protegerse. La implementación de línea base que se muestra en el repositorio de GitHub usa las claves de la cuenta de almacenamiento para acceder a Blob Storage. Para mayor control y protección, en su lugar, considere la posibilidad de usar una firma de acceso compartido (SAS). Esto concede acceso limitado a los objetos de almacenamiento, sin necesidad de codificar de forma rígida las claves de cuenta ni de guardarlas como texto no cifrado. Este enfoque es especialmente útil porque las claves de cuenta están visibles como texto no cifrado dentro de la interfaz del diseñador de la aplicación lógica. Mediante una SAS también ayuda a asegurarse de que la cuenta de almacenamiento tiene una gobernanza corporativa adecuada y que se concede acceso solo a las personas que deben tenerlo.

Para escenarios con información más confidencial, asegúrese de que todas las claves de almacenamiento están protegidas, ya que estas claves conceden acceso total a todos los datos de entrada y salida de la carga de trabajo.

Cifrado de datos y movimiento de datos

Esta arquitectura de referencia usa la transferencia de estilo como un ejemplo de un proceso de puntuación de Batch. Para escenarios de información más confidencial, los datos del almacenamiento deben cifrarse en reposo. Al mover datos de una ubicación a la siguiente, use Seguridad de la capa de transporte (TSL) para proteger la transferencia. Para obtener más información, vea la Guía de seguridad de Azure Storage.

Protección del cálculo en una red virtual

Al implementar el clúster de proceso de Machine Learning, puede configurar el clúster para que se aprovisione dentro de una subred de una red virtual. Esta subred permite que los nodos de proceso del clúster se comuniquen de forma segura con otras máquinas virtuales.

Protección frente a actividades malintencionadas

En escenarios donde hay varios usuarios, asegúrese de que los datos confidenciales estén protegidos contra la actividad malintencionada. Si se concede acceso a otros usuarios a esta implementación para personalizar los datos de entrada, tenga en cuenta las siguientes precauciones y consideraciones:

  • Use el control de acceso basado en roles (RBAC) de Azure para limitar el acceso de los usuarios solo a los recursos que necesiten.
  • Aprovisione dos cuentas de almacenamiento independientes. Almacene los datos de entrada y salida en la primera cuenta. Los usuarios externos pueden acceder a esta cuenta. Almacene los scripts ejecutables y los archivos de registro de salida en la otra cuenta. Los usuarios externos no deben tener acceso a esta cuenta. Esta separación garantiza que los usuarios externos no puedan modificar los archivos ejecutables (para insertar código malintencionado) ni acceder a los archivos de registro, que podrían contener información confidencial.
  • Los usuarios malintencionados pueden realizar ataques de denegación de servicio distribuido en la cola de trabajos o insertar mensajes dudosos con formato incorrecto en esta cola, lo que provocaría el bloqueo del sistema o errores al quitar los errores de la cola.

Optimización de costos

La optimización de costos trata de buscar formas de reducir los gastos innecesarios y mejorar las eficiencias operativas. Para más información, vea Información general del pilar de optimización de costos.

En comparación con los componentes de almacenamiento y programación, los recursos de proceso utilizados en esta arquitectura de referencia predominan sin duda en términos de costos. Uno de los principales desafíos es paralelizar eficazmente el trabajo en un clúster de máquinas habilitadas para GPU.

El tamaño del clúster de Proceso de Azure Machine Learning puede escalarse y reducirse verticalmente de manera automática en función de los trabajos existentes en la cola. Puede habilitar el escalado automático mediante programación si establece el número mínimo y máximo de nodos.

Para el trabajo que no requiere un procesamiento inmediato, configure el escalado automático para que el estado predeterminado (mínimo) sea un clúster de cero nodos. Con esta configuración, el clúster empieza con cero nodos y solo se escala verticalmente si detecta trabajos en la cola. Si el proceso de puntuación por lotes solo se produce unas veces al día o con menos frecuencia, esta configuración supone importantes ahorros.

La escalabilidad automática podría no resultar apropiada para trabajos por lotes que se producen demasiado próximos entre sí. El tiempo que tarda un clúster en agilizarse y ralentizarse también incurre en costos, por tanto, si una carga de trabajo por lotes empieza solo unos minutos después de que el trabajo anterior termine, puede resultar más rentable mantener el clúster en ejecución entre los trabajos.

Proceso de Azure Machine Learning también admite máquinas virtuales de prioridad baja, lo que permite ejecutar el cálculo en máquinas virtuales con descuento, con la limitación de que se pueden reemplazar en cualquier momento. Las máquinas virtuales de baja prioridad son idóneas para las cargas de trabajo no críticas de puntuación por lotes.

Supervisión de trabajos por lotes

Mientras se ejecuta el trabajo, es importante supervisar el progreso y asegurarse de que funciona según lo previsto. Sin embargo, puede resultar complicado supervisar un clúster de nodos activos.

Con el fin de comprobar el estado general del clúster, vaya al servicio Machine Learning en Azure Portal para inspeccionar el estado de los nodos del clúster. Si un nodo está inactivo o un trabajo presenta algún error, los registros de errores se guardan en Blob Storage y también se puede acceder a ellos en Azure Portal.

La supervisión puede enriquecerse aún más conectando los registros a Application Insights o ejecutando procesos independientes para sondear el estado del clúster y sus trabajos.

Registro con Azure Machine Learning

Azure Machine Learning registrará automáticamente todos los procesos stdout y stderr en la cuenta de Blob Storage asociada. A menos que se especifique lo contrario, el área de trabajo de Azure Machine Learning aprovisionará automáticamente una cuenta de almacenamiento y volcará los registros en ella. También puede usar una herramienta de navegación de almacenamiento, como el Explorador de Azure Storage, que es una manera más fácil de explorar los archivos de registro.

Implementación de este escenario

Para implementar esta arquitectura de referencia, siga los pasos descritos en el repositorio de GitHub.

También puede implementar una arquitectura de puntuación por lotes para modelos de aprendizaje profundo mediante Azure Kubernetes Service. Siga los pasos descritos en este repositorio de GitHub.

Colaboradores

Microsoft mantiene este artículo. Originalmente lo escribieron los siguientes colaboradores.

Autor principal:

Para ver los perfiles no públicos de LinkedIn, inicie sesión en LinkedIn.

Pasos siguientes