Redigera

Dela via


Många modeller maskininlärning (ML) i stor skala i Azure med Spark

Azure Data Factory
Azure Data Lake
Azure Databricks
Azure Machine Learning
Azure Synapse Analytics

Den här artikeln beskriver en arkitektur för många modeller som använder Apache Spark i antingen Azure Databricks eller Azure Synapse Analytics. Spark är ett kraftfullt verktyg för stora och komplexa datatransformeringar som vissa lösningar kräver.

Kommentar

Använd Spark version 3.0 och senare för många modellprogram. Funktionerna för datatransformering och stöd för Python och Pandas är mycket bättre än i tidigare versioner.

En kompletterande artikel, Många modeller maskininlärning i stor skala med Azure Mašinsko učenje, använder Mašinsko učenje och beräkningskluster.

Arkitektur

Arkitekturdiagram för många modeller maskininlärning i stor skala i Azure med Spark.

Ladda ned en Visio-fil med den här arkitekturen.

Dataflöde

  1. Datainmatning: Azure Data Factory hämtar data från en källdatabas och kopierar dem till Azure Data Lake Storage.
  2. Modellträningspipeline:
    1. Förbereda data: Träningspipelinen hämtar data från Data Lake Storage och använder Spark för att gruppera dem i datauppsättningar för att träna modellerna.
    2. Träna modeller: Pipelinen tränar modeller för alla datauppsättningar som skapades under dataförberedelserna. Den använder pandas-funktions-API:et för att träna flera modeller parallellt. När en modell har tränats registrerar pipelinen den i Mašinsko učenje tillsammans med testmåtten.
  3. Modellhöjningspipeline:
    1. 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.
    2. Registrera modeller: Marknadsföringspipelinen registrerar de modeller som är kvalificerade för produktion Mašinsko učenje arbetsytan.
  4. Modell för batchbedömningspipeline:
    1. Förbereda data: Pipelinen för batchbedömning hämtar data från Data Lake Storage och använder Spark för att gruppera dem i datauppsättningar för bedömning.
    2. Poängmodeller: Pipelinen använder pandas-funktions-API:et för att poängsätta flera datauppsättningar parallellt. Den hittar lämplig modell för varje datauppsättning i Mašinsko učenje 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 Spark-anslutningsappen till Synapse SQL för att behålla resultatet.
  5. 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.
  6. Resultat:
    1. Förutsägelser: Pipelinen för batchbedömning sparar förutsägelser till Synapse SQL.
    2. Mått: Power BI ansluter till modellförutsägelserna för att hämta och aggregera resultat för presentationen.

Komponenter

  • Azure Mašinsko učenje ä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 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

  • Du kan använda Spark i Azure Synapse i stället för Spark i Azure Databricks för modellträning och bedömning.
  • 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 mycket vanligt inom en mängd olika branscher och gäller för många verkliga användningsfall. Med hjälp av Azure Mašinsko učenje 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.
    • Lösningen Mašinsko učenje- och beräkningskluster 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.
  • 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.
  • Träningsskalbarhet: Genom att använda Spark kan du träna hundratusentals modeller parallellt. Spark startar flera träningsprocesser på varje virtuell dator i ett kluster. Varje kärna kan köra en separat process. Det innebär god resursanvändning, men det är viktigt att du storleksanpassar klustret korrekt och väljer rätt SKU, särskilt om träningsprocessen är dyr och tidskrävande.

Kostnadsoptimering

Kostnadsoptimering handlar om att titta på sätt att minska onödiga utgifter och förbättra drifteffektiviteten. Mer information finns i Översikt över kostnadsoptimeringspelare.

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 Mašinsko učenje 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:

Nästa steg