Puntuación por lotes de modelos de aprendizaje profundo en AzureBatch scoring of deep learning models on Azure

Esta arquitectura de referencia muestra cómo aplicar una transferencia de estilo neuronal a un vídeo con Azure Machine Learning.This reference architecture shows how to apply neural style transfer to a video, using 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.Style transfer is a deep learning technique that composes an existing image in the style of another image. Esta arquitectura se puede generalizar para cualquier escenario que usa la puntuación de Batch con el aprendizaje profundo.This architecture can be generalized for any scenario that uses batch scoring with deep learning. Implemente esta solución.Deploy this solution.

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

Escenario: Una empresa mediática tiene un vídeo cuyo estilo quiere cambiar para que se parezca a una pintura específica.Scenario: A media organization has a video whose style they want to change to look like a specific painting. La organización quiere poder aplicar este estilo a todos los fotogramas del vídeo de manera oportuna y automática.The organization wants to be able to apply this style to all frames of the video in a timely manner and in an automated fashion. Para obtener más información acerca de los algoritmos de transferencia de estilo neuronal, consulte transferencia de estilo de imagen mediante redes neuronal de circunvolución (pdf).For more background about neural style transfer algorithms, see Image Style Transfer Using Convolutional Neural Networks (PDF).

Imagen con estilo:Style image: Vídeo de contenido/entrada:Input/content video: Vídeo de salida:Output video:
Haga clic para ver el vídeo click to view video Haga clic para ver el vídeo click to view video

Esta arquitectura de referencia está diseñada para cargas de trabajo que se desencadenan por la presencia de nuevo contenido multimedia en Azure Storage.This reference architecture is designed for workloads that are triggered by the presence of new media in Azure storage.

El procesamiento implica los siguientes pasos:Processing involves the following steps:

  1. Cargue un archivo de vídeo en Storage.Upload a video file to storage.
  2. El archivo de vídeo desencadena una aplicación lógica que envía una solicitud al punto de conexión publicado de la canalización de Azure Machine Learning.The video file triggers a Logic App to send a request to the Azure Machine Learning pipeline published endpoint.
  3. La canalización procesa el vídeo, aplica la transferencia de estilo con MPI y procesa posteriormente el vídeo.The pipeline processes the video, applies style transfer with MPI, and postprocesses the video.
  4. La salida se guarda de nuevo en Blob Storage cuando se completa la canalización.The output is saved back to blob storage once the pipeline is completed.

ArquitecturaArchitecture

Esta arquitectura consta de los siguientes componentes.This architecture consists of the following components.

ProcesoCompute

Azure machine learning servicio utiliza canalizaciones para crear secuencias de cálculo reproducibles y fáciles de administrar.Azure Machine Learning Service uses pipelines to create reproducible and easy-to-manage sequences of computation. También ofrece un destino de proceso administrado (en el que se puede ejecutar un cálculo de canalización) llamado Azure machine learning proceso para el entrenamiento, la implementación y la puntuación de los modelos de aprendizaje automático.It also offers a managed compute target (on which a pipeline computation can run) called Azure Machine Learning Compute for training, deploying, and scoring machine learning models.

AlmacenamientoStorage

BLOB Storage se usa para almacenar todas las imágenes (imágenes de entrada, imágenes de estilo e imágenes de salida).Blob storage is used to store all images (input images, style images, and output images). Azure Machine Learning Service se integra con Blob Storage de forma que los usuarios no tienen que mover manualmente datos entre las plataformas de proceso y Blob Storage.Azure Machine Learning Service integrates with Blob storage so that users do not have to manually move data across compute platforms and Blob storage. Blob Storage también es muy rentable por el rendimiento que requiere esta carga de trabajo.Blob storage is also very cost-effective for the performance that this workload requires.

Desencadenador/programaciónTrigger / scheduling

Azure Logic apps se usa para desencadenar el flujo de trabajo.Azure Logic Apps is used to trigger the workflow. Si la aplicación lógica detecta que se ha agregado un blob al contenedor, desencadena la canalización de Azure Machine Learning.When the Logic App detects that a blob has been added to the container, it triggers the Azure Machine Learning Pipeline. Logic Apps es una buena elección para esta arquitectura de referencia porque es una manera fácil de detectar los cambios en Blob Storage y proporciona un proceso sencillo para cambiar el desencadenador.Logic Apps is a good fit for this reference architecture because it's an easy way to detect changes to blob storage and provides an easy process for changing the trigger.

Procesamiento previo y posterior de los datosPreprocessing and postprocessing our data

Esta arquitectura de referencia usa secuencias de vídeo de un orangután en un árbol.This reference architecture uses video footage of an orangutan in a tree. Puede descargar el metraje desde aquí.You can download the footage from here.

  1. Use ffmpeg para extraer el archivo de audio del vídeo de vídeo, de modo que el archivo de audio se pueda volver a unir al vídeo de salida más adelante.Use FFmpeg to extract the audio file from the video footage, so that the audio file can be stitched back into the output video later.
  2. Use FFmpeg para dividir el vídeo en fotogramas individuales.Use FFmpeg to break the video into individual frames. Los fotogramas se procesarán de forma independiente, en paralelo.The frames will be processed independently, in parallel.
  3. En este momento, podemos aplicar la transferencia de estilo neuronal a cada fotograma individual en paralelo.At this point, we can apply neural style transfer to each individual frame in parallel.
  4. Una vez procesados todos los fotogramas, es necesario usar FFmpeg para volver a unirlos de nuevo.One each frame has been processed, we need to use FFmpeg to restitch the frames back together.
  5. Por último, se adjunta de nuevo el archivo de audio a la secuencia que se acaba de volver a unir.Finally we reattach the audio file to the restitched footage.

Consideraciones sobre rendimientoPerformance considerations

GPU frente a CPUGPU versus CPU

Para cargas de trabajo de aprendizaje profundo, las GPU normalmente tendrán un rendimiento bastante más alto que las CPU, en la medida en que un clúster del tamaño de las CPU suele ser necesario para obtener un rendimiento comparable.For deep learning workloads, GPUs will generally out-perform CPUs by a considerable amount, to the extent that a sizeable cluster of CPUs is usually needed to get comparable performance. Si bien existe la opción de usar solo CPU en esta arquitectura, las GPU ofrecerán un perfil bastante mejorado de costo/rendimiento.While it's an option to use only CPUs in this architecture, GPUs will provide a much better cost/performance profile. Se recomienda utilizar la última instancia de [NCv3 series]vm-sizes-gpu de máquinas virtuales optimizadas para GPU.We recommend using the latest [NCv3 series]vm-sizes-gpu of GPU optimized VMs.

Las GPU no están habilitadas de forma predeterminada en todas las regiones.GPUs are not enabled by default in all regions. Asegúrese de seleccionar una región que tenga GPU habilitadas.Make sure to select a region with GPUs enabled. Además, las suscripciones tienen una cuota predeterminada de cero núcleos para máquinas virtuales optimizadas para GPU.In addition, subscriptions have a default quota of zero cores for GPU-optimized VMs. Puede aumentar esta cuota si abre una solicitud de soporte técnico.You can raise this quota by opening a support request. Asegúrese de que la suscripción tiene una cuota suficiente para ejecutar la carga de trabajo.Make sure that your subscription has enough quota to run your workload.

Paralelizar en máquinas virtuales frente a núcleosParallelizing across VMs versus cores

Al ejecutar un proceso de transferencia de estilo como un trabajo por lotes, los trabajos que se ejecutan principalmente en GPU tendrán que ejecutarse en paralelo en todas las máquinas virtuales.When running a style transfer process as a batch job, the jobs that run primarily on GPUs will have to be parallelized across VMs. Son posibles dos enfoques: Puede crear un clúster más grande con máquinas virtuales que tengan una sola GPU o crear un clúster más pequeño con máquinas virtuales con muchas GPU.Two approaches are possible: You can create a larger cluster using VMs that have a single GPU, or create a smaller cluster using VMs with many GPUs.

Para esta carga de trabajo, estas dos opciones presentan un rendimiento comparable.For this workload, these two options will have comparable performance. El uso de menos máquinas virtuales con más GPU por máquina virtual puede ayudar a reducir el movimiento de datos.Using fewer VMs with more GPUs per VM can help to reduce data movement. Sin embargo, el volumen de datos por trabajo para esta carga de trabajo no es muy grande, por lo que no observará demasiadas limitaciones por Blob Storage.However, the data volume per job for this workload is not very big, so you won't observe much throttling by blob storage.

Paso MPIMPI step

Al crear la canalización del servicio Azure machine learning, uno de los pasos que se usan para realizar el cálculo en paralelo es el paso de MPI.When creating the Azure Machine Learning service pipeline, one of the steps used to perform parallel computation is the MPI step. El paso MPI le ayudará a dividir los datos uniformemente entre los nodos disponibles.The MPI step will help split the data evenly across the available nodes. El paso MPI no se ejecutará hasta que todos los nodos solicitados estén listos.The MPI step will not executed until all the requested nodes are ready. En caso de que se produzca un error en un nodo o se obtenga su preferencia (si se trata de una máquina virtual de prioridad baja), será necesario volver a ejecutar el paso de MPI.Should one node fail or get preempted (if it is a low-priority virtual machine), the MPI step will have to be rerun.

Consideraciones sobre la seguridadSecurity considerations

Restricción de acceso a Azure Blob StorageRestricting access to Azure blob storage

En esta arquitectura de referencia, Azure Blob Storage es el componente de almacenamiento principal que debe protegerse.In this reference architecture, Azure blob storage is the main storage component that needs to be protected. 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.The baseline deployment shown in the GitHub repo uses storage account keys to access the blob storage. Para obtener más control y protección, en su lugar, considere la posibilidad de usar una firma de acceso compartido (SAS).For further control and protection, consider using a shared access signature (SAS) instead. 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.This grants limited access to objects in storage, without needing to hard code the account keys or save them in plaintext. 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.This approach is especially useful because account keys are visible in plaintext inside of Logic App's designer interface. 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.Using an SAS also helps to ensure that the storage account has proper governance, and that access is granted only to the people intended to have it.

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.For scenarios with more sensitive data, make sure that all of your storage keys are protected, because these keys grant full access to all input and output data from the workload.

Cifrado de datos y movimiento de datosData encryption and data movement

Esta arquitectura de referencia usa la transferencia de estilo como un ejemplo de un proceso de puntuación de Batch.This reference architecture uses style transfer as an example of a batch scoring process. Para escenarios de información más confidencial, los datos del almacenamiento deben cifrarse en reposo.For more data-sensitive scenarios, the data in storage should be encrypted at rest. Cada vez que los datos se muevan de una ubicación a la siguiente, use SSL para proteger la transferencia de datos.Each time data is moved from one location to the next, use SSL to secure the data transfer. Para obtener más información, consulte la Guía de seguridad de Azure Storage.For more information, see Azure Storage security guide.

Protección del cálculo en una red virtualSecuring your computation in a virtual network

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.When deploying your Machine Learning compute cluster, you can configure your cluster to be provisioned inside a subnet of a virtual network. Esto permite que los nodos de proceso del clúster se comuniquen de forma segura con otras máquinas virtuales.This allows the compute nodes in the cluster to communicate securely with other virtual machines.

Protección contra la actividad malintencionadaProtecting against malicious activity

En escenarios donde hay varios usuarios, asegúrese de que los datos confidenciales estén protegidos contra la actividad malintencionada.In scenarios where there are multiple users, make sure that sensitive data is protected against malicious activity. Si otros usuarios obtienen acceso a esta implementación para personalizar los datos de entrada, tenga en cuenta las siguientes precauciones y consideraciones:If other users are given access to this deployment to customize the input data, take note of the following precautions and considerations:

  • Utilice RBAC para limitar el acceso de los usuarios a solo los recursos que necesitan.Use RBAC to limit users' access to only the resources they need.
  • Aprovisione dos cuentas de almacenamiento independientes.Provision two separate storage accounts. Almacene los datos de entrada y salida en la primera cuenta.Store input and output data in the first account. Los usuarios externos pueden acceder a esta cuenta.External users can be given access to this account. Almacene los scripts ejecutables y los archivos de registro de salida en la otra cuenta.Store executable scripts and output log files in the other account. Los usuarios externos no deben tener acceso a esta cuenta.External users should not have access to this account. Esto garantizará que los usuarios externos no puedan modificar ningún archivo ejecutable (para insertar código malintencionado) y no tengan acceso a los archivos de registro, que podrían contener información confidencial.This will ensure that external users cannot modify any executable files (to inject malicious code), and don't have access to log files, which could hold sensitive information.
  • Los usuarios malintencionados pueden proteger la cola de trabajos o insertar mensajes dudosos con formato incorrecto en la cola de trabajos, lo que hace que el sistema bloquee o cause errores de eliminación de la cola.Malicious users can DDoS the job queue or inject malformed poison messages in the job queue, causing the system to lock up or causing dequeuing errors.

Supervisión y registroMonitoring and logging

Supervisión de trabajos de BatchMonitoring Batch jobs

Mientras se ejecuta el trabajo, es importante supervisar el progreso y asegurarse de que todo funciona según lo previsto.While running your job, it's important to monitor the progress and make sure that things are working as expected. Sin embargo, puede resultar complicado supervisar un clúster de nodos activos.However, it can be a challenge to monitor across a cluster of active nodes.

Para comprobar el estado general del clúster, vaya a la hoja Machine Learning del Azure Portal para inspeccionar el estado de los nodos del clúster.To check the overall state of the cluster, go to the Machine Learning blade of the Azure portal to inspect the state of the nodes in the cluster. Si un nodo está inactivo o se ha producido un error en un trabajo, los registros de errores se guardan en el almacenamiento de blobs y también se puede tener acceso a ellos en el Azure Portal.If a node is inactive or a job has failed, the error logs are saved to blob storage, and are also accessible in the 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.Monitoring can be further enriched by connecting logs to Application Insights or by running separate processes to poll for the state of the cluster and its jobs.

Registro con Azure Machine LearningLogging with Azure Machine Learning

Azure Machine Learning registrará automáticamente todos los stdout/stderr en la cuenta de almacenamiento de blobs asociada.Azure Machine Learning will automatically log all stdout/stderr to the associated blob storage account. 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.Unless otherwise specified, your Azure Machine Learning workspace will automatically provision a storage account and dump your logs into it. También puede usar una herramienta de exploración de almacenamiento, como el Explorador de Storage, que ofrece una experiencia mucho más sencilla para explorar los archivos de registro.You can also use a storage navigation tool such as Storage Explorer which will provide a much easier experience for navigating log files.

Consideraciones sobre el costoCost considerations

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.Compared to the storage and scheduling components, the compute resources used in this reference architecture by far dominate in terms of costs. Uno de los principales desafíos es paralelizar eficazmente el trabajo en un clúster de máquinas habilitadas para GPU.One of the main challenges is effectively parallelizing the work across a cluster of GPU-enabled machines.

El tamaño del clúster de proceso de Azure Machine Learning se puede escalar o reducir verticalmente de forma automática en función de los trabajos de la cola.The Azure Machine Learning Compute cluster size can automatically scale up and down depending on the jobs in the queue. Puede habilitar el escalado automático mediante programación estableciendo el número mínimo y máximo de nodos.You can enable auto-scale programmatically by setting the minimum and maximum nodes.

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.For work that doesn't require immediate processing, configure auto-scale so the default state (minimum) is a cluster of zero nodes. Con esta configuración, el clúster empieza con cero nodos y solo se escala verticalmente si detecta trabajos en la cola.With this configuration, the cluster starts with zero nodes and only scales up when it detects jobs in the queue. Si el proceso de puntuación de Batch solo se produce algunas veces al día o menos, esta configuración permite obtener importantes ahorros.If the batch scoring process only happens a few times a day or less, this setting enables significant cost savings.

El escalado automático puede no resultar apropiado para trabajo por lotes que se producen demasiado próximos entre sí.Auto-scaling may not be appropriate for batch jobs that happen too close to each other. 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.The time that it takes for a cluster to spin up and spin down also incur a cost, so if a batch workload begins only a few minutes after the previous job ends, it might be more cost effective to keep the cluster running between jobs.

Azure Machine Learning Compute también admite máquinas virtuales de prioridad baja.Azure Machine Learning Compute also supports low-priority virtual machines. Esto le permite ejecutar el cálculo en máquinas virtuales con descuento, con la salvedad de que pueden tener preferencia en cualquier momento.This allows you to run your computation on discounted virtual machines, with the caveat that they may be preempted at any time. Las máquinas virtuales de baja prioridad son idóneas para las cargas de trabajo no críticas de puntuación por lotes.Low-priority virtual machines are ideal for non-critical batch scoring workloads.

Implementación de la soluciónDeploy the solution

Para implementar esta arquitectura de referencia, siga los pasos descritos en el repositorio de github.To deploy this reference architecture, follow the steps described in the GitHub repo.

Nota

También puede implementar una arquitectura de puntuación por lotes para modelos de aprendizaje profundo mediante Azure Kubernetes Service.You can also deploy a batch scoring architecture for deep learning models using the Azure Kubernetes Service. Siga los pasos descritos en este repositorio de github.Follow the steps described in this Github repo.