Batchbewertung von Deep Learning-Modellen in AzureBatch scoring of deep learning models on Azure

Diese Referenzarchitektur zeigt, wie Sie mit Azure Machine Learning die neuronale Stilübertragung auf ein Video anwenden.This reference architecture shows how to apply neural style transfer to a video, using Azure Machine Learning. Stilübertragung ist eine Deep Learning-Technik, bei der ein vorhandenes Bild im Stil eines anderen Bildes erstellt wird.Style transfer is a deep learning technique that composes an existing image in the style of another image. Diese Architektur kann generell für jedes Szenario für Batchbewertung mit Deep Learning verwendet werden.This architecture can be generalized for any scenario that uses batch scoring with deep learning. Stellen Sie diese Lösung bereit.Deploy this solution.

Architekturdiagramm für Deep Learning-Modelle mit Azure Machine Learning

Szenario: Ein Medienunternehmen möchte den Stil eines Videos so ändern, dass er dem eines bestimmten Gemäldes entspricht.Scenario: A media organization has a video whose style they want to change to look like a specific painting. Das Unternehmen möchte diesen Stil schnell und automatisiert auf alle Videoframes anwenden.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. Weitere Informationen zu Algorithmen für die neuronale Stilübertragung finden Sie unter Image Style Transfer Using Convolutional Neural Networks (Bildstilübertragung mit Convolutional Neural Networks, PDF).For more background about neural style transfer algorithms, see Image Style Transfer Using Convolutional Neural Networks (PDF).

Stilbild:Style image: Eingabe-/Inhaltsvideo:Input/content video: Ausgabevideo:Output video:
Zum Wiedergeben klicken click to view video Zur Wiedergeben klicken click to view video

Diese Referenzarchitektur ist für Workloads konzipiert, die durch das Vorhandensein neuer Medien im Azure-Speicher ausgelöst werden.This reference architecture is designed for workloads that are triggered by the presence of new media in Azure storage.

Die Verarbeitung umfasst die folgenden Schritte:Processing involves the following steps:

  1. Eine Videodatei wird in den Speicher hochgeladen.Upload a video file to storage.
  2. Die Videodatei löst für eine Logik-App das Senden einer Anforderung an den Endpunkt aus, der von der Azure Machine Learning-Pipeline veröffentlicht wird.The video file triggers a Logic App to send a request to the Azure Machine Learning pipeline published endpoint.
  3. Die Pipeline verarbeitet das Video, wendet die Stilübertragung mit MPI an und führt die Nachbearbeitung des Videos durch.The pipeline processes the video, applies style transfer with MPI, and postprocesses the video.
  4. Die Ausgabe wird wieder im Blobspeicher gespeichert, nachdem die Pipeline abgeschlossen wurde.The output is saved back to blob storage once the pipeline is completed.

ArchitectureArchitecture

Diese Architektur umfasst die folgenden Komponenten.This architecture consists of the following components.

ComputeCompute

Für Azure Machine Learning Service werden Pipelines verwendet, um reproduzierbare und einfach zu verwaltende Berechnungssequenzen zu erstellen.Azure Machine Learning Service uses pipelines to create reproducible and easy-to-manage sequences of computation. Darüber hinaus ist ein verwaltetes Computeziel mit dem Namen Azure Machine Learning Compute (auf dem eine Pipelineberechnung durchgeführt werden kann) verfügbar, mit dem Machine Learning-Modelle trainiert, bereitgestellt und bewertet werden können.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.

StorageStorage

Blob Storage wird verwendet, um alle Bilder (Eingabebilder, Stilbilder und Ausgabebilder) zu speichern.Blob storage is used to store all images (input images, style images, and output images). Azure Machine Learning Service wird mit Blobspeicher integriert, damit Benutzer Daten nicht manuell über Computeplattformen und Blobspeicher hinweg verschieben müssen.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 ist außerdem sehr kostengünstig für die Leistung, die diese Workload erfordert.Blob storage is also very cost-effective for the performance that this workload requires.

Trigger/PlanungTrigger / scheduling

Azure Logic Apps löst den Workflow aus.Azure Logic Apps is used to trigger the workflow. Wenn die Logik-App erkennt, dass dem Container ein Blob hinzugefügt wurde, löst sie die Azure Machine Learning-Pipeline aus.When the Logic App detects that a blob has been added to the container, it triggers the Azure Machine Learning Pipeline. Logic Apps passt gut zu dieser Referenzarchitektur, da mit dem Dienst Änderungen an Blob Storage einfach erkannt und Trigger leicht geändert werden können.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.

Vorabverarbeiten und Nachbearbeiten unserer DatenPreprocessing and postprocessing our data

Diese Referenzarchitektur verwendet Videomaterial von einem Orang-Utan auf einem Baum.This reference architecture uses video footage of an orangutan in a tree. Sie können das Material hier herunterladen.You can download the footage from here.

  1. Verwenden Sie FFmpeg, um die Audiodatei aus dem Videomaterial zu extrahieren, damit sie später wieder mit dem Ausgabevideo zusammengefügt werden kann.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. Teilen Sie das Video mithilfe von FFmpeg in einzelne Frames auf.Use FFmpeg to break the video into individual frames. Die Frames werden unabhängig voneinander parallel verarbeitet.The frames will be processed independently, in parallel.
  3. An diesem Punkt können wir die neuronale Stilübertragung parallel auf die einzelnen Frames anwenden.At this point, we can apply neural style transfer to each individual frame in parallel.
  4. Nachdem die einzelnen Frames verarbeitet wurden, müssen wir FFmpeg verwenden, um die Frames wieder zusammenzufügen.One each frame has been processed, we need to use FFmpeg to restitch the frames back together.
  5. Abschließend fügen wir die Audiodatei wieder an das zusammengefügte Material an.Finally we reattach the audio file to the restitched footage.

Überlegungen zur LeistungPerformance considerations

Vergleich von GPU und CPUGPU versus CPU

Bei Deep Learning-Workloads bieten GPUs eine deutlich bessere Leistung als CPUs, sodass in der Regel ein großer Cluster von CPUs benötigt wird, um eine vergleichbare Leistung zu erzielen.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. Obwohl die Option besteht, in dieser Architektur nur CPUs zu verwenden, bieten GPUs ein viel besseres Preis-Leistungs-Verhältnis.While it's an option to use only CPUs in this architecture, GPUs will provide a much better cost/performance profile. Es wird empfohlen, die neueste GPU-optimierte VM-Größe (NCv3-Serie) zu verwenden.We recommend using the latest [NCv3 series]vm-sizes-gpu of GPU optimized VMs.

GPUs sind nicht in allen Regionen standardmäßig aktiviert.GPUs are not enabled by default in all regions. Wählen Sie deshalb eine Region aus, in der GPUs aktiviert sind.Make sure to select a region with GPUs enabled. Darüber hinaus haben Abonnements ein Standardkontingent von null Kernen für GPU-optimierte VMs.In addition, subscriptions have a default quota of zero cores for GPU-optimized VMs. Sie können dieses Kontingent erhöhen, indem Sie eine Supportanfrage stellen.You can raise this quota by opening a support request. Stellen Sie sicher, dass Ihr Abonnement über ausreichend Kontingent verfügt, um Ihre Workload auszuführen.Make sure that your subscription has enough quota to run your workload.

Vergleich des Parallelisierens auf VMs und KernenParallelizing across VMs versus cores

Wenn eine Stilübertragung als Batchauftrag ausgeführt wird, müssen die Aufträge, die hauptsächlich auf GPUs ausgeführt werden, über VMs hinweg parallelisiert werden.When running a style transfer process as a batch job, the jobs that run primarily on GPUs will have to be parallelized across VMs. Zwei Ansätze sind möglich: Sie können einen größeren Cluster aus virtuellen Computern mit einer einzelnen GPU oder einen kleineren Cluster aus virtuellen Computern mit vielen GPUs erstellen.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.

Die beiden Optionen bieten für diese Workload eine vergleichbare Leistung.For this workload, these two options will have comparable performance. Die Verwendung von weniger VMs mit mehr GPUs pro VM kann dazu beitragen, die Datenverschiebung zu reduzieren.Using fewer VMs with more GPUs per VM can help to reduce data movement. Das Datenvolumen pro Auftrag für diese Workload ist jedoch nicht sehr groß, sodass Blob Storage keine umfangreiche Drosselung vornehmen wird.However, the data volume per job for this workload is not very big, so you won't observe much throttling by blob storage.

MPI-SchrittMPI step

Beim Erstellen der Pipeline in Azure Machine Learning Service ist einer der Schritte zum Durchführen der parallelen Berechnung der MPI-Schritt.When creating the Azure Machine Learning service pipeline, one of the steps used to perform parallel computation is the MPI step. Im MPI-Schritt werden die Daten gleichmäßig auf die verfügbaren Knoten aufgeteilt.The MPI step will help split the data evenly across the available nodes. Der MPI-Schritt wird erst ausgeführt, wenn alle angeforderten Knoten bereit sind.The MPI step will not executed until all the requested nodes are ready. Falls ein Knoten ausfällt oder vorzeitig entfernt wird (bei einem virtuellen Computer mit niedriger Priorität), muss der MPI-Schritt erneut ausgeführt werden.Should one node fail or get preempted (if it is a low-priority virtual machine), the MPI step will have to be rerun.

SicherheitshinweiseSecurity considerations

Einschränken des Zugriffs auf Azure Blob StorageRestricting access to Azure blob storage

In dieser Referenzarchitektur ist Azure Blob Storage die wichtigste Speicherkomponente, die geschützt werden muss.In this reference architecture, Azure blob storage is the main storage component that needs to be protected. Die im GitHub-Repository angezeigte Baselinebereitstellung verwendet Speicherkontoschlüssel für den Zugriff auf Blob Storage.The baseline deployment shown in the GitHub repo uses storage account keys to access the blob storage. Für noch mehr Kontrolle und Schutz sollten Sie stattdessen Shared Access Signatur (SAS) verwenden.For further control and protection, consider using a shared access signature (SAS) instead. Dadurch wird eingeschränkter Zugriff auf die gespeicherten Objekte gewährt, ohne dass die Kontoschlüssel hartcodiert oder im Klartext gespeichert werden müssen.This grants limited access to objects in storage, without needing to hard code the account keys or save them in plaintext. Dieser Ansatz ist besonders nützlich, weil Kontoschlüssel im Klartext der Logik-App-Designerschnittstelle sichtbar sind.This approach is especially useful because account keys are visible in plaintext inside of Logic App's designer interface. Mit SAS können Sie außerdem sicherstellen, dass das Speicherkonto über eine ordnungsgemäße Governance verfügt und der Zugriff nur ausgewählten Personen gewährt wird.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.

Stellen Sie in Szenarien mit sensibleren Daten sicher, dass alle Ihre Speicherschlüssel geschützt sind, weil diese Schlüssel den Vollzugriff auf alle Ein- und Ausgabedaten der Workload ermöglichen.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.

Datenverschlüsselung und DatenverschiebungData encryption and data movement

Diese Referenzarchitektur verwendet Stilübertragung als Beispiel für einen Batchbewertungsvorgang.This reference architecture uses style transfer as an example of a batch scoring process. Für Szenarien mit noch sensibleren Daten sollten die gespeicherten Daten im Ruhezustand verschlüsselt werden.For more data-sensitive scenarios, the data in storage should be encrypted at rest. Sichern Sie die Datenübertragung jedes Mal mit SSL, wenn Daten von einem Ort an einen anderen verschoben werden.Each time data is moved from one location to the next, use SSL to secure the data transfer. Weitere Informationen finden Sie im Azure Storage-Sicherheitsleitfaden.For more information, see Azure Storage security guide.

Schützen Ihrer Berechnung in einem virtuellen NetzwerkSecuring your computation in a virtual network

Beim Bereitstellen Ihres Machine Learning Compute-Clusters können Sie diesen so konfigurieren, dass er im Subnetz eines virtuellen Netzwerks bereitgestellt wird.When deploying your Machine Learning compute cluster, you can configure your cluster to be provisioned inside a subnet of a virtual network. Auf diese Weise können die Computeknoten im Cluster sicher mit anderen virtuellen Computern kommunizieren.This allows the compute nodes in the cluster to communicate securely with other virtual machines.

Schützen vor schädlichen AktivitätenProtecting against malicious activity

Stellen Sie in Szenarien mit mehreren Benutzern sicher, dass sensible Daten vor schädlichen Aktivitäten geschützt sind.In scenarios where there are multiple users, make sure that sensitive data is protected against malicious activity. Wenn Sie anderen Benutzern Zugriff auf diese Bereitstellung gewähren, um die Eingabedaten anzupassen, beachten Sie die folgenden Vorsichtsmaßnahmen und Überlegungen:If other users are given access to this deployment to customize the input data, take note of the following precautions and considerations:

  • Verwenden Sie die rollenbasierte Zugriffssteuerung (RBAC), um den Zugriff von Benutzern auf die Ressourcen zu beschränken, die sie benötigen.Use RBAC to limit users' access to only the resources they need.
  • Stellen Sie zwei separate Speicherkonten bereit.Provision two separate storage accounts. Speichern Sie Eingabe-und Ausgabedaten im ersten Konto.Store input and output data in the first account. Externen Benutzern kann Zugriff auf dieses Konto gewährt werden.External users can be given access to this account. Speichern Sie ausführbare Skripts und ausgegebene Protokolldateien im anderen Konto.Store executable scripts and output log files in the other account. Externe Benutzer sollten keinen Zugriff auf dieses Konto haben.External users should not have access to this account. So wird sichergestellt, dass externe Benutzer keine ausführbaren Dateien ändern (um schädlichen Code einzufügen) und keinen Zugriff auf Protokolldateien haben, die eventuell vertrauliche Informationen enthalten.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.
  • Böswillige Benutzer können einen DDoS-Angriff auf die Auftragswarteschlange starten oder ungültige, nicht verarbeitbare Nachrichten in die Auftragswarteschlange einfügen und dadurch Systemsperren und Fehler beim Entfernen aus der Warteschlange verursachen.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.

Überwachung und ProtokollierungMonitoring and logging

Überwachen von Batch-AufträgenMonitoring Batch jobs

Beim Ausführen Ihres Auftrags ist es wichtig, den Fortschritt zu überwachen und zu überprüfen, ob alles wie erwartet funktioniert.While running your job, it's important to monitor the progress and make sure that things are working as expected. Es kann jedoch eine Herausforderung sein, über einen Cluster von aktiven Knoten hinweg zu überwachen.However, it can be a challenge to monitor across a cluster of active nodes.

Um den Gesamtzustand des Clusters zu überprüfen, können Sie im Azure-Portal zum Blatt „Machine Learning“ navigieren und den Zustand der Knoten im Cluster untersuchen.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. Wenn ein Knoten inaktiv oder ein Auftrag fehlerhaft ist, werden die Fehlerprotokolle in Blob Storage gespeichert und sind auch im Azure-Portal verfügbar.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.

Die Überwachung kann durch das Verbinden von Protokollen mit Application Insights oder durch das Ausführen separater Prozesse zum Abrufen des Zustands des Clusters und seiner Aufträge verbessert werden.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.

Protokollieren mit Azure Machine LearningLogging with Azure Machine Learning

Azure Machine Learning protokolliert automatisch alle stdout/stderr-Ereignisse im entsprechenden Blob Storage-Konto.Azure Machine Learning will automatically log all stdout/stderr to the associated blob storage account. Sofern nicht anders angegeben, stellt Ihr Azure Machine Learning-Arbeitsbereich automatisch ein Speicherkonto bereit und legt darin eine Sicherung Ihrer Protokolle an.Unless otherwise specified, your Azure Machine Learning workspace will automatically provision a storage account and dump your logs into it. Sie können auch Speichernavigationstools verwenden, z.B. den Azure Storage-Explorer, um die Navigation durch Protokolldateien erheblich zu vereinfachen.You can also use a storage navigation tool such as Storage Explorer which will provide a much easier experience for navigating log files.

KostenbetrachtungCost considerations

Im Vergleich zu den Speicher- und Planungskomponenten fallen für die in dieser Referenzarchitektur verwendeten Computeressourcen bei Weitem die meisten Kosten an.Compared to the storage and scheduling components, the compute resources used in this reference architecture by far dominate in terms of costs. Eine der größten Herausforderungen besteht darin, Aufträge über ein Cluster von GPU-fähigen VMs hinweg effektiv zu parallelisieren.One of the main challenges is effectively parallelizing the work across a cluster of GPU-enabled machines.

Die Größe des Azure Machine Learning Compute-Clusters kann je nach Auftrag in der Warteschlange automatisch zentral hoch- und herunterskaliert werden.The Azure Machine Learning Compute cluster size can automatically scale up and down depending on the jobs in the queue. Sie können die automatische Skalierung programmgesteuert aktivieren, indem Sie die minimalen und maximalen Knoten festlegen.You can enable auto-scale programmatically by setting the minimum and maximum nodes.

Konfigurieren Sie für Aufträge, die nicht direkt verarbeitet werden müssen, die automatische Skalierung so, dass der Standardzustand (Minimum) ein Cluster von null Knoten ist.For work that doesn't require immediate processing, configure auto-scale so the default state (minimum) is a cluster of zero nodes. Bei dieser Konfiguration hat der Cluster anfangs null Knoten. Er skaliert nur dann zentral hoch, wenn er Aufträge in der Warteschlange erkennt.With this configuration, the cluster starts with zero nodes and only scales up when it detects jobs in the queue. Wenn die Batchbewertung maximal einige Male am Tag ausgeführt wird, können Sie mithilfe dieser Einstellung erheblich Kosten sparen.If the batch scoring process only happens a few times a day or less, this setting enables significant cost savings.

Die automatische Skalierung ist ggf. nicht für Batchaufträge geeignet, die zeitlich zu nahe beieinander liegen.Auto-scaling may not be appropriate for batch jobs that happen too close to each other. Für die benötigte Zeit zum Erstellen und Entfernen eines Cluster fallen ebenfalls Kosten an. Das heißt, wenn eine Batchworkload nur wenige Minuten nach dem Ende des vorherigen Auftrags startet, ist es ggf. kostengünstiger den Cluster permanent, also auch zwischen den Aufträgen, auszuführen.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 unterstützt auch virtuelle Computer mit niedriger Priorität.Azure Machine Learning Compute also supports low-priority virtual machines. Auf diese Weise können Sie Ihre Berechnung auf virtuellen Computern ausführen, für die ein Rabatt gilt. Der Nachteil ist aber, dass diese jederzeit vorzeitig entfernt werden können.This allows you to run your computation on discounted virtual machines, with the caveat that they may be preempted at any time. Virtuelle Computer mit niedriger Priorität sind für nicht kritische Batchbewertungsworkloads ideal geeignet.Low-priority virtual machines are ideal for non-critical batch scoring workloads.

Bereitstellen der LösungDeploy the solution

Befolgen Sie die Schritte im GitHub-Repository, um diese Referenzarchitektur bereitzustellen.To deploy this reference architecture, follow the steps described in the GitHub repo.

Hinweis

Sie können auch eine Batchbewertungsarchitektur für Deep Learning-Modelle bereitstellen, indem Sie den Azure Kubernetes Service verwenden.You can also deploy a batch scoring architecture for deep learning models using the Azure Kubernetes Service. Führen Sie die Schritte aus, die in diesem GitHub-Repository beschrieben werden.Follow the steps described in this Github repo.