Deze referentiearchitectuur laat zien hoe u batchgewijs scoren uitvoert met R-modellen met behulp van Azure Batch. Azure Batch werkt goed met intrinsiek parallelle workloads en omvat taakplanning en rekenbeheer. Batchdeductie (score) wordt veel gebruikt om klanten te segmenteren, verkoop te voorspellen, klantgedrag te voorspellen, onderhoud te voorspellen of de cyberbeveiliging te verbeteren.
Een Visio-bestand van deze architectuur downloaden.
Werkstroom
Deze architectuur bestaat uit de volgende onderdelen.
Azure Batch voert prognosegeneratietaken parallel uit op een cluster met virtuele machines. Voorspellingen worden gedaan met behulp van vooraf getrainde machine learning-modellen die zijn geïmplementeerd in R. Azure Batch kunt het aantal VM's automatisch schalen op basis van het aantal taken dat naar het cluster is verzonden. Op elk knooppunt wordt een R-script uitgevoerd in een Docker-container om gegevens te scoren en prognoses te genereren.
Azure Blob Storage slaat de invoergegevens, de vooraf getrainde machine learning-modellen en de prognoseresultaten op. Het biedt kosteneffectieve opslag voor de prestaties die deze workload vereist.
Azure Container Instances biedt serverloze rekenkracht op aanvraag. In dit geval wordt een containerinstantie volgens een schema geïmplementeerd om de Batch-taken te activeren die de prognoses genereren. De Batch-taken worden geactiveerd vanuit een R-script met behulp van het pakket doAzureParallel . Het containerexemplaar wordt automatisch afgesloten zodra de taken zijn voltooid.
Azure Logic Apps activeert de hele werkstroom door de containerinstanties volgens een schema te implementeren. Met een Azure Container Instances-connector in Logic Apps kan een exemplaar worden geïmplementeerd op een reeks trigger-gebeurtenissen.
Onderdelen
Oplossingsdetails
Hoewel het volgende scenario is gebaseerd op prognoses voor de verkoop van winkels, kan de architectuur ervan worden gegeneraliseerd voor elk scenario waarvoor het genereren van voorspellingen op grotere schaal met behulp van R-modellen vereist is. Een referentie-implementatie voor deze architectuur is beschikbaar op GitHub.
Potentiële gebruikscases
Een supermarktketen moet de verkoop van producten in het komende kwartaal voorspellen. De prognose stelt het bedrijf in staat om de toeleveringsketen beter te beheren en ervoor te zorgen dat het kan voldoen aan de vraag naar producten in elke winkel. Het bedrijf werkt de prognoses elke week bij naarmate er nieuwe verkoopgegevens van de vorige week beschikbaar komen en de productmarketingstrategie voor het volgende kwartaal is ingesteld. Er worden kwantieprognoses gegenereerd om de onzekerheid van de afzonderlijke verkoopprognoses te schatten.
De verwerking omvat de volgende stappen:
Een logische Azure-app activeert het proces voor het genereren van prognoses eenmaal per week.
De logische app start een Azure Container Instance waarop de Docker-container scheduler wordt uitgevoerd, waarmee de scoretaken in het Batch-cluster worden geactiveerd.
Scoretaken worden parallel uitgevoerd op de knooppunten van het Batch-cluster. Elk knooppunt:
Haalt de Docker-installatiekopie van de werkrol op en start een container.
Leest invoergegevens en vooraf getrainde R-modellen uit Azure Blob Storage.
Hiermee worden de gegevens gescored om prognoses te maken.
Schrijft prognoseresultaten naar blobopslag.
In de volgende afbeelding ziet u de geraamde verkoop voor vier producten (SKU's) in één winkel. De zwarte lijn is de verkoopgeschiedenis, de stippellijn is de mediaanprognose (q50), de roze band vertegenwoordigt het 25e en 75e percentiel en de blauwe band vertegenwoordigt het 50e en 95e percentiel.
Overwegingen
Met deze overwegingen worden de pijlers van het Azure Well-Architected Framework geïmplementeerd. Dit is een set richtlijnen die kunnen worden gebruikt om de kwaliteit van een workload te verbeteren. Zie Microsoft Azure Well-Architected Framework voor meer informatie.
Prestaties
Implementatie in containers
Met deze architectuur worden alle R-scripts uitgevoerd in Docker-containers . Het gebruik van containers zorgt ervoor dat de scripts elke keer in een consistente omgeving worden uitgevoerd, met dezelfde R-versie en pakketversies. Afzonderlijke Docker-installatiekopieën worden gebruikt voor de planner- en werkcontainers, omdat elk een andere set R-pakketafhankelijkheden heeft.
Azure Container Instances biedt een serverloze omgeving om de scheduler-container uit te voeren. De scheduler-container voert een R-script uit dat de afzonderlijke scoretaken activeert die worden uitgevoerd op een Azure Batch-cluster.
Op elk knooppunt van het Batch-cluster wordt de werkcontainer uitgevoerd, waarmee het scorescript wordt uitgevoerd.
De workload parallelliseren
Wanneer u batchgewijs gegevens scoren met R-modellen, moet u overwegen hoe u de workload parallelliseert. De invoergegevens moeten worden gepartitioneerd, zodat de scorebewerking kan worden verdeeld over de clusterknooppunten. Probeer verschillende benaderingen om de beste keuze te vinden voor het distribueren van uw workload. Overweeg per geval het volgende:
- Hoeveel gegevens kunnen worden geladen en verwerkt in het geheugen van één knooppunt.
- De overhead van het starten van elke batchtaak.
- De overhead van het laden van de R-modellen.
In het scenario dat voor dit voorbeeld wordt gebruikt, zijn de modelobjecten groot en duurt het slechts enkele seconden om een prognose voor afzonderlijke producten te genereren. Daarom kunt u de producten groepeer en één Batch-taak per knooppunt uitvoeren. Een lus binnen elke taak genereert achtereenvolgens prognoses voor de producten. Deze methode is de meest efficiënte manier om deze specifieke workload te parallelliseren. Hiermee voorkomt u de overhead van het starten van veel kleinere Batch-taken en het herhaaldelijk laden van de R-modellen.
Een alternatieve benadering is om één Batch-taak per product te activeren. Azure Batch vormt automatisch een wachtrij met taken en verzendt deze om op het cluster te worden uitgevoerd zodra er knooppunten beschikbaar zijn. Gebruik automatisch schalen om het aantal knooppunten in het cluster aan te passen, afhankelijk van het aantal taken. Deze aanpak is handig als het relatief lang duurt om elke scorebewerking te voltooien, waardoor de overhead van het starten van de taken en het opnieuw laden van de modelobjecten wordt rechtvaardigd. Deze aanpak is ook eenvoudiger te implementeren en biedt u de flexibiliteit om automatisch schalen te gebruiken, een belangrijke overweging als de grootte van de totale werkbelasting niet van tevoren bekend is.
Azure Batch-taken bewaken
Controleer en beëindig Batch-taken vanuit het deelvenster Taken van het Batch-account in de Azure Portal. Bewaak het batchcluster, inclusief de status van afzonderlijke knooppunten, vanuit het deelvenster Pools .
Logboekregistratie met doAzureParallel
Het doAzureParallel-pakket verzamelt automatisch logboeken van alle stdout/stderr voor elke taak die op Azure Batch wordt ingediend. Deze logboeken zijn te vinden in het opslagaccount dat tijdens de installatie is gemaakt. Als u ze wilt weergeven, gebruikt u een hulpprogramma voor opslagnavigatie, zoals Azure Storage Explorer of Azure Portal.
Als u tijdens de ontwikkeling snel fouten wilt opsporen in Batch-taken, bekijkt u de logboeken in uw lokale R-sessie. Zie Trainingsuitvoeringen configureren en verzenden voor meer informatie.
Kostenoptimalisatie
Kostenoptimalisatie gaat over het zoeken naar manieren om onnodige uitgaven te verminderen en de operationele efficiëntie te verbeteren. Zie Overzicht van de pijler kostenoptimalisatie voor meer informatie.
De rekenresources die in deze referentiearchitectuur worden gebruikt, zijn de duurste onderdelen. Voor dit scenario wordt een cluster met een vaste grootte gemaakt wanneer de taak wordt geactiveerd en vervolgens afgesloten nadat de taak is voltooid. Er worden alleen kosten in rekening gebracht wanneer de clusterknooppunten worden gestart, uitgevoerd of afgesloten. Deze benadering is geschikt voor een scenario waarin de rekenresources die nodig zijn om de prognoses te genereren, relatief constant blijven van taak tot taak.
In scenario's waarin de hoeveelheid rekenkracht die nodig is om de taak te voltooien niet van tevoren bekend is, is het mogelijk beter om automatisch schalen te gebruiken. Met deze benadering wordt de grootte van het cluster omhoog of omlaag geschaald, afhankelijk van de grootte van de taak. Azure Batch ondersteunt een reeks formules voor automatisch schalen, die u kunt instellen bij het definiëren van het cluster met behulp van de doAzureParallel-API.
In sommige scenario's kan de tijd tussen taken te kort zijn om het cluster af te sluiten en te starten. In deze gevallen moet het cluster tussen taken worden uitgevoerd, indien van toepassing.
Azure Batch en doAzureParallel ondersteunen het gebruik van VM's met lage prioriteit. Deze VM's worden geleverd met een aanzienlijke korting, maar het risico dat ze worden aangepast door andere workloads met een hogere prioriteit. Daarom wordt het gebruik van VM's met lage prioriteit niet aanbevolen voor kritieke productieworkloads. Ze zijn echter handig voor experimentele of ontwikkelworkloads.
Dit scenario implementeren
Als u deze referentiearchitectuur wilt implementeren, volgt u de stappen die worden beschreven in de GitHub-opslagplaats .
Medewerkers
Dit artikel wordt onderhouden door Microsoft. Het is oorspronkelijk geschreven door de volgende inzenders.
Hoofdauteur:
- Angus Taylor | Senior Datawetenschapper
Als u niet-openbare LinkedIn-profielen wilt zien, meldt u zich aan bij LinkedIn.