Den här artikeln beskriver en arkitektur för många modeller som använder Machine Learning- och beräkningskluster. Det ger stor mångsidighet för situationer som kräver komplex konfiguration.
En tillhörande artikel, Många modellerar maskininlärning i stor skala i Azure med Spark, använder Apache Spark i antingen Azure Databricks eller Azure Synapse Analytics.
Arkitektur
Ladda ned en Visio-fil med den här arkitekturen.
Arbetsflöde
- Datainmatning: Azure Data Factory hämtar data från en källdatabas och kopierar dem till Azure Data Lake Storage. Den lagrar den sedan i ett Machine Learning-datalager som en tabelldatauppsättning.
- Modellträningspipeline:
- Förbereda data: Träningspipelinen hämtar data från datalagringen och transformerar dem ytterligare efter behov. Den grupperar också data i datauppsättningar för träning av modellerna.
- Träna modeller: Pipelinen tränar modeller för alla datauppsättningar som skapades under dataförberedelserna. Den använder klassen ParallelRunStep för att träna flera modeller parallellt. När en modell har tränats registrerar pipelinen den i Machine Learning tillsammans med testmåtten.
- Modellhöjningspipeline:
- Utvärdera modeller: Kampanjpipelinen 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. Det kan till exempel kontrollera att noggrannheten för testdata är över 80 procent.
- Registrera modeller: Befordranspipelinen registrerar de modeller som är kvalificerade för produktionsarbetsytan Machine Learning.
- Modell för batchbedömningspipeline:
- Förbereda data: Pipelinen för batchbedömning hämtar data från datalagringen och transformerar varje fil efter behov. Den grupperar även data 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 hittar lämplig modell för varje datauppsättning i Machine Learning genom att söka i modelltaggar. Sedan laddar den ned modellen och använder den för att poängsätta datamängden. Den använder klassen DataTransferStep för att skriva tillbaka resultaten till Azure Data Lake och skickar sedan förutsägelser från Azure Data Lake till Synapse SQL för servering.
- Realtidsbedömning: Azure Kubernetes Service (AKS) kan göra realtidsbedömningar om det behövs. På grund av det stora antalet modeller bör de läsas in på begäran, inte förinlästa.
- Resultat:
- Förutsägelser: Pipelinen för batchbedömning sparar förutsägelser till Synapse SQL.
- Mått: Power BI ansluter till modellförutsägelserna för att hämta och aggregera resultat för presentationen.
Komponenter
- Azure Machine Learning är en maskininlärningstjänst i företagsklass för att snabbt skapa och distribuera modeller. Det ger användare på alla kunskapsnivåer en designer med låg kod, automatiserad ML (AutoML) och en värdbaserad Jupyter Notebook-miljö som stöder olika IDE:er.
- Azure Databricks är ett molnbaserat datateknikverktyg som baseras på Apache Spark. Den kan bearbeta och transformera enorma mängder data och utforska dem med hjälp av maskininlärningsmodeller. Du kan skriva jobb i R, Python, Java, Scala och Spark SQL.
- Azure Synapse Analytics är en analystjänst som förenar dataintegrering, lagring av företagsdata och stordataanalys.
- Synapse SQL är ett distribuerat frågesystem för T-SQL som möjliggör datalagerhantering och datavirtualiseringsscenarier och utökar T-SQL för att hantera scenarier för direktuppspelning och maskininlärning. Den erbjuder både serverlösa och dedikerade resursmodeller.
- Azure Data Lake Storage är en mycket skalbar och säker lagringstjänst för analysarbetsbelastningar med höga prestanda.
- Azure Kubernetes Service (AKS) är en fullständigt hanterad Kubernetes-tjänst för att distribuera och hantera containerbaserade program. AKS förenklar distributionen av ett hanterat AKS-kluster i Azure genom att avlasta driftkostnaderna till Azure.
- Azure DevOps är en uppsättning utvecklartjänster som tillhandahåller omfattande livscykelhantering för program och infrastruktur. DevOps innehåller lösningar för arbetsspårning, källkontroll, build och CI/CD, pakethantering och testning.
- Microsoft 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.
Alternativ
- Källdata kan komma från valfri databas.
- Du kan använda en hanterad onlineslutpunkt eller AKS för att distribuera inferens i realtid.
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 modellera underhå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 Azure 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, kommer varje datauppsättning att vara för en unik kombination av objektlager.
Potentiella användningsfall
- Detaljhandel: En butikskedja måste skapa en separat intäktsprognosmodell för varje butik och artikel, med totalt över 1 000 modeller per butik.
- Leveranskedja: För varje kombination av lager och produkt måste ett distributionsföretag optimera inventeringen.
- Restauranger: En kedja med tusentals franchisetagare måste prognostisera efterfrågan på var och en.
Att tänka på
Dessa överväganden implementerar grundpelarna i Azure Well-Architected Framework, som är en uppsättning vägledande grundsatser som kan användas för att förbättra kvaliteten på en arbetsbelastning. Mer information finns i Microsoft Azure Well-Architected Framework.
- Datapartitioner Partitionering av data är nyckeln till att implementera många modeller-mönstret. Om du vill ha en modell per lager består en datauppsättning av alla data för ett lager, och 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 produkter och butiker. 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 mycket bra för sådana uppgifter, medan Python Pandas inte gör det, eftersom det bara körs på en nod och process.
- Modellhantering: Tränings- och bedömningspipelines identifierar och anropar rätt modell för varje datauppsättning. För att göra detta beräknar de taggar som kännetecknar datamängden och använder sedan taggarna för att hitta matchande modell. Taggarna identifierar datapartitionsnyckeln och modellversionen och kan även ge annan information.
- Välja 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.
- När dina maskininlärningstränings- och bedömningsalgoritmer är enkla kan du kanske partitionera data med bibliotek som scikit-learn. I sådana fall kanske du inte behöver Spark, så du kan undvika eventuella komplexiteter som kan uppstå när du installerar Azure Synapse eller Azure Databricks.
- När träningsdatauppsättningarna redan har skapats, till exempel i separata filer eller i separata rader eller kolumner, behöver du inte Spark för komplexa datatransformeringar.
- Machine Learning- och beräkningsklusterlösningen ger stor 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änade modeller. Djupinlärning för visuellt innehåll och bearbetning av naturligt språk (NLP) är exempel på program som kan kräva sådan mångsidighet.
- Spark-träning och poängsättning: När du använder Spark-arkitekturen kan du använda Spark Pandas-funktions-API:et för parallell träning och bedömning.
- Separata modelllagringsplatser: För att skydda de distribuerade modellerna bör du överväga att lagra dem på sin egen lagringsplats som tränings- och testpipelines inte rör.
- ParallelRunStep-klass: Klassen Python ParallelRunStep är ett kraftfullt alternativ för att köra många modellers träning och slutsatsdragning. Den kan partitionera dina data på flera olika sätt och sedan tillämpa maskininlärningsskriptet på delar av partitionen parallellt. Precis som andra former av Maskininlärningsträning kan du ange en anpassad träningsmiljö med å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 i början kan modellerna uttö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 handlar om att titta på sätt att minska onödiga utgifter och förbättra drifteffektiviteten. Mer information finns i Checklista för designgranskning för kostnadsoptimering.
Använd priskalkylatorn för att bättre förstå kostnaden för att köra det här scenariot på Azure. Bra startantaganden är:
- Serveringsmodellerna tränas dagligen för att hålla dem aktuella.
- För en datamängd på 40 miljoner rader med 10 000 kombinationer av lagring och produkt tar det cirka 30 minuter att träna på Azure Databricks med ett kluster etablerat med 12 virtuella datorer 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 autoskalningar efter behov, vilket resulterar i att två noder per månad är aktiva i genomsnitt.
Om du vill se hur priserna skiljer sig åt för ditt användningsfall ändrar du variablerna 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
Den här artikeln underhålls av Microsoft. Det har ursprungligen skrivits av följande medarbetare.
Huvudförfattare:
- James Nguyen | Huvudarkitekt för molnlösning
Nästa steg
- Konfigurera ett Kubernetes-kluster för Azure Machine Learning
- GitHub-lagringsplats för Lösningsacceleratorn för många modeller
- ParallelRunStep-klass
- DataTransferStep-klass
- Ansluta till lagringstjänster i Azure
- Vad är Azure Synapse Analytics?
- Distribuera en modell till ett Azure Kubernetes Service-kluster