Den här artikeln beskriver en arkitektur för många modeller som använder Azure Machine Learning och beräkningskluster. Det ger mångsidighet för situationer som kräver komplex konfiguration.
Arkitektur
Ladda ned en Visio-fil med den här arkitekturen.
Dataflöde
Följande dataflöde motsvarar föregående diagram:
Datainmatning:
Azure Data Factory hämtar data från en källdatabas och kopierar dem till Azure Data Lake Storage.
Data lagras sedan i ett Machine Learning-datalager som en tabelldatauppsättning.
Modellträningspipeline:
Förbered data:
Träningspipelinen hämtar data från datalagret och transformerar dem efter behov.
Data grupperas i datauppsättningar för träning av modellerna.
Train-modeller:
Pipelinen tränar modeller för alla datauppsättningar som skapas under dataförberedelserna.
Den använder klassen
ParallelRunStep
för att träna flera modeller parallellt.När modellerna har tränats registrerar pipelinen modellerna och deras testmått i Machine Learning.
Modellhöjningspipeline:
Utvärdera modeller:
Marknadsföringspipelinen utvärderar de tränade modellerna innan de flyttas till produktion.
En DevOps-pipeline tillämpar affärslogik för att avgöra om en modell uppfyller kriterierna för distribution. Den kan till exempel kontrollera att noggrannheten för testdata överskrider 80%.
Registrera modeller:
- Marknadsföringspipelinen registrerar kvalificerande modeller i machine learning-arbetsytan för produktion.
Modell för batchbedömningspipeline:
Förbered data:
Pipelinen för batchbedömning hämtar data från datalagret och transformerar varje fil efter behov.
Data grupperas i datauppsättningar för bedömning.
Poängmodeller:
Pipelinen använder klassen
ParallelRunStep
för att poängsätta flera datauppsättningar parallellt.Den identifierar lämplig modell för varje datauppsättning i Machine Learning genom att söka i modelltaggar.
Modellen laddas ned och används för att poängsätta datamängden.
Klassen
DataTransferStep
skriver tillbaka resultatet till Azure Data Lake.Förutsägelser skickas från Azure Data Lake till Synapse SQL för servering.
Den hanterade onlineslutpunkten ger poängsättning i realtid.
På grund av det stora antalet modeller läses de in på begäran i stället för förinstallerade.
Resultat:
Förutsägelser: Pipelinen för batchbedömning sparar förutsägelser till Synapse SQL.
Mått: Microsoft Power BI ansluter till modellförutsägelserna för att hämta och aggregera resultat för presentationen.
Komponenter
Azure Data Factory är en molnbaserad dataintegreringstjänst som gör det möjligt att skapa datadrivna arbetsflöden för att orkestrera och automatisera dataflytt och transformering. I den här arkitekturen matar Azure Data Factory in företagsdata och metadata från tredje part i Data Lake Storage.
Azure DevOps är en uppsättning utvecklartjänster som tillhandahåller omfattande livscykelhantering för program och infrastruktur. Den innehåller verktyg för ci/CD-pipelines (kontinuerlig integrering och kontinuerlig leverans), arbetsspårning, källkontroll, byggpipelines, pakethantering och testlösningar. I den här arkitekturen används Azure DevOps för att hantera CI/CD-pipelines för att automatisera modellhöjning, testning och distribution till produktionsmiljöer.
Azure SQL Database är en fullständigt hanterad relationsmolndatabas. I den här arkitekturen används SQL Database för att lagra strukturerade data som kan efterfrågas eller analyseras som en del av datapipelinen.
Azure Stream Analytics är en analystjänst i realtid och en komplex händelsebearbetningstjänst som är utformad för att analysera och bearbeta stora volymer av snabbuppspelningsdata. I den här arkitekturen kan Stream Analytics användas för databearbetning i realtid.
Azure Synapse Analytics är en analystjänst som förenar dataintegrering, lagring av företagsdata och stordataanalys. Den används i den här arkitekturen för att lagra batchbedömningsresultat. Den här metoden möjliggör effektiv frågekörning och hämtning av förutsägelser för rapportering eller analys. Synapse SQL används för att hantera förutsägelser till underordnade program och aktivera visualiseringsverktyg som Power BI för att få åtkomst till aggregerade resultat.
Data Lake Storage är en mycket skalbar och säker lagringstjänst för analysarbetsbelastningar med höga prestanda. I den här arkitekturen fungerar Data Lake Storage som det primära lagringslagret för rådata och transformerade datauppsättningar och för lagring av resultat från bedömningspipelines.
Machine Learning är en maskininlärningstjänst i företagsklass för att snabbt skapa och distribuera modeller. Det ger användare på alla kompetensnivåer verktyg som en designer med låg kod, automatiserad maskininlärning och en värdbaserad Jupyter Notebook-miljö som stöder olika integrerade utvecklingsmiljöer. I den här arkitekturen används Machine Learning för att hantera livscykeln för modeller, inklusive träning, utvärdering och distribution. Den samordnar även pipelines för uppgifter som träning, befordran och bedömning.
Hanterade onlineslutpunkter är en funktion i Machine Learning som används för realtidsbedömning. I den här arkitekturen hjälper en hanterad onlineslutpunkt till att tillhandahålla ett skalbart och säkert sätt att hantera förutsägelser i nära realtid genom att läsa in maskininlärningsmodeller på begäran.
Klassen ParallelRunStep är en komponent i Machine Learning-pipelines som används för att köra parallella jobb effektivt. Det möjliggör skalbar bearbetning av batchuppgifter, till exempel träning eller bedömning av många modeller samtidigt. I den här arkitekturen används klassen
ParallelRunStep
i både pipelines för modellträning och batchbedömning för att träna eller poängsätta flera datauppsättningar eller modeller parallellt, vilket avsevärt minskar körningen av dessa åtgärder.
Power BI- är en samling programvarutjänster, appar och anslutningsappar som fungerar tillsammans för att omvandla orelaterade datakällor till sammanhängande, visuellt uppslukande och interaktiva insikter. I den här arkitekturen ansluter Power BI till Synapse SQL för att hämta och presentera förutsägelser och aggregerade mått via interaktiva instrumentpaneler.
Alternativ
Du kan använda valfri databas för källdata.
Du kan använda Azure Kubernetes Service (AKS) för slutsatsdragning i realtid i stället för hanterade onlineslutpunkter. Med AKS kan du distribuera containerbaserade modeller och ge mer kontroll över distributionen. De här funktionerna möjliggör dynamisk inläsning av modeller för att hantera inkommande begäranden utan att förbruka resurser.
Information om scenario
Många maskininlärningsproblem är för komplexa för att en enskild maskininlärningsmodell ska kunna lösa. Oavsett om det handlar om att förutsäga försäljning för varje objekt i varje butik eller modelleringsunderhåll för hundratals oljebrunnar kan en modell för varje instans förbättra resultatet på många maskininlärningsproblem. Det här många modellmönstret är vanligt inom en mängd olika branscher och har många verkliga användningsfall. Med hjälp av Machine Learning kan en pipeline för många modeller från slutpunkt till slutpunkt omfatta modellträning, batchinferensdistribution och distribution i realtid.
En lösning för många modeller kräver en annan datauppsättning för varje modell under träning och bedömning. Om uppgiften till exempel är att förutsäga försäljning för varje objekt i varje lager motsvarar varje datauppsättning en unik kombination av objektlager.
Potentiella användningsfall
Retail: En livsmedelsbutikskedja måste skapa en separat intäktsprognosmodell för varje butik och artikel, med totalt över 1 000 modeller för varje butik.
Leveranskedja: För varje kombination av lager och produkt måste ett distributionsföretag optimera inventeringen.
Restaurants: En kedja med tusentals franchisetagare måste prognostisera efterfrågan för varje franchise.
Att tänka på
Dessa överväganden implementerar grundpelarna i Azure Well-Architected Framework, som är en uppsättning vägledande grundsatser som du kan använda för att förbättra kvaliteten på en arbetsbelastning. Mer information finns i Well-Architected Framework.
Datapartitioner: Att dela upp data i partitioner är viktigt för implementeringen av många modeller. Om du vill ha en modell för varje lager innehåller varje datauppsättning alla data för ett enda lager, så det finns lika många datauppsättningar som det finns lager. Om du vill modellera produkter efter butik finns det en datauppsättning för varje kombination av produkt och lagring. Beroende på källdataformatet kan det vara enkelt att partitionera data, eller så kan det kräva omfattande datablandning och transformering. Spark och Synapse SQL skalas bra för dessa uppgifter, medan Python Pandas inte gör det eftersom det körs på en enda nod och process.
Modellhantering: Tränings- och bedömningspipelines identifierar och anropar rätt modell för varje datauppsättning. De gör detta genom att beräkna taggar som kännetecknar datauppsättningen och sedan använda taggarna för att hitta matchande modell. Taggarna identifierar datapartitionsnyckeln och modellversionen och kan även ge annan information.
Välj rätt arkitektur:
Spark är lämpligt när din träningspipeline har komplexa datatransformerings- och grupperingskrav. Den tillhandahåller flexibla metoder för delning och gruppering för att gruppera data efter kombinationer av egenskaper, till exempel produktlager eller platsprodukt. Resultaten kan placeras i en Spark DataFrame för användning i efterföljande steg.
Om dina maskininlärningstränings- och bedömningsalgoritmer är enkla kan du kanske partitionera data med bibliotek som scikit-learn. I det här scenariot kanske du inte behöver Spark, så du kan undvika eventuella komplexiteter som uppstår när du installerar Azure Synapse Analytics eller Azure Databricks.
Om dina träningsdatauppsättningar redan har skapats, till exempel när de lagras i separata filer eller ordnas i distinkta rader eller kolumner, behöver du inte Spark för komplexa datatransformeringar.
Machine Learning- och beräkningsklusterlösningen ger mångsidighet för situationer som kräver komplex konfiguration. Du kan till exempel använda en anpassad Docker-container, ladda ned filer eller ladda ned förtränad modeller. Djupinlärning med visuellt innehåll och naturligt språk är exempel på program som kan kräva den här mångsidigheten.
Separata modelllagringsplatser: Om du vill skydda de distribuerade modellerna bör du överväga att lagra dem på en egen lagringsplats som tränings- och testpipelines inte kommer åt.
ParallelRunStep-klass: Klassen Python ParallelRunStep är ett kraftfullt alternativ för att köra många modeller för träning och slutsatsdragning. Den kan partitionera dina data på olika sätt och sedan tillämpa maskininlärningsskriptet på delar av partitionen parallellt. Precis som andra former av Machine Learning-utbildning kan du ange en anpassad träningsmiljö som har åtkomst till Python Package Index-paket (PyPI) eller en mer avancerad anpassad Docker-miljö för konfigurationer som kräver mer än standard-PyPI. Det finns många processorer och GPU:er att välja mellan.
Online-slutsatsdragning: Om en pipeline läser in och cachelagrar alla modeller från början kan modellerna tömma containerns minne. Läs därför in modellerna på begäran i körningsmetoden, även om det kan öka svarstiden något.
Kostnadsoptimering
Kostnadsoptimering fokuserar på sätt att minska onödiga utgifter och förbättra drifteffektiviteten. Mer information finns i Checklista för designgranskning för kostnadsoptimering.
För att bättre förstå kostnaden för att köra det här scenariot på Azure använder du priskalkylatorn . Du bör anta att:
Serveringsmodellerna tränas dagligen för att hålla dem aktuella.
Du behöver cirka 30 minuter för att bearbeta en datauppsättning som innehåller 40 miljoner rader med 10 000 unika kombinationer av butiksprodukter. Datauppsättningen tränas på Azure Databricks med hjälp av ett kluster som etableras med 12 virtuella datorer (VM) som använder Ls16_v2 instanser. Batchbedömning med samma uppsättning data tar cirka 20 minuter.
Du kan använda Machine Learning för att distribuera inferens i realtid. Beroende på din begärandevolym väljer du en lämplig typ av virtuell dator och klusterstorlek.
Ett AKS-kluster skalar automatiskt efter behov, vilket resulterar i ett genomsnitt på två aktiva noder varje månad.
Om du vill se hur priserna skiljer sig åt för ditt användningsfall ändrar du variablerna i priskalkylatorn så att de matchar din förväntade datastorlek och serveringsbelastningskrav. För större eller mindre träningsdatastorlekar ökar eller minskar du storleken på Azure Databricks-klustret. Om du vill hantera fler samtidiga användare under modellservering ökar du AKS-klusterstorleken.
Deltagare
Microsoft ansvarar för denna artikel. Följande deltagare skrev den här artikeln.
Huvudförfattare:
- James Nguyen | Huvudarkitekt för molnlösning
Om du vill se linkedin-profiler som inte är offentliga loggar du in på LinkedIn.
Nästa steg
- Konfigurera ett Kubernetes-kluster för Machine Learning
- GitHub-lagringsplatsen för lösningsacceleratorn för många modeller
- ParallelRunStep-klass
- DataTransferStep-klass
- Skapa datalager
- Vad är Azure Synapse Analytics?
- Distribuera en modell till ett AKS-kluster